Partilhar via


selado (Referência C#)

Quando aplicado a uma classe, o modificador sealed impede que outras classes herdem dela. 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 virtual ou propriedade em uma classe base. Isso permite que você permita que as classes derivem de sua classe e impeça que elas substituam métodos ou propriedades virtuais específicos.

Exemplo

No exemplo a seguir, Z herda de Y mas Z não pode substituir a função virtual F declarada em 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"); }
}

Ao definir novos métodos ou propriedades em uma classe, você pode impedir que classes derivadas os substituam não declarando-os como virtual. Ao substituir um membro virtual declarado em um tipo base, você pode impedir que tipos derivados os substituam usando a palavra-chave lacrada como no exemplo a seguir:

public sealed override string ToString() => Value;

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

Quando aplicado a um método ou propriedade, o modificador sealed deve sempre ser usado com sobrescrever.

Como as estruturas são implicitamente seladas, elas não podem ser herdadas.

Para obter mais informações, consulte Inheritance.

Para obter mais exemplos, consulte Classes abstratas e seladas e Membros de classe.

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 selada usando a seguinte instrução:

class MyDerivedC: SealedClass {} // Error

O resultado é uma mensagem de erro:

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

Comentários

Para determinar se uma classe, método ou propriedade deve ser selada, você geralmente deve considerar os dois pontos a seguir:

  • Os benefícios potenciais que as classes derivadas podem obter através da capacidade de personalizar sua classe.

  • O potencial que as classes derivadas poderiam modificar suas classes de tal forma que elas não funcionariam mais corretamente ou como esperado.

Especificação da linguagem C#

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

Ver também