Curiosidades C# – Herança múltipla

Herança é um dos atributos fundamentais da programação orientada a objeto. Ela permite que você defina uma classe filha que reutiliza (herda), estende ou modifica o comportamento de uma classe pai. [Microsoft]

É importante deixar claro que “C# e .NET oferecem suporte apenas à herança única. Ou seja, uma classe pode herdar apenas de uma única classe”, porem permite que você defina uma hierarquia de herança para um conjunto de tipos.

Isso quer dizer que uma classe pode herdar os membros de uma classe base, que por sua vez pode herdar de outra classe. Na biologia um bom exemplo dessa conexão são as categorias taxonômicas.

Exemplo:

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

Alterando o código para adicionar múltipla herança, podemos ver um erro gerado no compilador.

Exemplo:

namespace MultipleInheritance
{
    //Error CS1721 Class 'Order' cannot have multiple base classes: 'Class' and 'Phylum'
    class Order : Class, Phylum
    {
    }
}

Porque c# não aceita heranças múltiplas

Na literatura encontrada on-line, o motivo foi “adicionar múltipla herança adiciona muito complexidade ao C# enquanto fornece muito pouco beneficio”. Não consegui achar nenhuma explicação oficial na documentação do C#.

Alternativa

Uma alternativa possível para é a uso de múltiplas interfaces, assim você pode ter os comportamentos desejados evitando a complexidade com herança múltipla. Embora uma classe possa ter apenas uma classe base direta, é permitido para uma interface derivar diretamente de várias interfaces. Usando esta técnica, você pode construir hierarquias de interface sofisticadas que modelam comportamentos complexos.

Conclusão

Na internet podemos encontrar diversas alternativas para contornar essa limitação da linguagem. Fica a critério de cada programador e projeto usar a solução que mais lhe convêm. A dica é sempre seguir ao máximo a documentação oficial da Microsoft e sempre adotar o melhor a solução que atende ao projeto e não ao projetista.

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

Principais referências

– https://docs.microsoft.com/pt-br/dotnet/csharp/tutorials/inheritance
– Livro: Pro C# 7: With .NET and .NET Core – Andrew Troelsen
– https://iuristona.wordpress.com/2012/07/24/como-implementar-heranca-multipla-com-interfaces-em-c/
– https://pt.stackoverflow.com/questions/3596/por-que-o-c-n%C3%A3o-permite-heran%C3%A7as-multiplas

Leave a Reply

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