IList,ICollection,IEnumerable,IEnumerator,IQueryable

IList 是 ICollection 接口的子代,而且是全部非泛型列表的基接口。IList 實現有三種類別:只讀、固定大小和可變大小。沒法修改只讀 IList。固定大小的 IList 不容許添加或移除元素,但容許修改現有元素。可變大小的 IList 容許添加、移除和修改元素。安全

ICollection 接口是 System.Collections 命名空間中類的基接口。ICollection 接口擴展 IEnumerable;IDictionary 和 IList 則是擴展 ICollection 的更爲專用的接口。 IDictionary 實現是鍵/值對的集合,如 Hashtable 類。 IList 實現是值的集合,其成員可經過索引訪問,如 ArrayList 類。  某些集合(如 Queue 類和 Stack 類)限制對其元素的訪問,它們直接實現 ICollection 接口。  若是 IDictionary 接口和 IList 接口都不能知足所需集合的要求,則從 ICollection 接口派生新集合類以提升靈活性。定義全部非泛型集合的大小、枚舉器和同步方法。網站

IQueryable 提供對未指定數據類型的特定數據源的查詢進行計算的功能,IQueryable 接口由查詢提供程序實現。 該接口只能由同時實現 IQueryable(Of T) 的提供程序實現。 若是該提供程序不實現 IQueryable(Of T),則沒法對提供程序數據源使用標準查詢運算符。 IQueryable 接口繼承 IEnumerable 接口,以便在前者表示一個查詢時能夠枚舉該查詢的結果。 枚舉強制執行與 IQueryable 對象關聯的表達式樹。 「執行表達式樹」的定義是查詢提供程序所特有的。 例如,它可能涉及將表達式樹轉換爲適用於基礎數據源的查詢語言。 在調用 Execute 方法時將執行不返回可枚舉結果的查詢。ui

IEnumerable 公開枚舉數,該枚舉數支持在非泛型集合上進行簡單迭代。線程

IEnumerator 是全部非泛型枚舉數的基接口。有關此接口的泛形版本,請參見 IEnumerator(Of T)。C# 語言的 foreach 語句(在 Visual Basic 中爲 for each)隱藏了枚舉數的複雜性。 所以,建議使用 foreach,而不直接操做枚舉數。枚舉數可用於讀取集合中的數據,但不能用於修改基礎集合。最初,枚舉數定位在集合中第一個元素前。 Reset 方法還會將枚舉數返回到此位置。 在此位置,調用 Current 屬性會引起異常。 所以,在讀取 Current 的值以前,必須調用 MoveNext 方法將枚舉數提早到集合的第一個元素。在調用 MoveNext 或 Reset 以前,Current 返回同一對象。 MoveNext 將 Current 設置爲下一個元素。若是 MoveNext 越過集合的末尾,枚舉數就會被放置在此集合中最後一個元素的後面,且 MoveNext 返回 false。 當枚舉數位於此位置時,對 MoveNext的後續調用也返回 false。 若是最後一次調用 MoveNext 返回 false,則調用 Current 會引起異常。 若要再次將 Current 設置爲集合的第一個元素,能夠調用 Reset,而後再調用 MoveNext。只要集合保持不變,枚舉數就保持有效。 若是對集合進行了更改(如添加、修改或刪除元素),則枚舉數將失效且不可恢復,而且下一次對 MoveNext或 Reset 的調用將引起 InvalidOperationException。 若是在 MoveNext 和 Current 之間修改集合,那麼即便枚舉數已經無效,Current 也將返回它所設置成的元素。枚舉數沒有對集合的獨佔訪問權;所以,從頭至尾對一個集合進行枚舉在本質上不是一個線程安全的過程。 即便一個集合已進行同步,其餘線程仍能夠修改該集合,這將致使枚舉數引起異常。 若要在枚舉過程當中保證線程安全,能夠在整個枚舉過程當中鎖定集合,或者捕捉因爲其餘線程進行的更改而引起的異常。對象

下面的代碼示例演示如何實現自定義集合的 IEnumerable 和 IEnumerator 接口。 在此示例中,沒有顯式調用這些接口的成員,但實現了它們,以便支持使用 foreach(在 Visual Basic 中爲 for each)循環訪問該集合。繼承

有事沒事點我一些啊?!!
網站開發_網站製做_網站維護_網店製做_網店安裝_商城製做_手機軟件_企業網站_辦公軟件_QQ:471226865QQ:471226865索引

相關文章
相關標籤/搜索