2012-02-17 20 views
2

私はまったく同じ質問がここに表示されることを知っていますStackOverflow、それにもかかわらず、かなり私のクエリに答えることはありません。コレクション<T>:なぜIEnumerableとIEnumerableの両方を実装していますか<T>?

ICollection<T>IEnumerableを拡張IEnumerable<T>を実装している場合、なぜマイクロソフトからプログラマはそのICollection<T>実装インタフェースとしてIEnumerableを追加しましたか?

は、それは正確に(意味的および実装賢明な)単にICollection<T> : IEnumerable<T>を書くことと同じではありませんか?

答えて

5

IEnumerableIEnumerableを実装しているためです。

IEnumerable<T>は、IEnumerableを継承するが、明らかに実装を提供することはできない。また彼らは、彼らがそうすることを明示的に状態かどうか、IEnumerableを実装する必要がありIEnumerable<T>を実装するクラス。

class Foo : IEnumerable<T> 
class Foo : IEnumerable<T>, IEnumerable 

どちらの場合も、両方のインターフェイスのメンバーを実装します。 2番目のクラスの定義は、クラスやドキュメントを見ている人にとっては明らかです。これは良いことです。経験の浅いあるいは無知な読者はIEnumerable<T>はそれと一緒にIEnumerableをもたらすことを知っていない可能性があります。彼らはIEnumerableが期待されるところでIEnumerable<T>を実装するクラスが使用できることを知らないかもしれません。これは単に読者にもう少し多くの情報を提供しますが、これは平均的には良いことです。

+2

とILDASMやリフレクターなどのツール第二長いフォームを表示する傾向があります。それが書かれた方法にかかわらず。 –

+0

OK、それはセマンティック/プログラミングの違いを提供するのではなく、読みやすくするためのものです。 – Bober02

+0

かなり。追加されたインタフェースをリスト表示することはオプションです。その実装はいずれかの方法で必要とされる。 Bober02 @ –

関連する問題