多重継承は良くない (ソースが複雑になる) ため、C# はそのようなパターンを直接提供しません。しかし、この能力があると便利な場合もあります。
たとえば、インターフェイスとそのような 3 つのクラスを使用して、欠落している多重継承パターンを実装できます。
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(); }
}
インターフェイスの 1 つにメソッドを追加するたびに、クラスFirstAndSecondも変更する必要があります。
C++ で可能なように、複数の既存のクラスを 1 つの新しいクラスに挿入する方法はありますか?
ある種のコード生成を使用した解決策があるのではないでしょうか?
または、次のようになります (架空の C# 構文)。
public class FirstAndSecond: IFirst from First, ISecond from Second
{ }
インターフェイスの 1 つを変更するときにクラス FirstAndSecond を更新する必要がないようにします。
編集
たぶん、実際の例を検討する方が良いでしょう:
プロジェクト内の別の場所で既に使用している既存のクラス (ITextTcpClient に基づくテキスト ベースの TCP クライアントなど) があります。Windows フォーム開発者が簡単にアクセスできるように、クラスのコンポーネントを作成する必要性を感じています。
私の知る限り、現在これを行うには2つの方法があります。
FirstAndSecond で示されているように、コンポーネントから継承され、クラス自体のインスタンスを使用して TextTcpClient クラスのインターフェイスを実装する新しいクラスを作成します。
TextTcpClient から継承し、何らかの形で IComponent を実装する新しいクラスを作成します (実際にはまだ試していません)。
どちらの場合も、クラスごとではなく、メソッドごとに作業を行う必要があります。TextTcpClient と Component のすべてのメソッドが必要になることがわかっているので、これら 2 つを 1 つのクラスに結合するのが最も簡単な解決策です。
競合を避けるために、これはコード生成によって行われ、結果は後で変更される可能性がありますが、これを手で入力するのは本当に面倒です。