标题:关于C#枚举数的问题
只看楼主
卡巴斯
Rank: 2
等 级:论坛游民
帖 子:50
专家分:31
注 册:2012-12-18
结帖率:100%
已结贴  问题点数:10 回复次数:1 
关于C#枚举数的问题
程序代码:
class ColorEnumerator : IEnumerator//定义的枚举类
        {
            string[] Colors;
            int Position = -1;
            public ColorEnumerator(string[] theColors)
            {
                Colors = new string[theColors.Length];
                for (int i = 0; i < theColors.Length;i++ )
                {
                    Colors[i] = theColors[i];
                }
            }
            public object Current
            {
                get
                {
                    if (Position==-1)
                    {
                        throw new InvalidOperationException();
                    }
                    if (Position==Colors.Length)
                    {
                        throw new InvalidOperationException();
                    }
                    return Colors[Position];
                }

            }
            public bool MoveNext()
            {
                if (Position < Colors.Length - 1)
                {
                    Position++;
                    return true;
                }
                else
                    return false;
            }
            public void Reset()
            {
                Position = -1;
            }
        }
        class MyColors : IEnumerable
        {
            string[] Colors = { "red", "yellow", "blue" };
            public IEnumerator GetEnumerator()
            {
                return new ColorEnumerator(Colors);
            }
        }

 static void Main(string[] args)
        {
            {
                MyColors my = new MyColors();
                foreach (string color in my)//在这里,使用foreach为什么会调用MyColors类中的GetEnumerator方法啊?而进入ColorEnumerator类中方法的调用顺序又是怎么一回事啊?
                {
                    Console.WriteLine(color);
                }
                Console.ReadKey();
              }              
         } 
另外C#中要实现枚举数则IEnumerable和IEnumerator是不是要成对出现?枚举数的实现是不是依赖于这两个接口啊?
2013-04-07 23:21
yhlvht
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:36
帖 子:707
专家分:4405
注 册:2011-9-30
得分:10 
//在这里,使用foreach为什么会调用MyColors类中的GetEnumerator方法啊?而进入ColorEnumerator类中方法的调用顺序又是怎么一回事啊?

foreach就是C#封装的枚举数实现的一种简便写法,下面代码我把foreach改成了正常的枚举写法,这样你就能看懂了
static void Main(string[] args)
{
    MyColors my = new MyColors();
    //foreach (string color in my)//在这里,使用foreach为什么会调用MyColors类中的GetEnumerator方法啊?而进入ColorEnumerator类中方法的调用顺序又是怎么一回事啊?
    //{
    //    Console.WriteLine(color);
    //}
    ColorEnumerator ce = (ColorEnumerator)my.GetEnumerator();    //foreach(      my)
    while (ce.MoveNext())    //foreach(      in   )
    {
        string color = ce.Current.ToString();    //foreach(string color    )
        Console.WriteLine(color);
    }
    Console.ReadKey();
}

另外C#中要实现枚举数则IEnumerable和IEnumerator是不是要成对出现?枚举数的实现是不是依赖于这两个接口啊?
IEnumerable和IEnumerator是成对出现的,就是依赖于这两个接口的
C#枚举有封装枚举数,使用的时候不用这么麻烦,这个例子只是自己实现枚举数,换句话说就是告诉你枚举是怎么回事,如何实现的.
2013-04-08 04:24



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-403276-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.146252 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved