Dado que la herencia múltiple es mala (hace que la fuente sea más complicada) C # no proporciona dicho patrón directamente. Pero a veces sería útil tener esta habilidad.
Por ejemplo, puedo implementar el patrón de herencia múltiple faltante usando interfaces y tres clases como esa:
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(); }
}
Cada vez que agrego un método a una de las interfaces, también necesito cambiar la clase FirstAndSecond .
¿Hay alguna manera de inyectar múltiples clases existentes en una nueva clase como es posible en C ++?
¿Tal vez hay una solución usando algún tipo de generación de código?
O puede verse así (sintaxis imaginaria de C #):
public class FirstAndSecond: IFirst from First, ISecond from Second
{ }
Para que no sea necesario actualizar la clase FirstAndSecond cuando modifique una de las interfaces.
EDITAR
Quizás sería mejor considerar un ejemplo práctico:
Tiene una clase existente (por ejemplo, un cliente TCP basado en texto basado en ITextTcpClient) que ya utiliza en diferentes ubicaciones dentro de su proyecto. Ahora siente la necesidad de crear un componente de su clase para que los desarrolladores de formularios de Windows puedan acceder fácilmente.
Hasta donde sé, actualmente tienes dos formas de hacer esto:
Escriba una nueva clase que se herede de los componentes e implemente la interfaz de la clase TextTcpClient usando una instancia de la clase en sí como se muestra con FirstAndSecond.
Escriba una nueva clase que herede de TextTcpClient y de alguna manera implemente IComponent (aún no lo he probado).
En ambos casos, debe trabajar por método y no por clase. Como sabe que necesitaremos todos los métodos de TextTcpClient y Component, sería la solución más fácil combinar esos dos en una sola clase.
Para evitar conflictos, esto se puede hacer mediante la generación de código, donde el resultado podría modificarse después, pero escribir esto a mano es un puro dolor de cabeza.