IEnumerator和IEnumerable是怎样使用的

 怎么说呢?先瞎举个例子吧:
          你如果有病了,你要怎么办?你首先想到的是什么?   上医院!!!    
                                                                                                /内科----药局划价--缴款----拿药
                                                                                              /
  上医院第一件事干什么?   旬诊   ——>   挂号(到)   /----外科---拍照--ct....
                                                                                            \
                                                                                              \眼科
                                                                                                  .
                                                                                                  .
以上都是你知道应该怎么做的

你为什么知道?因为它实现了这个接口   Ihospital
                          只要是医院,你就知道你到医院应该如何去做,你不用考虑它内部(挂号口,内科大夫是谁(你知道:大夫肯定有))是如何实现的,你明白了吧,接口的目的是对外公开,并让人使用的。
            你要是开医院,你就得继承Ihospital接口,你对外告诉大家“我实现Ihospital了“
大家就来了并且到了你的医院不用你说,都知道按步骤做什么。
            那么,是不是继承了Ihospital,你就完事了呢?
          你说,我已经建立了内科,药局等设施,可是,病人来了,药局却没有药, "医生 "小学毕业,你的医院只有一个形式而已!
能行吗?
          不行!!!  
          大家都知道你这里应该有大夫有药局(因为大家看见了你声明了Ihospital的接口)
  可是你却没有进行下一步:实现接口的功能(买药,请大夫。。。)
 
          现在,再说说上面的代码,IEnumerator,IEnumerable申明了什么呢?

IEnumerable:
                public   abstract   virtual   System.Collections.IEnumerator   GetEnumerator   (   )
IEnumerator:
                  public   abstract   virtual   System.Boolean   MoveNext   (   )
                public   abstract   virtual   void   Reset   (     )
                public   object   Current   [     get]
     
                  以上可以从对象浏览器看见
   

  继承他们有什么意义呢?
            继承他门的意义是:已经有人再这个接口上做了应用,这个人就相当于 "病人 "

病人之一:foreach语句
            (1)foreach干了什么,看看下面的代码
            System.Collections.IEnumerator   myEnumerator   =   myList.GetEnumerator();
                            //myList是一个实现了IEnumerable的集合,
            while   (   myEnumerator.MoveNext()   )
                {
                              Console.Write(   "\t{0} ",   myEnumerator.Current   );
                }
我也是菜鸟,大家互相学习。

 

IEnumerator 是所有非泛型枚举数的基接
IEnumerable的GetEnumerator返回一个实现了IEnumerator接口的对象
IEnumerable 表明某个对象能够被枚举,由IEnumerator的Current,MoveNext完成

ICollection主要针对静态集合;IList主要针对动态集合
IEnumerable<T>继承自IEnumerable
ICollection<T>继承自IEnumerable<T>
IList<T>继承自ICollection<T>
IEnumerable接口 
实现了IEnumerable接口的集合表明该集合能够提供一个enumerator(枚举器)对象,支持当前的遍历集合。IEnumerable接口只有一个成员GetEnumerator()方法。
IList接口和ArrayList类的目的是实现动态数组,ArrayList是IList的一个实现。

 IEnumerable表明对象是不确定类型的集合并支持简单迭代,是不是定长根本不关心...

IEnumerable<T>表明对象是指定类型的集合并支持简单迭代,是不是定长根本不关心...

ICollection是IEnumerable接口的派生接口,表明对象是不确定类型的集合并支持简单迭代,而且定义了集合的大小、枚举数和同步方法,这里的大小是指可以是定长的也可以是不定长的...

IList是ICollection和IEnumerable的派生接口,表明对象是不确定类型的集合并支持简单迭代,而且定义了集合的大小、枚举数和同步方法,还可以按照索引单独访问,这里的大小是指可以是定长的也可以是不定长的...

ArrayList类是IList接口的实现,表明对象是不确定类型的大小可按需动态增加的数组...

List<T>类是IList<T>接口的实现,是ArrayList类的泛型等效类并增强了功能,表明对象是可通过索引访问的对象的强类型列表...在.NET 2.0以上可以完全代替ArrayList,就是说ArrayList已经被淘汰...

而动态数组和链表在本质上是不同的...在.NET 2.0以上有双向链表LinkedList<T>泛型类,它也是继承自ICollection<T>,IEnumerable<T>,ICollection,IEnumerable...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值