用C#實現一個類的IEnumerable接口時有兩種方法:1)實現非泛型IEnumerable接口;2)實現泛型IEnumerable(T)接口。若是採用方法1,當集合元素T是值類型時,將涉及到巨多的boxing和unboxing操做。所以,理所固然地採用方法2;繼承
例如,如下代碼採用方法2實現枚舉從指定偏移開始全部整數接口
using System.Collections.Generic; class Ints : IEnumerable<int>
{ private readonly int offset; public Ints(int o) { offset = o; } public IEnumerator<int> GetEnumerator()
{ int i = offset; while( true ) yield return i++; } }
編譯時產生以下錯誤:
error CS0535: 'Ints' does not implement interface member 'System.Collections.IEnumerable.GetEnumerator()'
而咱們想要實現的是泛型的IEnumerable而不是非泛型的IEnumerable接口!怎麼辦呢?
查閱MSDN在線文檔可知:泛型IEnumerable繼承自非泛型IEnumerable。全部,在上述代碼中加入:
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() { return GetEnumerator(); }這樣,非泛型方法轉而調用泛型方法,從而不須要再去實現非泛型的IEnumerable接口了。