sealed (Referência de C#)
Quando aplicado a uma classe, o sealed modificador impede que outras classes de herdar a partir dele. 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 na classe base. Isso permite que você permita classes derivar de sua classe e impedir que eles substituam as propriedades ou métodos virtuais específicos.
Exemplo
No exemplo a seguir, Z herda de Y , mas Z não pode substituir a função virtual F que é declarado em X e lacrada 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("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 derivados substituam-los, não declarando-os como virtual.
É um erro para usar o abstrata modificador com uma classe selada, porque uma classe abstrata que deve ser herdada por uma classe que fornece uma implementação das propriedades ou métodos abstratos.
Quando aplicado a um método ou propriedade, o sealed modificador sempre deve ser usado com Substituir.
Porque structs implicitamente são seladas, eles não podem ser herdados.
Para obter mais informações, consulte Herança (Guia de Programação em C#).
Para obter mais exemplos, consulte Classes e membros de classes abstract e sealed (Guia de Programação em 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 instrução 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 a Especificação da linguagem C#. A especificação da linguagem é a fonte definitiva para a sintaxe e o uso de C#.
Comentários
Para determinar se deve selar uma classe, método ou propriedade, geralmente, considere os dois pontos a seguintes:
Os possíveis benefícios que derivar classes pode obter por meio da capacidade de personalizar a sua classe.
O potencial de derivar classes poderia modificar suas classes de tal maneira que podem não mais funcionar corretamente ou como esperado.
Consulte também
Referência
Classes static e membros de classes static (Guia de Programação em C#)
Classes e membros de classes abstract e sealed (Guia de Programação em C#)
Modificadores de acesso (Guia de Programação em C#)
Modificadores (Referência de C#)