2

これは議論する必要があります。さもなければ、私は非常に愚かです。C# に MI がない理由については、同様のスレッドがたくさんあります。しかし、C# がまだ暗黙的にサポートしていないかどうか知りたいです。

.NET のすべての型はから派生するSystem.Objectため、クラスを次のように記述できます。

Person : object { }

今私が持っている場合

Employee : Person { }

ホントじゃないですか

Employee : object, Person { }

1)クラスはEmployeeすでに 2 つのクラスを継承していませんか?

多重継承のすべての問題がここにも存在しますよね? 私がこれを持っているとしましょう:

Person : object
{
    new public Type GetType()
    {
        return null;
    } 
}

Employee : object, Person 
{ 

}

2)今、私が電話をかけたら、それとも電話Employee.GetType()するべきですPerson.GetType()object.GetType()?混乱は正しく存在します。MIの場合、 C#はすでに多くの言語objectでクラスに何らかの継承の優先順位を魔法のように与えているのではないでしょうか?

4

2 に答える 2

11

あなたは継承を誤解しています。

Employee継承Personのみ
Personを継承しObjectます。

Employeeを介してObject 間接的に継承しPersonます。は と の間にある
ため、MI の問題はありません。PersonEmployeeObject

于 2013-02-05T22:54:57.517 に答える
2

多重継承について議論する場合、通常は 2 つの親クラスから直接継承することを意味します。

インスタンス メソッド呼び出しの通常の解決策は、継承階層を上に移動し、メソッドの最初の定義で停止することです。

2 つの親クラスから直接継承できることで、Diamond Problemが発生します。これが、多くの人が多重継承を良くないと考える主な理由です。複数の親があると、インターフェイスの一部として上位から必要なものが、2 つの親クラスで異なる方法でオーバーライドされる可能性があり、どちらを使用するかについて明確な選択肢はありません。

異なる言語では異なる方法でこれを処理します。実際、C# と Java はどちらも単純に多重継承を許可しないことで処理します。

于 2013-02-05T23:01:29.733 に答える