Partilhar via


sealed (referência C#) 

Quando aplicado a uma classe, a sealed modificador impede que outras classes de herança dele. No exemplo a seguir, de 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 na classe base. Isso permite que você permitir classes para derivar de sua classe e impedir que eles substituam propriedades ou métodos virtual específicos.

Exemplo

No exemplo a seguir, C herda do B mas C não é possível substituir a função virtual F que é declarado em A e sealed ao mesmo tempo em B.

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("X.F3"); }
}
class Z : Y
{
    // Attempting to override F causes compiler error CS0239.
    // protected override void F() { Console.WriteLine("C.F"); }

    // Overriding F2 is allowed.
    protected override void F2() { Console.WriteLine("Z.F2"); }
}

Quando você define novos métodos ou propriedades em uma classe, você pode impedir que classes deriving substituindo-sistema autônomo por não declará-los sistema autônomo virtual.

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

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

Como estruturas são seladas implicitamente, eles não podem ser herdados.

Para obter mais informações, consulte Herança (Guia de programação C#).

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 experimentar herdar da classe sealed usando a demonstrativo a seguir:

class MyDerivedC: SealedClass {} // Error

O resultado é uma mensagem de erro:

'MyDerivedC' cannot inherit from sealed class 'SealedClass'.

Especificação da linguagem C#

Para obter mais informações, consulte as seções a seguir no Especificação da linguagem C#:

  • 10.1.1.2 Classes sealed

  • 10.6.5 Métodos lacrados

Comentários

Para determinar o lacrar uma classe, método ou propriedade, geralmente você deve considerar os dois pontos seguintes:

  • Os possíveis benefícios que derivar classes pode obter por meio da capacidade de personalizar sua classe.

  • O potencial que derivar classes pode modificar suas classes de tal forma que pode não funcionar corretamente ou sistema autônomo esperado.

Consulte também

Conceitos

Guia de Programação C#

Referência

Palavras-chave C#

Classes estáticas e membros de classe estáticos (guia de programação C#)

Abstrato e Sealed classes e membros de classe (guia de programação C#)

Modificadores de acesso (guia de programação C#)

Modificadores (referência C#)

Substituir (referência C#)

(referência C#) virtual

Outros recursos

Referência C#