2009-04-19 20 views
2

複数の継承を持つ賛否両論は何ですか?多重継承の長所と短所は何ですか?

およびなぜC#で複数の継承を持たないのですか?

UPDATE [OK]を、それが現在の親メソッドが呼び出されている解決の衝突などであるため、問題の回避されるように、確かにこれは、プログラマが解決するための問題です。または、これは矛盾がある場合にSQLと同様に解決することができ、より多くの情報が必要です。つまり、クエリで競合を解決するためにIDがSales.IDになる必要があります。ここで

+0

http://stackoverflow.com/questions/225929/what-is-the-exact-problem-with-multiple-inheritance - よく似た質問のようです。 –

答えて

1

主な問題は、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

私は(インタフェースだけ単一継承を有する)converting to REALbasicしてきたC++レポートライタに基づいて、ここでプロを与えるだろう。

複数の継承を使用すると、機能を実装し、状態を記憶するプロパティを持つ小さなmixin基本クラスのクラスを簡単に作成できます。正しいことができたら、インタフェースを実装するために同様のコードをコピー&ペーストすることなく、小さなコードを再利用することができます。

幸いにも、REALbasicは最近C#3.0のC#に加え拡張メソッドのようなもの方法を拡張しています。これらは、特に配列に適用できるので、問題を少し助けます。以前は多重継承クラスであったものを折りたたんだ結果、クラス階層が深くなってしまった。

0

あなたは少し異なる何かを実装するかあなたのクラスであることをその実際に非常にまれ、それに何かを追加することができていることを除いてすべての道を入力し、あなたのクラスは、その(ベース)であることを主張している何かを継承すぐに2つのこと。通常は2つ以上のものに共通の振る舞いを持っているだけであり、一般的にクラスに複数のインターフェースを実装させることがより良い方法です。 (状況に応じて、おそらくカプセル化)

0

これは、Javaの場合と同じように、私の手助けをしてくれます。

複数のソース(MP3プレーヤー、カメラ、Sat-Nav、および控えめなオールドスクール携帯電話を継承する現代の携帯電話を想像してください)からフィールドとメソッドを拡張するのはいいですが、衝突は解決できませんコンパイラだけ。

3

これはツールボックス内の別のツールです。場合によっては、それはまさに正しいツールです。そうであれば、言語が実際にそれを禁止するために回避策を見つけなければならないことは痛みであり、それを台無しにする良い機会につながります。

賛否両論は、具体的なケースでしか見つかりません。私は実際に問題に合うのはまれだと思いますが、特定の問題にどのように取り組むべきかを言語設計者が決定するのは誰ですか?

+0

C#ではまだツールボックスではありません! :) –

+0

+1しかし、私の理解から、それはまれなケースでは唯一の正しい選択です。 – hasen

+0

「典型的な教科書の例」と同じように、家の猫は哺乳類とペットの両方です。これを構図として表現するのは、最高の状態では厄介です。ペットではない哺乳類や哺乳動物ではないペットがいます。ペットとして、猫は所有者、忠誠心、税番号を持つことができます。哺乳動物としては、餌の状態、全体の長さ、尾の長さ、毛の色を持つことができます。 – Svante

関連する問題