前篇讲述了如何实现自建类中的foreach功能,现在来讲讲如何实现范型类的foreach功能。其是在"体验C#范型,创建指定元素类型的ArrayList(0) "中已经涉及到了这个问题,只是当时没有展开,这次就详细的讲一下。
前面讲到,要类实现foreach功能,需要从IEnumeratalbe接口继承,在范型的类中,同样需要从接口继承,只是所继承的接口是IEnumerator<>,只是.net framework 2.0中提供范型功能的System.Collections.Generic命名空间中的一个,Generic就是范型的意思。比如现在有一个范型的类MyList,其中维护了一个数组,数组就是给予范型的数组,其类型在对象创建时确定,我们来看看如何实现foerach功能:
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
和明显,其中的public IEnumerator<T> GetEnumerator()和IEnumerator IEnumerable.GetEnumerator()这两个方法就是需要从IEnumeratable<>继承后重写的方法,也是实现的foreach的方法。在public IEnumerator<T> GetEnumerator()中写一个循环一次返回数组中的元素,在 另一个方法中在调用此方法。怎么样,是不是跟非范型实现foreach的过程有些不同呢。