2012-02-17 113 views
2

我知道完全相同的問題出現在這裏StackOverflow,但它不完全回答我的查詢。集合<T>:它爲什麼既實現IEnumerable又實現IEnumerable <T>?

如果ICollection<T>工具IEnumerable<T>,它擴展IEnumerable,爲什麼從微軟程序員添加IEnumerable作爲該ICollection<T>實現的接口?

難道這不就是(語義和執行方面的明智),就像簡單地寫ICollection<T> : IEnumerable<T>一樣嗎?

回答

5

它說它實現IEnumerable,因爲它實現IEnumerable

IEnumerable<T>繼承IEnumerable,但它顯然可以提供沒有實現。實施IEnumerable<T>的類別還必須實施IEnumerable,無論它們是否明確表明它們這樣做。

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

無論哪種情況,都需要實現兩個接口的成員。第二個類的定義對於那些查看類和/或文檔的人來說很明顯,這是一件好事。一個沒有經驗或不知情的讀者可能不知道IEnumerable<T>帶來IEnumerable隨着它。他們可能可能不知道在期望IEnumerable的地方可以使用實現IEnumerable<T>的類。這只是向讀者提供更多信息,平均而言,這隻能是一件好事。

+2

而像IlDasm和Reflector這樣的工具傾向於顯示第二更長的形式。不管它是如何寫的。 – 2012-02-17 18:55:46

+0

好的,所以它是爲了可讀性而不是提供任何語義/編程差異,是否正確? – Bober02 2012-02-17 19:18:35

+0

非常。它是可選的* list *附加的接口。無論哪種方式都需要實現。 – 2012-02-17 19:34:38

相關問題