當你對某個職業套用這個 sealed 修正時,它會阻止其他職業繼承該職業的特性。 在下列範例中,類別 B 繼承自 類別 A,但類別無法繼承自 類別 B。
class A {}
sealed class B : A {}
您也可以在覆寫基類虛擬方法或屬性的方法或屬性上使用 sealed 修飾詞。 透過這種方法,你可以讓開發者從你的類別衍生出類別,同時防止它們覆蓋特定的虛擬方法或屬性。
C# 語言參考資料記錄了 C# 語言最新版本。 同時也包含即將推出語言版本公開預覽功能的初步文件。
文件中標示了語言最近三個版本或目前公開預覽版中首次引入的任何功能。
小提示
欲查詢某功能何時首次在 C# 中引入,請參閱 C# 語言版本歷史的條目。
以下範例中,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 以基底類型宣告的成員時,可以透過使用 sealed 關鍵字防止推導型別覆寫該成員,如下範例所示:
public sealed override string ToString() => Value;
使用 抽象修飾 符搭配密封類別是錯誤的,因為抽象類別必須由提供抽象方法或屬性實作的類別繼承。
當你對方法或屬性套用 sealed 修飾符時,務必搭配 覆寫使用。
因為結構是隱含封存的,你無法繼承它們。
如需詳細資訊,請參閱 繼承。
如需更多範例,請參閱 抽象和密封類別和類別成員。
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
在上一個範例中,您可能會嘗試使用下列語句繼承自封閉類別:
class MyDerivedC: SealedClass {} // Error
結果是錯誤訊息:
'MyDerivedC': cannot derive from sealed type 'SealedClass'
要判斷是否封存類別、方法或屬性,通常考慮以下兩點:
- 衍生類別可能透過具備自定義類別能力而獲得的潛在優點。
- 衍生類別可能會修改你的類別,使其不再正常運作或如預期。
C# 語言規格
如需詳細資訊,請參閱 C# 語言規格。 語言規格是 C# 語法和使用方式的最終來源。