Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Quando aplicas o sealed modificador a uma classe, isso 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 virtual ou propriedade em uma classe base. Ao usar esta abordagem, permite que os programadores derivem classes da sua classe, evitando que sobreponham métodos ou propriedades virtuais específicas.
A referência da linguagem C# documenta a versão mais recentemente lançada da linguagem C#. Contém também documentação inicial para funcionalidades em versões preliminares públicas para a próxima versão da linguagem.
A documentação identifica qualquer funcionalidade introduzida pela primeira vez nas últimas três versões da língua ou em pré-visualizações públicas atuais.
Sugestão
Para saber quando uma funcionalidade foi introduzida pela primeira vez em C#, consulte o artigo sobre o histórico de versões da linguagem C#.
No exemplo seguinte, Z herda de Y mas Z não pode sobrescrever a função F virtual que é 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.
Quando sobrescreve um virtual membro declarado num tipo base, pode evitar que tipos derivados o sobreponham usando a sealed palavra-chave mostrada no exemplo seguinte:
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 ou propriedades abstratas.
Quando aplicares o sealed modificador a um método ou propriedade, usa-o sempre com override.
Como os structs estão implicitamente selados, não podes herdar deles.
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'
Para determinar se deve selar uma classe, método ou propriedade, considere geralmente os seguintes dois pontos:
- Os benefícios potenciais que as classes derivadas podem obter através da capacidade de personalizar sua classe.
- A possibilidade de que derivar classes possa modificar as suas classes de forma a que deixem de funcionar 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#.