共用方式為


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 成員時,您可以使用 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# 語法和使用方式的最終來源。

另請參閱