求指教:C#中普通接口和泛型接口的区别

WenZ-Hu1 2017-02-11 04:43:41
各位大神好,我是新入坑的小白一名,目前学到枚举集合一块,发现对前面所学的泛型还是有一些不懂,导致目前学习进度停滞不前,因此前来请教各位:
1、IEnumerator<TItem>和IEnumerator这两个接口有什么不同,应该怎么去理解它们并合理使用?
2、
我按照教科书上的指引写的代码,报了如图的错误。我的理解是我没有将Tree<int>这个类变为可枚举集合,所以不能用foreach语句来遍历,但是我又不知道怎么解决这个问题,还请大神们赐教!
...全文
282 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
WenZ-Hu1 2017-02-11
  • 打赏
  • 举报
回复
引用 4 楼 to189 的回复:
1、IEnumerator<TItem>和IEnumerator这两个接口有什么不同,应该怎么去理解它们并合理使用? 了解一点:foreach就能够实现了
什么意思,不太懂
to189 2017-02-11
  • 打赏
  • 举报
回复
1、IEnumerator<TItem>和IEnumerator这两个接口有什么不同,应该怎么去理解它们并合理使用? 了解一点:foreach就能够实现了
WenZ-Hu1 2017-02-11
  • 打赏
  • 举报
回复
引用 2 楼 sp1234 的回复:
至于说你的 2,看不出你是怎么写代码的。
你好,谢谢你对我第一个问题的解答,我想请问下我应该怎么样把自己的代码发上来呢,我看到别的帖子都可以将自己的代码拷上去,我不知道如何操作
  • 打赏
  • 举报
回复
至于说你的 2,看不出你是怎么写代码的。
  • 打赏
  • 举报
回复
IEnumerable 其原型至少可以说有15年历史,或者更长,它是通过 IEnumerator 来定义的,而后者中使用装箱的 object 方式来定义,也就是弱类型的。弱类型不但会有性能问题,最主要地是不能在编译时进行类型检查,编程靠运气,只有运行时在用户面前崩溃了(而且是某个特定数据、几十遍运行之后才崩溃了)才丢人地被发现。 所以最近10几年都是强调强类型的编程方式,尽量不要弱类型,尽量不要画蛇添足地去搞什么“动态”。真正好的动态程序,也是强类型的,解决了稳定性问题的。 而 .net 最初设计时,设计者不懂泛型。在 .net 正式发布了好几年之后,才支持泛型。而且是在 JIT 层面支持的,编译出来的代码少、性能好(远比 c++模板好很多)。 所以,一些过去非常重要的低级的接口,后来也都有使用泛型的重构实现。但是老的东西不能想当然地删除,就保留下来了。所以你会看到有一个不用泛型的枚举接口,还有一个使用泛型的。其核心目的是一样的,区别只是后者重构了、去掉了用弱类型的 object 来声明一些属性和方法的方式。 二者实质是一样的,不要分开来理解。 在你使用时,如果你会用,那么你可以只用泛型的,不要使用老的。

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧