c# 枚举接口

问题:这个两个方法都是实现迭代器的,只想结果一样。这两个类(Class1)有什么区别吗?在Class1后加IEnumerable和不加的原理是什么?谢谢。
执行的时候,两个类都能使用Foreach遍历。执行结果也完全一样。
为什么我在类Class1后不实现IEnumerable接口,只是把IEnumerable接口中的GetEnumerator方法写了一下。编译器就自动实现和实现IEnumerable接口一样的效果?谢谢。

又见楼主,好执着啊,跟我一样 哈哈
我再解释一下吧,他们两个的区别就是一个实现了IEnumerable接口一个没有实现,但是都有一个叫GetEnumerator的方法。foreach不管你有没有实现IEnumerable接口,他指认有没有一个叫GetEnumerator的方法并是否返回了IEnumerator。在编译阶段进行检查,如果没有这个方法你的程序是不会编译通过的。编译后的程序是直接调用GetEnumerator这个方法得到IEnumerator进行调用,大概就是这样,具体实现就要去问微软了。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-10-24
IEnumerable在你Foreach的时候会自动调用GetEnumerator方法。如果你不实现IEnumerable接口你就没法用Foreach遍历了追问

执行的时候,两个类都能使用Foreach遍历。执行结果也完全一样。
为什么我在类Class1后不实现IEnumerable接口,只是把IEnumerable接口中的GetEnumerator方法写了一下。编译器就自动实现和实现IEnumerable接口一样的效果?谢谢。

追答

foreach使用的类也不一定必须继承IEnumerable接口,但必须具有GetEnumerator()的方法实现,该方法实现返回值又必须为具有Current的属性和实现MoveNext()的方法的类的实例,你确定你代码跑的起来。我眼看都跑不起来

相似回答