特點 1 - 使用 Sealed 關鍵字使類別不能被繼承
下列為簡單的Sealed範例。
父類別Class Car
,有兩個屬性分別為Speed
與Color
,並自行訂定建構子Car()
,以及DriveCar()
方法,在這範例中我們將Car類別
,新增Sealed修飾詞
,主要目的為不然其它類別繼承。
/// <summary>
/// 父類別
/// </summary>
public sealed class Car //增加Sealed
{
//車子的速度
public string Speed;
//車子的顏色
public string Color;
/// <summary>
/// 定義建構子,預設Speed為50,Color為Blue
/// </summary>
public Car()
{
Speed = "50";
Color = "Blue";
}
//定義車子移動的方法
public string DriveCar()
{
return "正在開『" + Color + "』的車" + "時速『" + Speed + "』在移動" ;
}
}
子類別BMWCar
繼承父類別Car,並有自行定義建構子BMWCar() ,以及BMWPower屬性。由於父類別Car有加Sealed因此無法被繼承。依下列程式碼,會找不到父類別的Speed與Color,而出現錯誤訊息。
/// <summary>
/// 子類別想繼承Car Class,但因為Car有加Sealed因此無法被繼承。
/// </summary>
public class BMWCar :Car
{
//BMWCar類別建構子
public BMWCar()
{
Speed = "BMW500";
Color = "BWM_Red";
}
//BMW的屬性引擎
public string BMWPower;
}
特點 2 - 已覆寫完的方法不給衍生類別再覆寫
有時在使用時,我們不想讓已經覆寫過的方法要著麼做呢 ? 下列程式碼,有三個類別Car、BMWCar、IBMWCar。繼承關於為Car → BMWCar → IBMWCar
//父類別
public class Car
{
//定義車子移動的方法。
//在該方法加上Virtual,讓該方法可以被衍生類別覆寫。
public virtual string DriveCar( string a)
{
return "正在開『" + Color + "』的車" + "時速『" + Speed + "』在移動" ;
}
}
要讓BWMCar已覆寫過的DriveCar()不被IBMWCa覆寫,要在DriveCar前加上sealed
修飾詞。
//BMWCar繼承Car Class
public class BMWCar: Car
{
//定義車子移動的方法
//使用存取修飾詞Overried,來進行覆寫
//參數a 為 string
public sealed override string DriveCar(string a)
{
return "正在開『" + Color + "』的車" + "時速『" + Speed + "』在移動" + "『Override』" + "String--" + a;
}
}
//測試可不覆寫DriveCar();
//IBMWCar 繼承 BMWCar
public class IBMWCar : BMWCar
{
public override string DriveCar( string a)
{
return "ICar" ;
}
}
這時就會發生下列錯誤,告知該方法無法在被覆寫。