成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

C# Iterator迭代器模式

開發 后端
本文介紹C# Iterator迭代器模式應該經常用到,不直接使用也會間接使用到,我們使用foreach語句來循環就是在間接的使用C# Iterator迭代器模式。

C# Iterator迭代器模式我們在平時的開發中應該經常用到。不直接使用也會間接使用,我們使用foreach語句來循環就是在間接的使用C# Iterator迭代器模式。

迭代器就像指針一樣可以向前向后移動,在.NET中迭代器只能向后移動。

動機:在軟件的構建過程中,集合對象內部結構常常變化各異。但對于這些集合對象,我們希望在不暴露其內部結構的同時,可以讓外部客戶代碼透明地訪問其中包含的元素;同時這種“透明遍歷”也為“同一種算法在多種集合對象上進行操作”提供了可能。使用面向對象技術將這種遍歷機制抽象為“迭代器對象”為“應對變化中的集合對象”提供了一種優雅的方式。

意圖:提供一種方法順序訪問一個集合對象中的各個元素,而不暴露該對象的內部表示。

  1. public interface IEnumerable{  
  2. //得到迭代器  
  3. IEnumerator GetEnumerator();  
  4. }  
  5. /// <summary> 
  6. /// 迭代器接口  
  7. /// summary> 
  8. public interface IEnumerator{  
  9. //得到當前的對象  
  10. object Current{  
  11. get;  
  12. }  
  13. bool MoveNext();  
  14. void Reset();  
  15. }  
  16. /// <summary> 
  17. /// 集合類型,實現了可迭代接口  
  18. /// summary> 
  19. public class MyCollection : IEnumerable{  
  20. internal int[] items;  
  21. public MyCollection(){  
  22. items = new int[5] {1, 2, 3, 4, 5};  
  23. }  
  24. #region IEnumerable 成員  
  25. //實現迭代接口,返回迭代器  
  26. public IEnumerator GetEnumerator(){  
  27. //在這里進行解藕,將集合對象轉換為迭代器  
  28. return new MyEnumerator(this);  
  29. }  
  30. #endregion  
  31. }  
  32. //迭代器對象,實現了迭代器接口  
  33. internal class MyEnumerator : IEnumerator{  
  34. private int nIndex;  
  35. MyCollection collection;   
  36. //構造函數將集合類型轉換成內部成員  
  37. public MyEnumerator(MyCollection coll){  
  38. this.collection = coll;  
  39. nIndex = -1;  
  40. }  
  41. #region IEnumerator 成員  
  42. //返回當前迭代到的對象  
  43. public object Current{  
  44. get{  
  45. return collection.items[nIndex];  
  46. }  
  47. }  
  48. //移動到下一個對象,指針向后移動  
  49. public bool MoveNext(){  
  50. nIndex++;  
  51. return (nIndex < collection.items.GetLength(0));  
  52. }  
  53. //重設迭代器,指針回零  
  54. public void Reset(){  
  55. nIndex = -1;  
  56. }  
  57. #endregion  
  58. }  

很清楚,在上面的代碼中,我們通過GetEnumerator方法,將集合對象轉換為了可迭代對象,這實際上是在對集合對象進行抽象,將他轉換為迭代器。在這里,我們需要定義一個迭代器類,但是這是.NET 1.1中的做法,在.NET 2.0以后實現一個可迭代模式更加簡單。

  1. /// <summary> 
  2. /// 集合類型,實現了可迭代接口  
  3. /// summary> 
  4. public class MyCollection : IEnumerable<int> 
  5. {  
  6. internal int[] items;  
  7.  
  8. public MyCollection()  
  9. {  
  10. items = new int[5] {1, 2, 3, 4, 5};  
  11. }  
  12.  
  13. #region IEnumerable<int> 成員  
  14.  
  15. public IEnumerator<int> GetEnumerator()  
  16. {  
  17. for(int i = 0; i < items.Length; i++)  
  18. {  
  19. yield return items[i];  
  20. }  
  21. }  
  22. #endregion  
  23.  
  24. #region IEnumerable 成員  
  25.  
  26. System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()  
  27. {  
  28. for(int i = 0; i < items.Length; i++)  
  29. {  
  30. yield return items[i];  
  31. }  
  32. }  
  33.  
  34. #endregion  

我們通過yield return關鍵字來返回一個IEnumerator接口,這個關鍵在在編譯之后會自動生成對應的迭代器的代碼。

在.NET中迭代器只能先前,在c++中可以向后等其他操作。

注意:在迭代的過程中,我們不能向集合添加內容,后移除集合里的item,這樣將會導致一些問題的出現。以上介紹C# Iterator迭代器模式。

【編輯推薦】

  1. C#數據庫查詢和操作大全
  2. 淺析C#擴展方法
  3. C# Singleton的使用及優缺點探討
  4. 詳細分析C#數據庫連接池
  5. C#數據庫備份及還原的實現代碼
責任編輯:佚名 來源: IT168
相關推薦

2009-08-26 16:26:37

C#迭代器模式

2009-08-19 15:18:53

迭代器

2009-08-26 16:37:07

C#迭代器局部變量

2022-10-26 08:25:06

Python編程迭代器

2021-07-07 05:07:15

JDKIterator迭代器

2013-03-15 10:37:08

C#

2021-06-22 15:27:13

設計模式迭代器模式Java

2010-04-29 08:53:11

PHP迭代器模式

2020-11-06 09:01:46

迭代器模式

2009-08-26 10:24:04

C# Observer

2009-08-31 16:12:02

C#使用Singlet

2023-11-07 10:10:36

設計模式元素

2009-08-25 18:04:30

C#實現Singlet

2009-08-31 15:48:02

C# Singleto

2009-09-02 16:23:27

C# Singleto

2009-08-04 09:22:26

C#工廠模式

2009-09-07 04:56:52

C#模式窗體

2009-08-31 16:01:31

C#和設計模式

2009-08-20 17:30:56

C#異步編程模式

2009-08-07 14:34:33

C#模式字符串
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 一区二区欧美在线 | 国产在线精品一区二区三区 | 91视频免费视频 | 超碰在线97国产 | 韩日在线观看视频 | 欧美性极品xxxx做受 | 国产在线观看不卡一区二区三区 | 性一爱一乱一交一视频 | 日本精品一区二区三区四区 | 国产又爽又黄的视频 | 久久久tv | 亚洲精品视频在线观看免费 | 久久亚洲春色中文字幕久久久 | 九九看片| 你懂的av| 波多野结衣精品在线 | 亚洲天堂av在线 | 日韩午夜| 日本不卡一区 | 欧美精品成人一区二区三区四区 | 狠狠色网 | 久久大香| 亚洲精品99 | 日本一区二区高清视频 | 二区在线视频 | 黄色一级大片在线免费看产 | 欧美日韩高清 | 福利精品在线观看 | 国产午夜精品久久久久免费视高清 | 欧美精品久久久久久久久久 | 久久精品在线 | 伊人精品一区二区三区 | 成人免费淫片aa视频免费 | 成人欧美一区二区三区在线播放 | 久久久免费精品 | 亚洲精品一区在线 | 午夜视频在线播放 | 成人激情视频在线 | 国产婷婷精品 | 999精品网| 亚洲精品欧美一区二区三区 |