Tudo sobre CSharp (C#) você encontra aqui

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:

Modificador sealed no CSharp - Exemplol 01
Exemplo 01: pode reparar que executando não há diferença alguma.

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:

Modificador sealed no CSharp - Exemplol 02
Como pode notar, ele irá barrar você de extender esta classe antes mesmo de compilar seu código.

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:

Modificador sealed no CSharp - Exemplo 04
Note que o próprio Visual Studio informa o porque isto não é permitido: “cannot be sealed because it is not an override”, ou seja, não pode ser utilizado o modificador sealed porque este método não é uma sobrecarga.

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:

Modificador sealed no CSharp - Exemplol 03
Note que o método Sum() não é visualizado pela classe derivada Child3.

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 REPLY

Please enter your comment!
Please enter your name here