Множественное наследование в C #

Так как множественное наследование является плохим (это делает источник более сложным), C # не предоставляет такой шаблон напрямую. Но иногда было бы полезно иметь эту способность.

Например, я могу реализовать отсутствующий шаблон множественного наследования, используя интерфейсы и три таких класса:

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(); }
}

Каждый раз, когда я добавляю метод к одному из интерфейсов, мне нужно изменить классFirstAndSecond также.

Есть ли способ внедрить несколько существующих классов в один новый класс, как это возможно в C ++?

Может быть, есть решение, использующее какую-то генерацию кода?

Или это может выглядеть так (воображаемый синтаксис c #):

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

Чтобы не было необходимости обновлять класс FirstAndSecond при изменении одного из интерфейсов.

РЕДАКТИРОВАТЬ

Возможно, было бы лучше рассмотреть практический пример:

У вас есть существующий класс (например, текстовый TCP-клиент на основе ITextTcpClient), который вы уже используете в разных местах вашего проекта. Теперь вы чувствуете необходимость создать компонент вашего класса, чтобы он был легко доступен для разработчиков форм Windows.

Насколько я знаю, у вас есть два способа сделать это:

Напишите новый класс, который унаследован от компонентов и реализует интерфейс класса TextTcpClient, используя экземпляр самого класса, как показано в FirstAndSecond.

Напишите новый класс, который наследуется от TextTcpClient и каким-то образом реализует IComponent (на самом деле еще не пробовал).

В обоих случаях вам нужно выполнять работу по методу, а не по классу. Поскольку вы знаете, что нам понадобятся все методы TextTcpClient и Component, было бы самым простым решением просто объединить эти два в один класс.

Чтобы избежать конфликтов, это может быть сделано путем генерации кода, где результат может быть изменен впоследствии, но ввод этого вручную - чистая боль в заднице.

Ответы на вопрос(16)

Ваш ответ на вопрос