インターフェイスは、データ メンバーを持たず、public abstract
メソッドのみを定義する単純な基本クラスです。たとえば、これは C++ のインターフェイスになります。
class IFrobbable {
public:
virtual void Frob() = 0;
}
したがって、MI が言語機能として利用できる場合は、インターフェイスを単に派生させるだけでインターフェイスを「実装」できます (ここでも C++)。
class Widget : public IFrobbable, public IBrappable {
// ...
}
一般的なケースでの多重継承は、多くの疑問や問題を引き起こします。これらの疑問や問題は、必ずしも 1 つの答えを持っているわけではありません。また、「良い」という特定の定義に適した答えを持っているとは限りません (恐ろしいひし形、誰か?)。インターフェイスを「継承」するという概念は、本格的なクラスを継承する非常に制約のある特殊なケースであるため、複数のインターフェイスの実装はこれらの問題のほとんどを回避します。
そして、ここで「インターフェースの概念を追加することを余儀なくされました」の出番です。たとえば、コードの再利用が実際には 1 つである場合、コードを再利用できないという深刻な問題があります。オブジェクト指向の最も一般的な引数の。さらに何かをしなければなりません。次のステップは多重継承を追加することですが、インターフェースの制約を満たすクラスに対してのみです。
だから、私はクシシュトフの引用を次のように解釈します
一般に、多重継承は非常に厄介な問題であり、.NET の開発における実際の制約を考えると、満足のいく方法で取り組むことができませんでした。ただし、インターフェイスの継承は、取り組むのがはるかに簡単であり、OOP で非常に重要であるため、それを組み込みました。もちろん、インターフェイスには、主に BCL の構造に関する一連の問題があります。