【求助】IEnumerable接口的实现 http://blog.csdn.net/byondocean/article/details/6871881 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 要想满足 foreach 语句的使用,其实是不需要 IEnumerable 接口的,只要提供一个 GetEnumerator 方法就可以。你可以把那个接口从 People类中去掉看看。这肯定是为了与早先的某些设计想兼容(虽然现在已经很难看出为什么还要维系这种东西了)。可以看出来,编译器在处理 foreach 语法时 考虑 IEnumerator 接口的方案是随后加上去的设计。你可以把 PeopleEnum GetEnumerator() 方法去掉而仅留下IEnumerable 接口看看。msdn的这个例子不好。它弄了个“四不像”的东西,两种支持foreach编译的写法全都提供了,结果必有一种是“多余的”! 谢谢分享,大概了解了IEnumerable接口的用法原理。 要满足foreach语句的使用有两种方法:方案1:这个类有一个public的GetEnumerator的实例方法,并且返回类型中有public 的bool MoveNext()实例方法和public的Current实例属性。方案2:让这个类实现IEnumerable接口.我们来看方案二:我们只需要在People类中实现这样一个方法:public IEnumerator GetEnumerator(){ return new PeopleEnum(_people);}但是MSDN例子中的这个方法感觉很困惑:IEnumerator IEnumerable.GetEnumerator(){ return (IEnumerator) GetEnumerator();}没有public限定,函数名成了IEnumerable.GetEnumerator? 实现一个接口中的方法,不需要为方法声明为 public 的。private、protected、internal等等也都可以。实现一个接口的方法,写成“接口名.方法”也是可以的,编译器会优先认识到这个签名的方法才是用来实现接口的。这也没有什么。msdn的例子,关键的问题是,虽然它给你示例 IEnumerable 的用法,但是这个东西毫无作用,你设置断点之后可能会发现它从来也不执行。因此它是应该可以被删除的例子。 C#2005中dataGridView的问题 AxSpreadsheet控件 新增行 急等高手回答 100求缩短字符串并能进行还原的方法 请教C#访问活动目录的代码问题 在那个PageSetupDiaglog里怎么才能自定义纸张大小啊? 如何把TreeView倒置? C# 线程池 子线程进度条监控问题 c# 怎么去代码区实现下面这段注册表的操作! asp。net中gridview用法 关于管理员和普通用户的权限 vs winform 设计界面控件不能拖动 Html form 用image提交 出现x,y坐标参数如何去除
谢谢分享,大概了解了IEnumerable接口的用法原理。
要满足foreach语句的使用有两种方法:
方案1:这个类有一个public的GetEnumerator的实例方法,并且返回类型中有public 的bool MoveNext()实例方法和public的Current实例属性。
方案2:让这个类实现IEnumerable接口.我们来看方案二:
我们只需要在People类中实现这样一个方法:
public IEnumerator GetEnumerator()
{
return new PeopleEnum(_people);
}
但是MSDN例子中的这个方法感觉很困惑:
IEnumerator IEnumerable.GetEnumerator()
{
return (IEnumerator) GetEnumerator();
}没有public限定,函数名成了IEnumerable.GetEnumerator?
msdn的例子,关键的问题是,虽然它给你示例 IEnumerable 的用法,但是这个东西毫无作用,你设置断点之后可能会发现它从来也不执行。因此它是应该可以被删除的例子。