O modificador sealed em CSharp (C#) é utilizado para impedir que os usuários herdem a classe que utiliza o modificador. Acredito que até o nome do modificar deixe um pouco claro na tradução literal “selada“. Muitos no dia a dia acabam passando desapercebido sobre este modificador no CSharp e podem não ter conhecimento de seu
O modificador sealed em CSharp (C#) é utilizado para impedir que os usuários herdem a classe que utiliza o modificador.
Acredito que até o nome do modificar deixe um pouco claro na tradução literal “selada“.
Muitos no dia a dia acabam passando desapercebido sobre este modificador no CSharp e podem não ter conhecimento de seu real funcionamento.
Por isso, vou deixar alguns motivos para começar a utilizar este modificador a partir de agora. Vamos lá!
Para que serve o modificador sealed no CSharp?
A palavra chave sealed indicado ao compilador que a classe está selada e então, não pode ser extendida.
Portanto, nenhuma classe pode ser derivada de uma classe com um modificador sealed.
A seguir, para você que não conhece, este é o modificador sealed no CSharp:
sealed class your_class
{
//sua classe aqui
}
Um método também pode ser sealed, porém não podendo neste caso, ser utilizado na classe base. Para isto, você deverá criar um método virtual em uma sua classe base e na classe derivada, colocar caso queira, modificador sealed no método.
Exemplos de uso da classe sealed
Vamos a alguns exemplos para conhecer a classe sealed. Veja:
public sealed class SealedClass
{
public string DoSomething(int value1)
{
return $"The value is {value1}";
}
}
Se executarmos em um Console.App, teremos o seguinte código para a chamada da classe acima:
SealedClass sealedClass = new SealedClass();
var returned = sealedClass.DoSomething(20);
Console.WriteLine(returned);
E após executar, o resultado em tela:

Agora, vamos ver onde ela irá nos impedir de extender, por exemplo, uma classe. Vamos tentar criar uma classe e herdar a classe anterior SealedClass. Veja o que ocorre:

Já no caso do modificador sealed nos métodos, fica um pouco diferente. Você não irá conseguir implementar ele diretamente, sendo utilizado para selar a sobrecarga do método nas classes filhas.
Explico melhor com a imagem a seguir. Veja o que acontece se você tentar utilizar o modificador diretamente na classe que está com o modificador sealed ou a classe base:

Neste caso, não daria para utilizar o modificador no método. Mas se esta fosse uma classe base ou simplesmente uma classe qualquer com o modificador virtual, olha como mudaria:
class AnotherClass
{
public virtual int Sum(int a, int b)
{
return a + b;
}
}
Agora, suponha que não queira permitir que classes que herdem a classe filho dela sobreescrevam este método. Então, o código para isto seria:
class ChildClass2
: AnotherClass
{
public override sealed int Sum(int a, int b)
{
return base.Sum(a, b);
}
}
Como resultado, se você tentar encontrar as sobrecargas dos métodos em uma classe herdada irá obter o resultado em seu código:

Mas então, por que utilizar classes seladas ou o modificador sealed?
Há alguns motivadores que podem nos fazer escolher utilizar este modificador e dentre eles listo:
- A classe sealed como viu neste artigo, é utilizada para impedir que uma classe seja herdada, não sendo possível derivar ou estender qualquer classe a partir dele;
- A partir disto, o método sealed também é implementado de forma que nenhuma outra classe possa derrubá-lo e implementar seu próprio método;
- Melhora a performance, pois se o JIT sabe o estado atual e o tipo do objeto, ele pode ignorar o método virtual e fazer a chamada do método diretamente.
Se quiser baixar este exemplo completo, disponibilizei ele no GitHub do site. É só baixar e estudar.
Já conhece meus cursos ou material que disponibilizo para o aprendizado da programação? Não?
Entre na página da Reverb Treinamentos no Instagram, acesse os links na bio e conheça hoje mesmo os treinamentos.
Leave a Comment
Your email address will not be published. Required fields are marked with *