共用方式為


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# 語法及用法的限定來源。

另請參閱