selado (Referência C#)

Quando aplicado a uma classe, o sealed modificador 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 sealed modificador 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, herda de, mas Z não pode substituir, Z a função F virtual declarada e X selada em Y.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 as classes derivadas os substituam não declarando-os como virtuais.

É 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 sealed modificador deve sempre ser usado com substituição.

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

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

Para obter mais exemplos, consulte Classes abstratas e seladas e Membros da 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'

Observações

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 obter 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#.

Consulte também