sealed (C# 參考)
套用至類別時,sealed
修飾詞可防止其他類別繼承自它。 在下列範例中,B
類別繼承自 A
類別,但類別無法繼承自 B
類別。
class A {}
sealed class B : A {}
您也可以在方法或屬性上使用可覆寫基底類別中虛擬方法或屬性的 sealed
修飾詞。 這可讓您允許類別衍生自您的類別,並防止它們覆寫特定虛擬方法或屬性。
範例
在下列範例中,Z
繼承自 Y
,但 Z
無法覆寫宣告於 X
並密封於 Y
的虛擬函式 F
。
class X
{
protected virtual void F() { Console.WriteLine("X.F"); }
protected virtual void F2() { Console.WriteLine("X.F2"); }
}
class Y : X
{
sealed protected override void F() { Console.WriteLine("Y.F"); }
protected override void F2() { Console.WriteLine("Y.F2"); }
}
class Z : Y
{
// Attempting to override F causes compiler error CS0239.
// protected override void F() { Console.WriteLine("Z.F"); }
// Overriding F2 is allowed.
protected override void F2() { Console.WriteLine("Z.F2"); }
}
當您在類別中定義新方法或屬性時,可以不將這些方法或屬性宣告為 virtual,以防止衍生類別覆寫它們。
搭配使用 abstract 修飾詞與 sealed 類別會產生錯誤,因為提供 abstract 方法或屬性實作的類別必須繼承 abstract 類別。
套用至方法或屬性時,sealed
修飾詞必須一律與 override 搭配使用。
結構會隱含地進行密封,因此無法進行繼承。
如需詳細資訊,請參閱繼承。
如需更多範例,請參閱抽象和密封類別以及類別成員。
sealed class SealedClass
{
public int x;
public int y;
}
class SealedTest2
{
static void Main()
{
var sc = new SealedClass();
sc.x = 110;
sc.y = 150;
Console.WriteLine($"x = {sc.x}, y = {sc.y}");
}
}
// Output: x = 110, y = 150
在上述範例中,您可以嘗試使用下列陳述式從 sealed 類別繼承︰
class MyDerivedC: SealedClass {} // Error
結果是錯誤訊息:
'MyDerivedC': cannot derive from sealed type 'SealedClass'
備註
若要判斷是否密封類別、方法或屬性,您通常應該考慮下列兩點︰
衍生類別的潛在優點可能是透過類別自訂功能所取得。
衍生類別可能會修改您的類別,因此它們無法再正確運作或如預期運作。
C# 語言規格
如需詳細資訊,請參閱<C# 語言規格>。 語言規格是 C# 語法及用法的限定來源。