标题:初学问题书上一段代码没弄懂那位大哥指点一下
只看楼主
li2002
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2013-3-5
 问题点数:0 回复次数:2 
初学问题书上一段代码没弄懂那位大哥指点一下
看C#高级编程中有一段代码,没看明白是怎么运行的
问题是在new Game()时执行构造函数时,调用了Cross和Circle方法,还要IEnumerator enumerator=game.Cross();这句也调用了Cross方法,此时为什么不打印出信息,而是在while中打印出信息,在迭代的过程中并没有直接调用这两个方法却打印此方法中的信息,怎么理解?
哪位大哥能详细地解释一下整个过程是怎么执行的,不知道我哪里理解得不对,总是不能明白
谢谢!!
程序代码:
using System;
using System.Collections;

namespace Myspace.Test
{
public class Myclass
{
public static void Main()
{
  Game game=new Game();
  Console.WriteLine("hello world");
  IEnumerator enumerator=game.Cross();
  while(enumerator.MoveNext())
  {
      enumerator=(IEnumerator)enumerator.Current;
  }
  return;
}
}
public class Game
{
    private IEnumerator cross;
    private IEnumerator circle;
    public Game()
    {
        cross=Cross();
        circle=Circle();
    }
    private int move =0;
    public IEnumerator Cross()
    {
        while(true)
        {
            Console.WriteLine("Cross,move {0}",move);
            move++;
            if (move>9){
                yield break;
            }else {
                yield return circle;
            }
        }
    }
    public IEnumerator Circle()
    {
        while(true)
        {
            Console.WriteLine("Circle move {0}",move);
            move++;
            if(move>9){
                yield break;
            }else {
                yield return cross;
            }
        }
    }
}

}


运行结果
程序代码:
hello world
Cross,move 0
Circle move 1
Cross,move 2
Circle move 3
Cross,move 4
Circle move 5
Cross,move 6
Circle move 7
Cross,move 8
Circle move 9
搜索更多相关主题的帖子: Cross 
2013-03-05 11:31
lantian8134
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:8
帖 子:115
专家分:789
注 册:2013-1-11
得分:0 
注意你代码中的yield关键字,正因为有了这个yield创建出来的迭代器是带延迟计算,当真正用到时enumerator.MoveNext()才计算
建议你查看相关帮助文档吧,因为不是一两句话就说的清楚的
2013-03-05 14:29
li2002
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2013-3-5
得分:0 
谢楼上解答
2013-03-05 14:52



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




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

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