4

実装する実装も考慮に入れてIList実装する理由がわかりません。IEnumerableIListICollectionIEnumerable

4

3 に答える 3

11

ICollection最初のものが2番目のものを意味するのに、なぜそれが実装することを宣言するのか知りたいと思いますIEnumerableICollection主な理由は明快さだと思います。それは、それがすでに拡張されていることを確認するために人々が振り返る必要がないことを意味しますIEnumerable

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

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

于 2009-01-12T07:20:34.940 に答える
8

IListIEnumerableassociatonによってのみ実装されます。つまり、を継承するためIEnumerable、正確に実装されます。タイプ階層でも同じことが得られます(ただし、単一の継承のみ:ICollectionIEnumerable

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
{
}
于 2009-01-12T07:15:16.197 に答える
1

コードを ReSharper で開いた場合、ですでに指定されているため、 IEnumerableon のインターフェイス宣言IListが不要であることを示しますICollection

于 2009-01-12T08:36:59.857 に答える