多重継承のメリットとデメリットは?
C# で多重継承を使用しないのはなぜですか?
更新 OKなので、どの親メソッドが呼び出されているかなどの衝突を解決する問題のため、現在は回避されています。確かに、これはプログラマーが解決する問題です。または、これは競合がある SQL と同様に解決される可能性があります。つまり、クエリの競合を解決するには、ID を Sales.ID にする必要がある場合があります。
多重継承のメリットとデメリットは?
C# で多重継承を使用しないのはなぜですか?
更新 OKなので、どの親メソッドが呼び出されているかなどの衝突を解決する問題のため、現在は回避されています。確かに、これはプログラマーが解決する問題です。または、これは競合がある SQL と同様に解決される可能性があります。つまり、クエリの競合を解決するには、ID を Sales.ID にする必要がある場合があります。
以下は、多重継承の落とし穴に関する良い議論です。
多重継承を許可しないことにした理由について、C# チームからのディスカッションを次に示します。
ここで、私がREALbasic に変換した C++ レポート ライターに基づいてプロを紹介します(これにはインターフェイスがありますが、単一継承しかありません)。
多重継承により、機能を実装し、状態を記憶するプロパティを持つ小さな mixin ベース クラスからクラスを簡単に作成できます。適切に行えば、インターフェイスを実装するために同様のコードをコピー アンド ペーストする必要なく、小さなコードを何度も再利用できます。
幸いなことに、REALbasic には、最近 C# 3.0 で C# に追加された拡張メソッドのようなextendsメソッドがあります。これらは、特に配列に適用できるため、問題を少し解決します。以前は多重継承されていたクラスを折りたたんだ結果、一部のクラス階層がさらに深くなってしまいました。
It's just another tool in the toolbox. Sometimes, it is exactly the right tool. If it is, having to find a workaround because the language actually prohibits it is a pain and leads to good opportunities to screw it up.
Pros and cons can only be found for a concrete case. I guess that it's quite rare to actually fit a problem, but who are the language designers to decide how I am to tackle a specific problem?
主な欠点は、2 つのクラスが同じ名前のメソッドを持っている場合、新しいサブクラスはどちらを呼び出すべきかわからないことです。
C# では、子オブジェクト内に各親オブジェクトのインスタンスを含めることにより、多重継承の形式を実行できます。
class MyClass
{
private class1 : Class1;
private class2: Class2;
public MyClass
{
class1 = new Class1;
class2 = new Class2;
}
// Then, expose whatever functionality you need to from there.
}
何かを継承する場合、クラスがその (基本) 型であると断言している場合は、少し異なる方法で実装したり、何かを追加したりすることはできますが、クラスが一度に 2 つになることは実際には非常にまれです。通常、それは 2 つ以上のものに共通の動作を持っているだけであり、それを説明するより良い方法は、クラスに複数のインターフェイスを実装させることです。(状況によっては、カプセル化の可能性もあります)
これは、Java の場合とよく似た、自分を撃たないための助けとなる癖の 1 つです。
複数のソースからフィールドとメソッドを拡張するのは良いことですが (MP3 プレーヤー、カメラ、ナビ、および控えめなオールドスクール携帯電話から継承する最新の携帯電話を想像してください)、衝突はコンパイラだけでは解決できません。