はい、私はこの質問をされました。私が提供できるのは、私が知っている次の情報の要約だけでした。もちろん、いわゆる期待されるコードを書くときにエラーが発生する以外に、 1を書くことができればいいのに、C# が複数の継承をサポートしていないことを証明する正当な理由が他にあるでしょうか?
C# の MI のコンテキストで SO および Web 外で多くの質問が寄せられました。C# と Java (Java はインターフェイスを使用して MI を実装します) を比較し、C# で MIをシミュレート/エミュレートする方法、C# で MI の欠如に対処する方法、何をMIなどの問題です。したがって、私の質問はそれらの質問に対する重複を反映している可能性があります...しかし、まだ答えが見つからないため、射撃を考えました。
あるブログで、著者がいくつかの重要な点について話しているのを見ました。
- 言語間で MI の実装が異なるため、言語に依存しない実装を作成することが困難になります。
- 代わりにインターフェイスを使用できるため、MI は少し冗長になります。
- MI は、キャスティング、リフレクションなどに関して複雑さを追加します。
著者は、実装の多重継承がC# で許可されていないものであることを示しています。 だから、二重ダイヤモンド相続問題/死の致命的なダイヤモンドにつながるのを止めるために.. 著者が指摘したように、「私は母と父の両方から多くのものを受け継いでいる」..
したがって、クラスが複数のスーパー/ベース/親クラスから継承する方が理にかなっています。たとえば、Class House は Class Building (名詞、建物{家、学校、オフィス、ホテルなど} の詳細を表す) と Class Construction (建物の建設の詳細を表す) を継承します。できれば素晴らしいのですが、
1. code wish we could write
public class House: Building, Construction {
// methods, properties...
}
代わりに、それを書く必要がありinterFACE
ます..
interface Buildstruction
{
methodConstruction();
}
//class Construction then has to implement the interface
public class House: Building, Buildstruction
{
Construction ConstionObject;
methodBuilding();
methodConstruction() { ConstionObject.methodConstruction(); }
}
複数のスーパークラスが同じ名前のメソッド (メソッドなど) を持つことを許可しない方が簡単calculate
ではないでしょうか? 次に、それらの親/スーパークラスには、別のクラスから独立した独自のプロパティとメソッドを自由に作成する必要があることに気付きました..
したがって、MIは C# ではミッション不可能のように見えます...そして、それがなぜそうであるかを決定した理由は何ですか..それは単に、
- ダイヤモンドの問題?
- そして、プログラミングにおける MI の実際の使用法を本当に指摘した人はまだ誰もいないのでしょうか?
また、どのように、
casting
MI は、 、reflection
?に関して複雑さを追加します。- インターフェイスは MI を少し冗長にしますか?
- MI は、コード (完全な OOP をサポート) が言語に依存しないという問題を引き起こしますか?
「それはC#言語が作成される方法です...」以上のコメント/回答を高く評価してください:)