本篇文章給大家分享的是有關(guān)C# 中怎么利用Iterator實(shí)現(xiàn)迭代器模式,小編覺得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

成都創(chuàng)新互聯(lián)公司,為您提供成都網(wǎng)站建設(shè)、成都網(wǎng)站制作、網(wǎng)站營銷推廣、網(wǎng)站開發(fā)設(shè)計(jì),對服務(wù)廣告設(shè)計(jì)等多個(gè)行業(yè)擁有豐富的網(wǎng)站建設(shè)及推廣經(jīng)驗(yàn)。成都創(chuàng)新互聯(lián)公司網(wǎng)站建設(shè)公司成立于2013年,提供專業(yè)網(wǎng)站制作報(bào)價(jià)服務(wù),我們深知市場的競爭激烈,認(rèn)真對待每位客戶,為客戶提供賞心悅目的作品。 與客戶共同發(fā)展進(jìn)步,是我們永遠(yuǎn)的責(zé)任!
C# Iterator迭代器模式我們在平時(shí)的開發(fā)中應(yīng)該經(jīng)常用到。不直接使用也會(huì)間接使用,我們使用foreach語句來循環(huán)就是在間接的使用C# Iterator迭代器模式。
迭代器就像指針一樣可以向前向后移動(dòng),在.NET中迭代器只能向后移動(dòng)。
動(dòng)機(jī):在軟件的構(gòu)建過程中,集合對象內(nèi)部結(jié)構(gòu)常常變化各異。但對于這些集合對象,我們希望在不暴露其內(nèi)部結(jié)構(gòu)的同時(shí),可以讓外部客戶代碼透明地訪問其中包含的元素;同時(shí)這種“透明遍歷”也為“同一種算法在多種集合對象上進(jìn)行操作”提供了可能。使用面向?qū)ο蠹夹g(shù)將這種遍歷機(jī)制抽象為“迭代器對象”為“應(yīng)對變化中的集合對象”提供了一種優(yōu)雅的方式。
意圖:提供一種方法順序訪問一個(gè)集合對象中的各個(gè)元素,而不暴露該對象的內(nèi)部表示。
public interface IEnumerable{ //得到迭代器 IEnumerator GetEnumerator(); } /// <summary> /// 迭代器接口 /// summary> public interface IEnumerator{ //得到當(dāng)前的對象 object Current{ get; } bool MoveNext(); void Reset(); } /// <summary> /// 集合類型,實(shí)現(xiàn)了可迭代接口 /// summary> public class MyCollection : IEnumerable{ internal int[] items; public MyCollection(){ items = new int[5] {1, 2, 3, 4, 5}; } #region IEnumerable 成員 //實(shí)現(xiàn)迭代接口,返回迭代器 public IEnumerator GetEnumerator(){ //在這里進(jìn)行解藕,將集合對象轉(zhuǎn)換為迭代器 return new MyEnumerator(this); } #endregion } //迭代器對象,實(shí)現(xiàn)了迭代器接口 internal class MyEnumerator : IEnumerator{ private int nIndex; MyCollection collection; //構(gòu)造函數(shù)將集合類型轉(zhuǎn)換成內(nèi)部成員 public MyEnumerator(MyCollection coll){ this.collection = coll; nIndex = -1; } #region IEnumerator 成員 //返回當(dāng)前迭代到的對象 public object Current{ get{ return collection.items[nIndex]; } } //移動(dòng)到下一個(gè)對象,指針向后移動(dòng) public bool MoveNext(){ nIndex++; return (nIndex < collection.items.GetLength(0)); } //重設(shè)迭代器,指針回零 public void Reset(){ nIndex = -1; } #endregion }很清楚,在上面的代碼中,我們通過GetEnumerator方法,將集合對象轉(zhuǎn)換為了可迭代對象,這實(shí)際上是在對集合對象進(jìn)行抽象,將他轉(zhuǎn)換為迭代器。在這里,我們需要定義一個(gè)迭代器類,但是這是.NET 1.1中的做法,在.NET 2.0以后實(shí)現(xiàn)一個(gè)可迭代模式更加簡單。
/// <summary> /// 集合類型,實(shí)現(xiàn)了可迭代接口 /// summary> public class MyCollection : IEnumerable<int> { internal int[] items; public MyCollection() { items = new int[5] {1, 2, 3, 4, 5}; } #region IEnumerable<int> 成員 public IEnumerator<int> GetEnumerator() { for(int i = 0; i < items.Length; i++) { yield return items[i]; } } #endregion #region IEnumerable 成員 System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() { for(int i = 0; i < items.Length; i++) { yield return items[i]; } } #endregion }我們通過yield return關(guān)鍵字來返回一個(gè)IEnumerator接口,這個(gè)關(guān)鍵在在編譯之后會(huì)自動(dòng)生成對應(yīng)的迭代器的代碼。
在.NET中迭代器只能先前,在c++中可以向后等其他操作。
注意:在迭代的過程中,我們不能向集合添加內(nèi)容,后移除集合里的item,這樣將會(huì)導(dǎo)致一些問題的出現(xiàn)。以上介紹C# Iterator迭代器模式。
以上就是C# 中怎么利用Iterator實(shí)現(xiàn)迭代器模式,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見到或用到的。希望你能通過這篇文章學(xué)到更多知識(shí)。更多詳情敬請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
分享文章:C#中怎么利用Iterator實(shí)現(xiàn)迭代器模式
網(wǎng)頁URL:http://chinadenli.net/article12/jhjhdc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動(dòng)網(wǎng)站建設(shè)、云服務(wù)器、網(wǎng)站導(dǎo)航、關(guān)鍵詞優(yōu)化、App設(shè)計(jì)、網(wǎng)站設(shè)計(jì)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)