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

C#迭代器模式分析

開發(fā) 后端
這里介紹C#迭代器模式,以前的客戶程序過多的關(guān)注了List內(nèi)部實(shí)現(xiàn)的細(xì)節(jié),所以不能很好的移植。而C#迭代器模式就是為解決這個(gè)問題而生的。

C#迭代器有很多值得學(xué)習(xí)的地方,這里我們主要介紹C#迭代器模式,包括介紹ICollection負(fù)責(zé)數(shù)據(jù)存儲(chǔ)等方面。

提到C#迭代器我們不能不想到C#迭代器模式,那我就以C#迭代器模式作為開場白。

在我們的應(yīng)用程序中常常有這樣一些數(shù)據(jù)結(jié)構(gòu):

它們是一個(gè)數(shù)據(jù)的集合,如果你知道它們內(nèi)部的實(shí)現(xiàn)結(jié)構(gòu)就可以去訪問它們,它們各自的內(nèi)部存儲(chǔ)結(jié)構(gòu)互不相同,各種集合有各自的應(yīng)用場合.說到這里大家可能想出一大堆這樣的集合了:List,Hashtable,ArrayList等等。這些集合各自都有各自的個(gè)性,這就是它們存在的理由。但如果你想遍歷它你必須知道它內(nèi)部的存儲(chǔ)細(xì)節(jié),作為一個(gè)集合元素,把內(nèi)部細(xì)節(jié)暴露出來肯定就不好了,這樣客戶程序就不夠穩(wěn)定了,在你更換集合對(duì)象的時(shí)候,比如List 不能滿足需求的時(shí)候,你換成Hashtable,因?yàn)橐郧暗目蛻舫绦蜻^多的關(guān)注了List內(nèi)部實(shí)現(xiàn)的細(xì)節(jié),所以不能很好的移植。而C#迭代器模式就是為解決這個(gè)問題而生的:

提供一種一致的方式訪問集合對(duì)象中的元素,而無需暴露集合對(duì)象的內(nèi)部表示。

比如現(xiàn)在有這樣一個(gè)需求,遍歷集合內(nèi)的元素,然后輸出,但是并不限定集合是什么類型的集合,也就是未來集合可能發(fā)生改變。

思考:

集合會(huì)發(fā)生改變,這是變化點(diǎn),集合改變了,遍歷方法也改變,我們要保證遍歷的方法穩(wěn)定,那么就要屏蔽掉細(xì)節(jié)。找到了變化點(diǎn)那我們就將其隔離起來(一般使用interface作為隔離手段):假設(shè)所有的集合都繼承自ICollection接口,這個(gè)接口用來隔離具體集合的,將集合屏蔽在接口后面,作為遍歷我們肯定需要這樣一些方法:MoveNext,Current,既然ICollection負(fù)責(zé)數(shù)據(jù)存儲(chǔ),職責(zé)又要單一,那么就新建立一個(gè)接口叫做 Iterator吧,每種具體的集合都有自己相對(duì)應(yīng)的Iterator實(shí)現(xiàn):

  1. public interface ICollection  
  2. {  
  3. int Count { get; }  
  4. ///   
  5. /// 獲取迭代器  
  6. ///   
  7. /// 迭代器  
  8. Iterator GetIterator();  
  9. }  
  10. ///   
  11. /// 迭代器接口  
  12. ///   
  13. public interface Iterator  
  14. {  
  15. bool MoveNext();  
  16.  
  17. object Current { get; }  
  18. }  
  19.  
  20. public class List : ICollection  
  21. {  
  22. private const int MAX = 10;  
  23. private object[] items;  
  24. public List()  
  25. {   
  26. items = new object[MAX];  
  27. }  
  28. public object this[int i]  
  29. {  
  30. get { return items[i]; }  
  31. set { this.items[i] = value; }  
  32. }  
  33. #region ICollection Members  
  34.  
  35. public int Count  
  36. {  
  37. get { return items.Length; }  
  38. }  
  39.  
  40. public Iterator GetIterator()  
  41. {  
  42. return new ListIterator(this);  
  43. }  
  44.  
  45. #endregion  
  46. }  
  47. public class ListIterator : Iterator  
  48. {  
  49. private int index = 0;  
  50. private ICollection list;  
  51. public ListIterator(ICollection list)  
  52. {  
  53. this.list = list;  
  54. index = 0;  
  55. }  
  56. #region Iterator Members  
  57.  
  58. public bool MoveNext()  
  59. {  
  60. if (index + 1 > list.Count)  
  61. return false;  
  62. else  
  63. {   
  64. index++;  
  65. return true;  
  66. }  
  67. }  
  68.  
  69. public object Current  
  70. {  
  71. get { return list[index]; }  
  72. }  
  73.  
  74. #endregion  
  75. }  
  76. ///   
  77. /// 測試  
  78. ///   
  79. public class Program  
  80. {  
  81. static void Main()  
  82. {  
  83. ICollection list = new List();  
  84. Iterator iterator = list.GetIterator();  
  85. while (iterator.MoveNext())  
  86. {  
  87. object current = iterator.Current;  
  88. }  
  89. }  

【編輯推薦】

  1. C# lock關(guān)鍵字?jǐn)⑹?/FONT>
  2. C#.Net FrameWork簡介
  3. C# new和override簡單描述
  4. C#值類型和引用類型淺談
  5. C#標(biāo)識(shí)符簡單分析
責(zé)任編輯:佚名 來源: IT168
相關(guān)推薦

2009-08-11 13:59:41

迭代器模式C# Iterator

2009-08-19 15:18:53

迭代器

2009-08-26 16:37:07

C#迭代器局部變量

2009-08-31 16:01:31

C#和設(shè)計(jì)模式

2013-03-15 10:37:08

C#

2021-06-22 15:27:13

設(shè)計(jì)模式迭代器模式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

2009-08-19 11:21:02

C# ListBox控

2009-08-26 16:46:06

C# ThreadSt

2023-11-07 10:10:36

設(shè)計(jì)模式元素

2009-08-27 13:27:50

C# this保留字

2009-08-26 10:34:59

C# Hashtabl

2009-09-01 09:16:57

C#使用SharpZi

2009-08-25 18:04:30

C#實(shí)現(xiàn)Singlet

2009-08-31 15:48:02

C# Singleto

2009-09-02 16:23:27

C# Singleto

2009-08-04 09:22:26

C#工廠模式
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 成人国产精品免费观看视频 | 精品一区二区不卡 | 播放一级黄色片 | 91丨九色丨国产在线 | 拍拍无遮挡人做人爱视频免费观看 | 91精品久久久久久综合五月天 | 久久久久久久一区 | 日韩久久久久久 | 成人在线精品视频 | 国外成人在线视频 | 不卡欧美| 欧美亚洲视频 | 91日韩在线 | 成人在线看片 | 国产精品免费在线 | 日本韩国电影免费观看 | 黄色成人在线 | 午夜精品视频 | 日本久久精品 | 一级免费看 | 欧美午夜精品久久久久久浪潮 | 国产精品不卡 | 天堂网avav| 色狠狠一区 | 国产在线麻豆精品入口 | 精品日韩一区 | 精品久久久久久 | 欧美一级黄色片免费观看 | 精品欧美二区 | 国产三级精品三级在线观看四季网 | 九九热re| 成人午夜免费在线视频 | 综合久久久久久久 | 午夜精品久久久久久久星辰影院 | 欧美国产精品 | 黄网站在线播放 | 精区3d动漫一品二品精区 | 久久久久国产精品午夜一区 | 一二三在线视频 | 偷拍自拍在线观看 | 精品国产一区二区国模嫣然 |