久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

闡述集合類的接口(IEnumerable,IEnumerator,ICollection,...

 昵稱11848184 2013-04-08

IEnumerable

公開枚舉數(shù),,該枚舉數(shù)支持在非泛型集合上進行簡單迭代,。

該接口只定義了一個函數(shù):GetEnumerator,通過該函數(shù)返回一個循環(huán)訪問集合的枚舉數(shù),。

若要支持foreach語義則須實現(xiàn)此接口,。

IEnumerator

是所有非泛型枚舉數(shù)的基接口。

該接口的成員:

  1. Current:獲取集合中的當前元素,。
  2. MoveNext:將枚舉數(shù)推進到集合的下一個元素,。
  3. 將枚舉數(shù)設置為其初始位置,該位置位于集合中第一個元素之前,。

關于枚舉數(shù):

1. 最初,,枚舉數(shù)定位在集合中第一個元素前。Reset 方法還會將枚舉數(shù)返回到此位置,。在此位置,,調(diào)用 Current 屬性會引發(fā)異常。因此,,在讀取 Current 的值之前,,必須調(diào)用 MoveNext 方法將枚舉數(shù)向前移動到集合的第一個元素。

2. 如果 MoveNext 越過集合的結尾,,則枚舉數(shù)將被定位在此集合中最后一個元素的后面,,且 MoveNext 返回 false,。當枚舉數(shù)位于此位置時,對 MoveNext 的后續(xù)調(diào)用也返回 false,。如果最后一次調(diào)用 MoveNext 返回 false,,則調(diào)用 Current 會引發(fā)異常。若要再次將 Current 設置為集合的第一個元素,,可以調(diào)用 Reset,,然后再調(diào)用 MoveNext。

3. 只要集合保持不變,,枚舉數(shù)就保持有效,。如果對集合進行了更改(如添加、修改或刪除元素),,則枚舉數(shù)將失效且不可恢復,,并且下一次對 MoveNext 或 Reset 的調(diào)用將引發(fā) InvalidOperationException。如果在 MoveNext 和 Current 之間修改集合,,那么即使枚舉數(shù)已經(jīng)無效,,Current 也將返回它所設置成的元素。

4. 枚舉數(shù)沒有對集合的獨占訪問權,;因此,,枚舉通過集合在本質上不是一個線程安全的過程。即使一個集合已進行同步,,其他線程仍可以修改該集合,,這將導致枚舉數(shù)引發(fā)異常。若要在枚舉過程中保證線程安全,,可以在整個枚舉過程中鎖定集合,,或者捕捉由于其他線程進行的更改而引發(fā)的異常。

C# 語言的 foreach 語句隱藏了枚舉數(shù)的復雜性,。因此,,建議使用 foreach,而不直接操作枚舉數(shù),。

 

ICollection 接口是 System.Collections 命名空間中類的基接口,。

[ComVisibleAttribute(true)]

public interface ICollection : IEnumerable

       ICollection 接口擴展 IEnumerable;

       IDictionary 和 IList 則是擴展 ICollection 的更為專用的接口,。IDictionary 實現(xiàn)是鍵/值對的集合,,如 Hashtable 類。IList 實現(xiàn)是值的集合,,其成員可通過索引訪問,,如 ArrayList 類。

       某些集合(如 Queue 類和 Stack 類)限制對其元素的訪問,它們直接實現(xiàn) ICollection 接口,。

ICollection 泛型接口是 System.Collections.Generic 命名空間中類的基接口,。

public interface ICollection<T> : IEnumerable<T>, IEnumerable

ICollection 接口擴展 IEnumerable;

IDictionary 和 IList 是擴展 ICollection 的更專用接口,。IDictionary 實現(xiàn)是鍵/值對的集合,,如 Dictionary 類。IList 實現(xiàn)是值的集合,,并且可以按索引訪問它的成員,,如 List 類。

從上面可以看出Hashtable是非泛型類而Dictionary為泛型類,,正如ArrayList和List類的關系

IList 是 ICollection 接口的子代,并且是所有非泛型列表的基接口,。

IList 實現(xiàn)有三種類別:只讀,、固定大小和可變大小。無法修改只讀 IList,。固定大小的 IList 不允許添加或移除元素,,但允許修改現(xiàn)有元素??勺兇笮〉?IList 允許添加,、移除和修改元素。

IDictionary 接口是鍵/值對的非通用集合的基接口,。

       每個元素都是一個存儲在 DictionaryEntry 對象中的鍵/值對,。

每一對都必須有唯一的鍵。實現(xiàn)在是否允許鍵為空引用方面有所不同,。此值可以為空引用,,并且不必是唯一的。IDictionary 接口允許對所包含的鍵和值進行枚舉,,但這并不意味著任何特定的排序順序,。

IDictionary 實現(xiàn)有三種類別:只讀、固定大小,、可變大小,。無法修改只讀 IDictionary 對象。固定大小的 IDictionary 對象不允許添加或移除元素,,但允許修改現(xiàn)有元素,。可變大小的 IDictionary 對象允許添加,、移除和修改元素,。

C# 語言中的 foreach 語句需要集合中每個元素的類型。由于 IDictionary 對象的每個元素都是一個鍵/值對,因此元素類型既不是鍵的類型,,也不是值的類型,。而是 DictionaryEntry 類型。

 

注意幾個基接口:

       枚舉數(shù)的基接口:IEnumerator,,而IEnumerable則是獲取枚舉數(shù)的方法

類的基接口:ICollection

列表的基接口:IList

鍵/值對的基接口:IDictionary

正因為IEnumerable是獲取枚舉數(shù)的方法,,因此類往往是實現(xiàn)IEnumerable接口而不是直接實現(xiàn)IEnumerator接口。

泛型部分與非泛型相比,,如上面對比的ICollection泛型和非泛型所顯現(xiàn)的差別大致相同,,在System.Collections.Generic中,上述的所有集合類中重要的接口都重新實現(xiàn)了一次,。

    本站是提供個人知識管理的網(wǎng)絡存儲空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點,。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導購買等信息,謹防詐騙,。如發(fā)現(xiàn)有害或侵權內(nèi)容,,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多