Herencia Múltiple en C #

Dado que la herencia múltiple es mala (hace que la fuente sea más complicada) C # no proporciona tal 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 necesito cambiar la clasePrimero y segundo también.

¿Hay una manera de inyectar múltiples clases existentes en una nueva clase como es posible en C ++?

Tal vez hay una solución utilizando algún tipo de generación de código?

O puede verse así (sintaxis de c # imaginaria):

public class FirstAndSecond: IFirst from First, ISecond from Second
{ }

Para que no haya necesidad de actualizar la clase FirstAndSecond cuando modifique una de las interfaces.

EDITAR

Quizás sería mejor considerar un ejemplo práctico:

Tienes una clase existente (por ejemplo, un cliente TCP basado en texto basado en ITextTcpClient) que ya usas en diferentes ubicaciones dentro de tu proyecto. Ahora siente la necesidad de crear un componente de su clase para que sea fácilmente accesible para los desarrolladores de formularios de Windows.

Por lo que sé, actualmente tiene dos formas de hacerlo:

Escriba una nueva clase que se herede de los componentes e implemente la interfaz de la clase TextTcpClient usando una instancia de la clase como se muestra con FirstAndSecond.

Escriba una nueva clase que herede de TextTcpClient y de alguna manera implementa IComponent (aún no lo he intentado).

En ambos casos, debe trabajar por método y no por clase. Como usted sabe que necesitaremos todos los métodos de TextTcpClient y Component, sería la solución más fácil simplemente combinar esos dos en una clase.

Para evitar conflictos, esto puede hacerse mediante la generación de código, donde el resultado podría modificarse posteriormente, pero escribir esto a mano es un dolor puro en el culo.

Respuestas a la pregunta(16)

Su respuesta a la pregunta