Como a herança múltipla é ruim (torna a fonte mais complicada), o C # não fornece esse padrão diretamente. Mas, às vezes, seria útil ter essa capacidade.
Por exemplo, eu sou capaz de implementar o padrão de herança múltipla ausente usando interfaces e três classes como essa:
public interface IFirst { void FirstMethod(); }
public interface ISecond { void SecondMethod(); }
public class First:IFirst
{
public void FirstMethod() { Console.WriteLine("First"); }
}
public class Second:ISecond
{
public void SecondMethod() { Console.WriteLine("Second"); }
}
public class FirstAndSecond: IFirst, ISecond
{
First first = new First();
Second second = new Second();
public void FirstMethod() { first.FirstMethod(); }
public void SecondMethod() { second.SecondMethod(); }
}
Toda vez que adiciono um método a uma das interfaces, também preciso alterar a classe FirstAndSecond .
Existe uma maneira de injetar várias classes existentes em uma nova classe, como é possível em C ++?
Talvez haja uma solução usando algum tipo de geração de código?
Ou pode ficar assim (sintaxe c # imaginária):
public class FirstAndSecond: IFirst from First, ISecond from Second
{ }
Para que não seja necessário atualizar a classe FirstAndSecond quando eu modificar uma das interfaces.
EDITAR
Talvez seja melhor considerar um exemplo prático:
Você tem uma classe existente (por exemplo, um cliente TCP baseado em texto, com base no ITextTcpClient), que você já usa em diferentes locais dentro do seu projeto. Agora você sente a necessidade de criar um componente da sua classe para ser facilmente acessível aos desenvolvedores de formulários do Windows.
Até onde eu sei, atualmente você tem duas maneiras de fazer isso:
Escreva uma nova classe que seja herdada dos componentes e implemente a interface da classe TextTcpClient usando uma instância da própria classe, como mostrado em FirstAndSecond.
Escreva uma nova classe que herda de TextTcpClient e de alguma forma implemente IComponent (na verdade, ainda não tentei isso).
Nos dois casos, você precisa trabalhar por método e não por classe. Como você sabe que precisaremos de todos os métodos de TextTcpClient e Component, seria a solução mais fácil apenas combinar os dois em uma classe.
Para evitar conflitos, isso pode ser feito por geração de código, onde o resultado pode ser alterado posteriormente, mas digitar manualmente é uma pura dor de cabeça.