• <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)在天涯 閱讀(887) 評(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

            搜索

            •  

            積分與排名

            • 積分 - 1804303
            • 排名 - 5

            最新評(píng)論

            閱讀排行榜

            久久中文字幕视频、最近更新| 久久伊人精品一区二区三区| 久久综合九色综合欧美狠狠| 青青草原综合久久大伊人导航| 97精品伊人久久大香线蕉| 91久久精一区二区三区大全| 久久精品一区二区三区中文字幕| 久久亚洲精品中文字幕| 99久久99久久精品国产| 麻豆AV一区二区三区久久| 久久婷婷色综合一区二区| 69久久精品无码一区二区| 午夜精品久久久久久| 精品久久一区二区三区| 亚洲中文字幕无码久久综合网 | 久久久WWW免费人成精品| 久久婷婷国产综合精品| 久久久久av无码免费网| 久久av免费天堂小草播放| 国产韩国精品一区二区三区久久| 中文字幕久久精品无码| 伊人久久国产免费观看视频 | 久久精品国产亚洲av麻豆蜜芽 | 婷婷久久香蕉五月综合加勒比| 久久国产视屏| 久久久久久久亚洲精品| 久久精品成人欧美大片| 国产激情久久久久影院老熟女| 1000部精品久久久久久久久| 一本色道久久综合狠狠躁| 2021久久精品免费观看| 欧美精品国产综合久久| 亚洲中文久久精品无码ww16| 伊人久久大香线蕉av不变影院| 久久SE精品一区二区| 亚洲中文久久精品无码ww16| 久久SE精品一区二区| 久久精品国产亚洲AV嫖农村妇女| 精品国产乱码久久久久久郑州公司| 久久久精品2019免费观看| 亚洲AV日韩精品久久久久 |