web-dev-qa-db-ja.com

抽象クラスが継承されたインターフェースのすべての機能を定義することを強制されるのはなぜですか?

なぜc#コンパイラはabstractclassdefineを強制するのですかimplementとは対照的に)継承されたinterface?継承されたinterfaceの実装されていないメソッドをそれ自体でabstractとしてマークしないのはなぜですか?

言語の設計者は、メソッドをabstractvirtualまたは非仮想にするかどうかを選択する際に、抽象クラスのプログラマーがより慎重になることを望んでいたためですか?それとももっと大きなものはありますか?

4
Kapoor

C#抽象クラスが継承されたインターフェイスメソッドを実装/宣言する必要がある理由

抽象クラスはインスタンス化できませんが、canには実装の詳細があります。 C#の設計者は、ユーザーに機能の実装を強制するか、またはインターフェイスから継承された機能がこのレベルでは実装されないことを明確に述べることを選択しました。これは、コンパイラからの「このメソッドを省略したことを教えてください」という種類のチェックです。

C#alwaysでは、すべてのインターフェイスメソッドを実装する必要があります。しかし、完全な実装を提供することを要求するのではなく、代わりに インターフェースメソッドを抽象メソッドにマップすることを許可する によって抽象クラスに対するこの制限を緩和します。

8
Robert Harvey

クラスの祖先の異なるレベルで同じメソッド名を定義することが可能であり、これらが異なる実装を持つことができるという点で、それにはもう少しあります。

この抽象クラスはこのインターフェースを実装しているので、コンパイラーはこのメソッドのこのクラス実装を知る必要があります。

あなたの例ではそれが抽象的であることを暗示できることを感謝しますが、もしあなたのクラスがこのメソッドをすでに実装している基本クラスを持っていたらどうでしょうか。

2
Michael Shaw