実装する実装も考慮に入れてIList
実装する理由がわかりません。IEnumerable
IList
ICollection
IEnumerable
3 に答える
ICollection
最初のものが2番目のものを意味するのに、なぜそれが実装することを宣言するのか知りたいと思いますIEnumerable
。ICollection
主な理由は明快さだと思います。それは、それがすでに拡張されていることを確認するために人々が振り返る必要がないことを意味しますIEnumerable
。
以前に基本クラスに明示的に実装されていたインターフェイスメソッドを再実装したい場合は、インターフェイスの実装を再宣言する必要がある場合もありますが、この場合はそれが理由ではないと思います。
編集:私は、ドキュメントの作成元のソースコードに両方のインターフェイスを含む宣言があると想定してきました。別の可能な代替手段は、階層内のすべてのインターフェースがドキュメントジェネレーターによって自動的に引き込まれることです。その場合、質問は「なぜドキュメントジェネレータがそれを行うのか」になります-そして答えはほぼ確実に「明快さ」です。
IList
IEnumerable
associatonによってのみ実装されます。つまり、を継承するためIEnumerable
、正確に実装されます。タイプ階層でも同じことが得られます(ただし、単一の継承のみ:ICollection
IEnumerable
class Enumerable {}
class Collection : Enumerable {}
class List : Collection {}
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 で開いた場合、ですでに指定されているため、 IEnumerable
on のインターフェイス宣言IList
が不要であることを示しますICollection
。