• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            C++ Programmer's Cookbook

            {C++ 基礎(chǔ)} {C++ 高級(jí)} {C#界面,C++核心算法} {設(shè)計(jì)模式} {C#基礎(chǔ)}

            Implementing IEnumerator and IEnumerable Interfaces using Inner Class in C#(very good)

            .NET framework provides IEnumerable and IEnumerator interfaces to implement collection
            like behavior to user defined classes. A
            developer can implement these interfaces to?
            provide collection like behavior to their classes. These interfaces are implemented?
            through inner classes.

            An inner class ( also known as Nested Type ) is a class which is enclosed inside
            another class.

            class A
            {
            int i ;
            class B // Class B is a inner class or Nested Type?
            {
            }
            }?

            IEnumerator and IEnumerable interfaces are defined in System.Collections namespace as :

            public interface IEnumerable
            {
            IEnumerator GetEnumerator(); //Returns a Enumerator
            }

            public interface IEnumerator
            {
            bool MoveNext(); //An enumerator is always positioned before the?
            //first element of the collection, first call to MoveNext?
            //moves the enumerator over the first element of the
            //collection?

            object Current { get ; } //Returns current object from the collection

            void Reset(); //Resets enumerator to just above the first element of the collection.
            }?

            For more details about above interfaces, refer
            Microsoft .NET framework documentation.

            Above two interfaces must be implemented to provide a collection (similar to ArrayList ) like
            behavior to user defined classes. There is one more interface called Collection interface?
            which I am excluding from our discussion.

            To demonstrate the working of above interfaces and inner class I have created a class called
            ItemCollection which implements IEnumerable interface.

            Within ItemCollection class there is one more class ( inner class or Nested Type ) called
            ItemIterator which implements IEnumerator interface. ItemCollection class also contains a?
            string array itemId, which provides the basis for iteration.?

            For implementation details, see the code below and follow these steps :

            1. Create a file ItemCollection.cs and save the source in that.

            //File ItemCollection.cs
            using System;
            using System.Collections;?

            //Class ItemCollection implements IEnumerable interface
            class ItemCollection : IEnumerable
            {
            String[] itemId ;

            //Constructor to create and populate itemId String array
            public ItemCollection( int noOfItem )
            {
            itemId = new String[noOfItem] ;
            for(int i = 0; i < itemId.Length; i ++ )
            {
            itemId[i] = i.ToString();
            }
            }

            //Implementation of method GetEnumerator of IEnumerable interface
            public virtual IEnumerator GetEnumerator()
            {
            return new ItemIterator(this);
            }


            //Inner class ItemIterator, implements IEnumerator
            public class ItemIterator : IEnumerator
            {
            //Declare a variable of type ItemCollection,
            //to keep reference to enclosing class instance
            private ItemCollection itemCollection;

            //Declare a integer pointer and Set to -1, so that
            //first call to MoveNext moves the enumerator over?
            //the first element of the collection.
            private int index = -1 ;


            //Pass an instance of enclosing class
            public ItemIterator(ItemCollection ic)
            {
            //Save enclosing class reference?
            itemCollection = ic ;
            }

            //After an enumerator is created or after a Reset,
            //an enumerator is positioned before the first element
            //of the collection, and the first call to MoveNext?
            //moves the enumerator over the first element of the
            //collection.

            public bool MoveNext()
            {
            index++ ;
            if( index < itemCollection.itemId.Length )
            {
            return true ;
            }
            else
            {
            index = -1;
            return false;
            }
            }

            //Return the current object, in our case Item Id string?
            //from itemId[] array. Throws InvalidOperationException exception
            //if index pointing to wrong position
            public object Current
            {
            get
            {
            if( index <= -1 )?
            {
            throw new InvalidOperationException() ;
            }
            return itemCollection.itemId[index];
            }
            }

            //Reset pointer to -1
            public void Reset()
            {
            index = -1;
            }

            }

            public static int Main(String[] args)
            {
            //Instantiate the collection
            ItemCollection itemCol = new ItemCollection(10);

            //Iterate the collection with various looping construct
            //provided in c#
            Console.WriteLine("1. Iteration using foreach loop:");
            foreach( String itemIdStr in itemCol)
            {
            Console.Write(itemIdStr + " " );
            }

            Console.WriteLine("\n\n2. Iteration using for loop:");
            for(IEnumerator ie = itemCol.GetEnumerator() ;
            ie.MoveNext();)
            {
            Console.Write(ie.Current + " " );
            }

            Console.WriteLine("\n\n3. Iteration using while loop:");
            IEnumerator ie1 = itemCol.GetEnumerator();
            while(ie1.MoveNext())
            {
            Console.Write(ie1.Current + " ");
            }
            return 0;
            }

            }


            2. Compile the above code as

            csc ItemCollection.cs

            3. Run the file ItemCollection.exe to see following output in console window :

            1. Iteration with foreach loop:
            0 1 2 3 4 5 6 7 8 9

            2. Iteration with for loop:
            0 1 2 3 4 5 6 7 8 9

            3. Iteration with while loop:
            0 1 2 3 4 5 6 7 8 9



            posted on 2006-04-11 12:04 夢(mèng)在天涯 閱讀(891) 評(píng)論(0)  編輯 收藏 引用 所屬分類: C#/.NET

            公告

            EMail:itech001#126.com

            導(dǎo)航

            統(tǒng)計(jì)

            • 隨筆 - 461
            • 文章 - 4
            • 評(píng)論 - 746
            • 引用 - 0

            常用鏈接

            隨筆分類

            隨筆檔案

            收藏夾

            Blogs

            c#(csharp)

            C++(cpp)

            Enlish

            Forums(bbs)

            My self

            Often go

            Useful Webs

            Xml/Uml/html

            搜索

            •  

            積分與排名

            • 積分 - 1808261
            • 排名 - 5

            最新評(píng)論

            閱讀排行榜

            亚洲精品无码久久久久sm| 国产精品一久久香蕉国产线看观看 | 区亚洲欧美一级久久精品亚洲精品成人网久久久久 | 99久久99久久久精品齐齐| 精品国产一区二区三区久久| 国内精品久久久久久麻豆 | 久久精品视频免费| 伊人伊成久久人综合网777| 亚洲va久久久噜噜噜久久狠狠| 国产精品久久久久无码av| 亚洲精品tv久久久久| 久久久久久久久久久久中文字幕 | 91久久成人免费| 久久精品中文字幕一区| 91精品国产91热久久久久福利 | 国产99久久精品一区二区| 久久婷婷五月综合97色直播| 久久夜色精品国产网站| 四虎影视久久久免费| 色综合久久综精品| 久久久一本精品99久久精品66 | 国产精品一久久香蕉国产线看 | AV无码久久久久不卡网站下载 | 99久久99久久精品国产| 精品一二三区久久aaa片| 久久性精品| 久久国产影院| 狠狠精品久久久无码中文字幕 | 欧美精品一区二区精品久久| 色婷婷久久综合中文久久蜜桃av| 婷婷久久综合九色综合绿巨人| 91精品国产综合久久四虎久久无码一级| 久久久久亚洲精品天堂| 亚洲精品无码久久千人斩| 97香蕉久久夜色精品国产| 伊人色综合久久天天人守人婷| 久久久久久极精品久久久| 少妇久久久久久被弄到高潮| 久久中文字幕无码专区| 国产精品久久久久久久久久影院| 国产欧美久久久精品影院|