Interface
インターネット上には、
ステートメントAという2種類のステートメントがあります。
インターフェイスは継承チェーンには含まれません。
他のステートメントB
これら2つは矛盾するステートメントです。
どちらが正しいか教えてください。
Interface
インターネット上には、
ステートメントAという2種類のステートメントがあります。
インターフェイスは継承チェーンには含まれません。
他のステートメントB
これら2つは矛盾するステートメントです。
どちらが正しいか教えてください。
インターフェイスは他のインターフェイスを継承できます。試してみると、機能することがわかります。
どちらも真実です。
ステートメントA:インターフェースは厳密には継承しません。インターフェイスを実装するクラスがあり、次のように言う場合
base.
インターフェイスのメンバーは表示されません。
ステートメントB:「インターフェースは他のインターフェースを実装できる」ので、これは読みやすくなります。実装チェーンを持つことができます。しかし、それらは実際には継承していません。
どちらの記述も正しいです。
2番目のステートメントは正しいです。InterfaceA:InterfaceBは完全に正常であり、InterfaceAを実装するクラスもInterfaceBを継承する必要があります。
「インターフェイスは継承チェーンに含まれない」とは、DerivedClass:BaseClass、InterfaceAの場合、base.BaseClassMethodを使用してDerivedClassからBaseClassメンバーにアクセスできることを意味しますが、インターフェイスはそうではないため、同じ方法でbase.InterfaceAMethodを呼び出すことはできません。継承チェーンの一部。むしろ、それらのメンバーはポリモーフィズムを介してアクセス可能です。
どちらもC#で可能であるため、どちらも当てはまります。しかし、クリーンなコードとプログラムを実装ではなくインターフェイスに書き込むため、次のようになります。
このことを考慮、
interface IFileRepository : IDisposable { ... }
つまり、を実装する人は誰でも、を実装するIFileRepository
必要がありIDisposable
ます。ただし、FileRepositoryを作成することはできます。これにより、リソースを破棄する必要がなくなる可能性があります。または、単体テスト中に、依存関係として使用するが、少なくともテストするメソッドではまったく呼び出さないクラスのFileRepository
スタブを作成する別の例。Dispose()
それでも、実装する必要がありますIDisposable
。
クリーンデザインは、そのような実装を指示するべきではありません。具体的な実装は、何を提供するかを知っている必要があります。
class FileRespository : IFileRepository , IDisposable { ... }
.NETの世界では、インターフェイスは他のインターフェイスを完全に継承できます。実装クラスは、継承するすべてのインターフェイスのすべてのメソッドとプロパティを実装することが期待されます。
名前の矛盾がある場合、実装クラスは明示的なインターフェイス実装を使用する必要があります。