sealed(C# 参考)

将修饰符应用于 sealed 类时,它会阻止其他类从该类继承。 在下面的示例中,类 B 继承自类 A,但类无法从类 B继承。

class A {}
sealed class B : A {}

还可以对替代基类中的虚方法或属性的方法或属性使用 sealed 修饰符。 通过使用此方法,开发人员可以从类派生类,同时阻止它们重写特定的虚拟方法或属性。

C# 语言参考记录了 C# 语言的最新发布版本。 它还包含即将发布的语言版本公共预览版中功能的初始文档。

本文档标识了在语言的最后三个版本或当前公共预览版中首次引入的任何功能。

小窍门

若要查找 C# 中首次引入功能时,请参阅 有关 C# 语言版本历史记录的文章。

在以下示例中,Z继承自YZ不能重写在中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# 语法和用法的明确来源。

另请参阅