質問

IList IEnumerable を実装する理由がわかりません。 IList ICollection を実装する ICollection code> IEnumerable も。

役に立ちましたか?

解決

最初のコードが2番目のコードを意味する場合、 ICollection IEnumerable を実装することを宣言する理由を知りたいと思います。主な理由は明快さだと思われます。つまり、人々が IEnumerable を既に拡張していることを確認するために ICollection を振り返る必要がないということです。

以前にベースクラスで明示的に実装されていたインターフェイスメソッドを再実装する場合は、インターフェイス実装を再宣言する必要がある場合もありますが、この場合の理由はないと思います。

編集:ドキュメントの作成元のソースコードには、両方のインターフェイスを含む宣言があると想定していました。別の可能な代替方法は、階層内の all インターフェースがdocジェネレーターによって自動的にプルされることです。その場合、質問は「なぜドキュメントジェネレーターがそれを行うのか」になります。 -そして、答えはほぼ間違いなく「明瞭」です。

他のヒント

IList は、関連付けによって IEnumerable のみを実装します。つまり、 IEnumerable を正確に実装するため、 IEnumerable である ICollection を継承します。型階層でも同様になります(ただし、単一継承のみ:

class Enumerable {}
class Collection : Enumerable {}
class List : Collection {}

so List Enumerable です;同様に、 IList IEnumerable です。

たとえば、次のように書いた場合:

interface IA {}
interface IB : IA { }
interface IC : IB { }

メタデータを見ると、 IC:IA、IB のように見えますが、これは間接的なものです。 ILは次のとおりです。

.class private interface abstract auto ansi IA
{
}
.class private interface abstract auto ansi IB
    implements IA
{
}
.class private interface abstract auto ansi IC
    implements IB, IA
{
}

ReSharperでコードを開く場合、 IList での IEnumerable インターフェイス宣言は、で既に指定されているため、必要ありませんでした。 > ICollection

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top