Compartilhar via


sealed (Referência de C#)

Quando você aplica o sealed modificador a uma classe, ele impede que outras classes herdem dessa classe. No exemplo a seguir, a classe B herda da classe A, mas nenhuma classe pode herdar da classe 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. Ao usar essa abordagem, você permite que os desenvolvedores derivem classes de sua classe, impedindo-as de substituir métodos ou propriedades virtuais específicos.

A linguagem C# faz referência a documentos da versão mais recentemente lançada da linguagem C#. Ele também contém a documentação inicial para funcionalidades em pré-visualizações públicas para o próximo lançamento do idioma.

A documentação identifica qualquer recurso introduzido pela primeira vez nas três últimas versões do idioma ou nas versões prévias públicas atuais.

Dica

Para descobrir quando um recurso foi introduzido pela primeira vez em C#, consulte o artigo sobre o histórico de versão da linguagem C#.

No exemplo a seguir, Z herda, Y mas Z não pode substituir a função F virtual que é declarada X e selada em 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. Ao substituir um virtual membro declarado em um tipo base, você pode impedir que tipos de derivação o substituam usando a sealed palavra-chave, conforme mostrado no exemplo a seguir:

public sealed override string ToString() => Value;

É um erro usar o modificador abstrato com uma classe lacrada, pois uma classe abstrata deve ser herdada por uma classe que fornece uma implementação dos métodos ou propriedades abstratos.

Ao aplicar o sealed modificador a um método ou propriedade, use-o sempre com substituição.

Como os structs estão implicitamente lacrados, você não pode herdar deles.

Para obter mais informações, consulte Herança.

Para obter mais exemplos, consulte Classes e membros de classes abstratas e lacradas.

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

No exemplo anterior, você pode tentar herdar da classe lacrada usando a seguinte instrução:

class MyDerivedC: SealedClass {} // Error

O resultado é uma mensagem de erro:

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

Para determinar se uma classe, um método ou uma propriedade devem ser lacrados, geralmente considere os dois pontos a seguir:

  • Os possíveis benefícios que as classes derivadas podem obter por meio da capacidade de personalizar a sua classe.
  • O potencial de que as classes derivadas possam modificar suas classes de forma que elas não funcionem mais corretamente ou conforme o esperado.

Especificação da linguagem C#

Para obter mais informações, consulte a Especificação da linguagem C#. A especificação de idioma é a fonte definitiva para a sintaxe e o uso de C#.

Consulte também