实现IEnumerable的时候,是不是可以只实现一个GetEnumerator函数? GetNext需要吗?

问题描述

如题,我如果像下面这样来继承IEnumerable接口,返回一个成员的IEnumerable接口是可以工作,但是问题是,这个IEnumerable在被调用者访问的时候,内部是是调用的GetNext对吧。这个GetNext函数如果是个虚函数的话,是不是调用的是M类的GetNext函数,而不是Dictionary<string,int>的GetNext函数?我感觉应该是调用M类型的GetNext函数,因为是多态调用,对吧。那么我是不是应该重载GetNext函数和HasNext函数?classM:IEnumerable{Dictionary<string,int>m_table;#regionIEnumerableMemberspublicIEnumeratorGetEnumerator()//能否通过IEnumerator来修改元素?枚举器和迭代器还是有区别的?{returnm_table.GetEnumerator();}public??GetNext()//如果自己不重载,如何,那么IEnumerator默认调用的GetNext,到底拿到了什么元素?{}boolHasNext(){}#endregion}

解决方案

解决方案二:
迭代器只是c#(其实vb.net也是)的语法糖,它实际上还是生成了一个独立的class的。然后调用迭代器方法的程序,实际上真实的代码还是先new这个对象实例,然后调用其GetEnumerator()方法的。只不过使用迭代器的简洁的语法,你不需要手写那么多代码了。
解决方案三:
对于你贴出来的代码,你还是写一个可执行的吧。不然你列出来的代码有太多的bug,解释它很困难。
解决方案四:
IEnumerable只要实现GetEnumerator就可以了。publicinterfaceIEnumerable{IEnumeratorGetEnumerator();}

IEnumerator才需要GetNext等。
解决方案五:
引用1楼sp1234的回复:

迭代器只是c#(其实vb.net也是)的语法糖,它实际上还是生成了一个独立的class的。然后调用迭代器方法的程序,实际上真实的代码还是先new这个对象实例,然后调用其GetEnumerator()方法的。只不过使用迭代器的简洁的语法,你不需要手写那么多代码了。

你的意思是说,如果我从IEnumerable继承,那么实际上还有一个隐藏的类产生?是IEnumerable使得我产生了一个隐藏的内部类吗?能否明示?谢谢

时间: 2024-10-28 23:17:53

实现IEnumerable的时候,是不是可以只实现一个GetEnumerator函数? GetNext需要吗?的相关文章

ios-在ISGL3D中,一次只识别一个动作

问题描述 在ISGL3D中,一次只识别一个动作 我目前在开发ISGL3D应用,要求一次只识别一个动作. 比如说,同一时间,只能识别PICNH或者PAN. 不知道应该用什么方法? 解决方案 用下面的方法可以一次只识别一个动作: - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognize

win8双系统怎么设置开机时只开启一个系统?

  win8双系统怎么设置开机时只开启一个系统?           具体方法如下: 1.选择我的电脑,右键-属性,进入页面; 2.选择左上角的高级系统设置; 3.在"高级"下选择三个设置中的最后一个; 4.然后把"显示操作系统列表的时间"的勾去掉,最后点击确定即可.

如何让VC和Delphi程序只运行一个实例

有些时候,我们需要我们的程序只运行一个实例,笔者自己作程序也有这样的情况,于是自已探究一番.忙活一阵后,总算小有收获,不敢独享,在天极发表出来,供大家参考. 既然是从根本上解决问题,对于Windows程序而言,就从WinMain函数入口,这是因为在VC中使用SDK的方式编写程序最透明,并且WinMain是作为VC编译器生成EXE文件的默认入口函数. WinMain的函数原型: int WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, L

如何使应用程序只运行一个实例

要使应用程序只运行一个实例,一个简单的方法是在应用程序类中使用互斥量,这可以用VC下的GUIDGEN.EXE程序产生.GUIDGEN.EXE位于VC安装目录CommonTools目录下 实例 1: 新建一基于对话框的工程ex1,采用默认设置 2: 用GUIDGEN.EXE产生一个全局标志,#define one "产生的全局标志" 本例中产生的语句如下:#define one "0xbe8e2ce1, 0xdab6, 0x11d6, 0xad, 0xd0, 0x0, 0xe0

设置每次只下一个文件

  同时下载多个文件会延长文件的文成时间,用户可以设置每次只下载一个文件.在下载连续剧等资源的时候,通过这种方法可以边下载边看,从而减少等待时间. 启动网际快车,然后单击"工具"→"选项",然后切换到"连接"选项,在"任务配置"中的"最多同时进行的任务数:(1-1000)个"中输入"1",单击"确定"即可.

在需要许多不同jsp页面反馈后台数据处理的错误信息的时候,如何只做一个error.jsp页面?

问题描述 在需要许多不同jsp页面反馈后台数据处理的错误信息的时候,如何只做一个error.jsp页面? 如题所示,本人现在在写一个结构比较简单的基于Jsp/Servlet的web系统. 不同jsp页面反馈后台数据处理的错误时候,如何只做一个error.jsp页面然后根据各个servlet情况显示错误信息? 比如在许多Servlet中,举一个例子: //前略 if(MainDAO.createAssess(credit,usertype,ordersID,orderstype)>-1){ res

大咖、颜值、逼格、礼物都齐了,只差一个你!

传说中,这是一个格子衬衫.双肩包.拖鞋的聚集地. 传说中,参加这个"集会"的人一言不合就会"噼噼啪啪"--敲代码. 传说中,这是一场烧脑盛宴,也是面基的好去处--   邀请函那么美,一言不合先报名!戳此免费抢座>> 云栖大会是由阿里巴巴集团主办的全球云计算TOP级峰会,汇聚DT时代最强大脑,描绘云计算发展趋势和蓝图,展现云计算.大数据.人工智能蓬勃发展的生态全景.   今年开年起,阿里云栖大会就风风火火的跑遍了南方各个城市,广州.上海.深圳.南京.武汉.

java方法-java一个方法形参有两个,如何在调用的时候只传入一个参数

问题描述 java一个方法形参有两个,如何在调用的时候只传入一个参数 如题,有一个方法里两个形参,我另一个文件类中一个方法想要那个方法的返回值,可是第二个参数在这里用不到,能否只传第一个参数 如何实现,前提这个类不能继承后重写方法,因为多人合同写的. 解决方案 不可以,变通的办法是再写一个只有一个参数的函数重载形式,在其中给另一个参数一个预设值,间接调用. 解决方案二: 一个Action调用两个不同的方法 解决方案三: 调用的时候给一个无影响的值 解决方案四: 讲道理的话是不能这样做的,不过如果

python学习-关于pySerial串口读数,readline每次只显示一个

问题描述 关于pySerial串口读数,readline每次只显示一个 我是一个python新手,最近突发奇想想去玩一下硬件.用arduino对电脑的串口进行输出时,arduinoIDE的串口监视器可以监视到每秒都有新的数据从串口传递过来.但是我使用python serial模块,使用readline每次只读取到一个结果,程序就终止了.想向各位大神请教一下,应该怎么不断的获取数据 解决方案 你可以放到一个循环中不停的readline读取