sealed (Referência de C#)sealed (C# Reference)

Quando aplicado a uma classe, o modificador sealed impede que outras classes herdem dela.When applied to a class, the sealed modifier prevents other classes from inheriting from it. No exemplo a seguir, a classe B herda da classe A, mas nenhuma classe pode herdar da classe B.In the following example, class B inherits from class A, but no class can inherit from class B.

class A {}
sealed class B : A {}

Você também pode usar o modificador sealed em um método ou propriedade que substitui um método ou propriedade virtual em uma classe base.You can also use the sealed modifier on a method or property that overrides a virtual method or property in a base class. Com isso, você pode permitir que classes sejam derivadas de sua classe e impedir que substituam métodos ou propriedades virtuais.This enables you to allow classes to derive from your class and prevent them from overriding specific virtual methods or properties.

ExemploExample

No exemplo a seguir, Z herda de Y, mas Z não pode substituir a função virtual F declarada em X e lacrada em Y.In the following example, Z inherits from Y but Z cannot override the virtual function F that is declared in X and sealed in Y.

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"); }
}

Quando define novos métodos ou propriedades em uma classe, você pode impedir que classes derivadas as substituam ao não declará-las como virtuais.When you define new methods or properties in a class, you can prevent deriving classes from overriding them by not declaring them as virtual.

É um erro usar o modificador abstract com uma classe selada, porque uma classe abstrata deve ser herdada por uma classe que fornece uma implementação dos métodos ou propriedades abstratas.It is an error to use the abstract modifier with a sealed class, because an abstract class must be inherited by a class that provides an implementation of the abstract methods or properties.

Quando aplicado a um método ou propriedade, o modificador sealed sempre deve ser usado com override.When applied to a method or property, the sealed modifier must always be used with override.

Como structs são lacrados implicitamente, eles não podem ser herdados.Because structs are implicitly sealed, they cannot be inherited.

Para obter mais informações, consulte Herança.For more information, see Inheritance.

Para obter mais exemplos, consulte Classes e membros de classes abstratas e lacradas.For more examples, see Abstract and Sealed Classes and Class Members.

ExemploExample

sealed class SealedClass
{
    public int x;
    public int y;
}

class SealedTest2
{
    static void Main()
    {
        SealedClass sc = new SealedClass();
        sc.x = 110;
        sc.y = 150;
        Console.WriteLine("x = {0}, y = {1}", sc.x, sc.y);
    }
}
// Output: x = 110, y = 150

No exemplo anterior, você pode tentar herdar da classe lacrada usando a instrução a seguir:In the previous example, you might try to inherit from the sealed class by using the following statement:

class MyDerivedC: SealedClass {} // Error

O resultado é uma mensagem de erro:The result is an error message:

'MyDerivedC': cannot derive from sealed type 'SealedClass'

ComentáriosRemarks

Para determinar se deve lacrar uma classe, método ou propriedade, geralmente você deve considerar os dois pontos a seguir:To determine whether to seal a class, method, or property, you should generally consider the following two points:

  • Os possíveis benefícios que as classes derivadas podem obter por meio da capacidade de personalizar a sua classe.The potential benefits that deriving classes might gain through the ability to customize your class.

  • O potencial de as classes derivadas modificarem suas classes de forma que elas deixem de funcionar corretamente ou como esperado.The potential that deriving classes could modify your classes in such a way that they would no longer work correctly or as expected.

Especificação da linguagem C#C# language specification

Para obter mais informações, consulte a Especificação da linguagem C#.For more information, see the C# Language Specification. A especificação da linguagem é a fonte definitiva para a sintaxe e o uso de C#.The language specification is the definitive source for C# syntax and usage.

Consulte tambémSee also