A noção de herança representa um dos tópicos mais conhecidos dentro da Orientação a Objetos. Dando grande ênfase à questão do reaproveitamento de código, este conceito permite a implementação de variações de uma classe a partir da redefinição de alguns de seus comportamentos básicos (ou mesmo todos). Outra possibilidade também seria estender as capacidades de um tipo, adicionando a este último novas funcionalidades que não foram previstas na classe original.
No caso específico da plataforma .NET, qualquer classe pode a princípio ser herdada. Embora esta capacidade seja uma característica desejável, existem situações em que surgirá a necessidade de se evitar tal comportamento. O desenvolvimento de frameworks exemplifica bem isto, em que proibir a herança de uma classe básica será muitas vezes um pré-requisito do próprio projeto em questão (a fim de evitar o uso incorreto das estruturas existentes ou devido a alguma restrição comercial).
Considerando o uso do C# para o desenvolvimento de soluções em .NET, empregar a palavra-chave sealed na declaração de uma classe corresponde ao meio através do qual será possível impedir que outras estruturas consigam herdá-la. Na listagem a seguir está um exemplo de utilização deste recurso, em que o tipo PessoaFisica foi marcado como sealed de forma a impossibilitar a implementação de subclasses derivadas do mesmo:
[code language=”csharp”]
namespace TesteSealed
{
public sealed class PessoaFisica
{
public string CPF { get; set; }
public string RG { get; set; }
public string Nome { get; set; }
}
}
[/code]
Supondo agora a codificação de uma classe chamada FuncionarioCLT, a qual derivaria de PessoaFisica:
[code language=”csharp”]
namespace TesteSealed
{
public class FuncionarioCLT : PessoaFisica
{
public string CTPS { get; set; }
}
}
[/code]
A tentativa de implementar este novo tipo herdando de PessoaFisica resultaria em um erro, como indicado na próxima imagem:
Concluo assim mais este post sobre C#, lembrando que informações adicionais sobre classes sealed podem ser encontradas na seção de Referências.
Espero que este conteúdo possa ter sido útil.
Até uma próxima oportunidade!
Referências
sealed (C# Reference)
https://msdn.microsoft.com/en-us/library/88c54tsw.aspx