public class GameMoves {
private IEnumerator cross;
private IEnumerator circle; public GameMoves() {
cross = Cross();
circle = Circle();
} private int move = 0;
const int MaxMoves = 9; public IEnumerator Cross() {
while (true) {
Console.WriteLine("Cross, move {0}", move);
if (++move >= MaxMoves)
yield break;
yield return circle;
}
} public IEnumerator Circle() {
while (true) {
Console.WriteLine("Circle, move {0}", move);
if (++move >= MaxMoves)
yield break;
yield return cross;
}
}
}在Main中调用:
var game = new GameMoves();
IEnumerator enumerator = game.Cross();
while (enumerator.MoveNext())
{
enumerator = enumerator.Current as IEnumerator;
}问题,请问在main中语句:
var game = new GameMoves();
为什么不调用那两个方法:Cross() 和"Circle()?
private IEnumerator cross;
private IEnumerator circle; public GameMoves() {
cross = Cross();
circle = Circle();
} private int move = 0;
const int MaxMoves = 9; public IEnumerator Cross() {
while (true) {
Console.WriteLine("Cross, move {0}", move);
if (++move >= MaxMoves)
yield break;
yield return circle;
}
} public IEnumerator Circle() {
while (true) {
Console.WriteLine("Circle, move {0}", move);
if (++move >= MaxMoves)
yield break;
yield return cross;
}
}
}在Main中调用:
var game = new GameMoves();
IEnumerator enumerator = game.Cross();
while (enumerator.MoveNext())
{
enumerator = enumerator.Current as IEnumerator;
}问题,请问在main中语句:
var game = new GameMoves();
为什么不调用那两个方法:Cross() 和"Circle()?
new GameMoves()创建GameMoves类的对象。
game = new GameMoves().把创建的对象的地址传给game这个引用。
没见到有调用方法的语句啊。
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
楼主想要什么结果?
我是觉得,这行的时候,应该也是会调用"Cross()"和"Circle()"
因为对于我测试的方法,如:
public A() {
_val = IncreaseValue();
} public int IncreaseValue() {
return _val++;
//return Val++;
} public static int ShowI() {
A a = new A();
return a.GetConstont();
}
这样是会调用的...
不是,关键是public GameMoves() {
cross = Cross();
circle = Circle();
}
里面不是有两个方法么...我的意思是太也应该调用那两个方法...
就像我在 4 楼 的下面的代码一样....不都是一个类型么...
public IEnumerator Cross() {
while (true) {
Console.WriteLine("Cross, move {0}", move);
if (++move >= MaxMoves)
yield break;
yield return circle;
}
}
的返回值改成IEnumerable.然后修改一下构造函数:
public GameMoves() {
foreach(object o in Cross()){}
cross = Cross();
circle = Circle();
}
这样Cross才会被调用了。