Curiosidades C# – Palavra-chave sealed

C# prove a palavra-chave, sealed, que impede a ocorrência de herança. Quando você marca uma classe como sealed (lacrada), o compilador não permite que você derive desse tipo.

Segundo a Microsoft, você também pode usar o modificador sealed em um método ou propriedade que substitui um método ou propriedade virtual em uma classe base. Com isso, você pode permitir que classes sejam derivadas de sua classe e impedir que substituam métodos ou propriedades virtuais.

Podemos ver abaixo que temos uma herança múltipla.

Exemplo:

namespace MultipleInheritance
{
    class Domain
    {
    }
    class Kingdom : Domain
    {
    }
    class Phylum : Kingdom
    {
    }
}

Agora suponha que você decidiu que não faz sentido estender ainda mais a classe ‘Phylum‘, então podemos marcá-la com o palavra-chave sealed.

Exemplo:

namespace MultipleInheritance
{
    sealed class Phylum : Kingdom
    {
    }
}

Se você (ou um colega de equipe) tentasse derivar desta classe, receberia um erro de tempo de compilação.

Exemplo:

namespace MultipleInheritance
{
    // Error CS0509 "Class": Cannot derive from sealed type "Phylum"
    class Class : Phylum
    {
    }
}

O erro também acontece quando usamos sealed em um método.

Exemplo:

namespace MultipleInheritance
{
    class Domain
    {
        protected virtual void GenomeDomain() { }
    }
    class Kingdom : Domain
    {
        // not a problem
        sealed protected override void GenomeDomain() { }

    }
    sealed class Phylum : Kingdom
    {
        //Error CS0239 "Phylum.GenomeDomain ()": Cannot replace the inherited member "Kingdom.GenomeDomain ()" because it is sealed
        protected override void GenomeDomain() { }
    }
}

Nota: As estruturas C # são sempre implicitamente sealed. Portanto, você nunca pode derivar uma estrutura de outra estrutura, uma classe de uma estrutura ou uma estrutura de uma classe. As estruturas podem ser usadas para modelar apenas tipos de dados autônomos, atômicos e definidos pelo usuário. Se você deseja alavancar o relacionamento do tipo “is-a”, então você deve usar classes.

Qualquer dúvida ou dicas, entre em contato: leandrolt@gmail.com

Principais referências

– https://docs.microsoft.com/pt-br/dotnet/csharp/language-reference/keywords/sealed
– Livro: Pro C# 7: With .NET and .NET Core – Andrew Troelsen

Leave a Reply

Your email address will not be published. Required fields are marked *