How to: Access a Collection Class with foreach (C# Programming Guide)
怎樣用Foreach通路集合類(C#程式設計向導)
想要在非一般類型集合類(non-generic collection class?)中使用Foreach,需要作如下考慮。
C#中,如果要求一個集合類能使用foreach,繼承IEumerable和IEnumerator并不是必須的。隻要這個類具有GetEnumerator, MoveNext, Reset和Current 成員,就可以和foreach工作。忽略接口的好處是,你可以定義比Object更明确的Current傳回類型,具有類型安全(type-safety?)的好處。
//不再繼承IEnumerable
public class Tokens
//不傳回一個IEnumerator
public TokenEnumerator GetEnumeator()
//不再繼承IEnumerator
public class TokenEnumerator
//類型安全,傳回string, 不是object
public string Current
忽略接口的缺點是,該集合類不能和其它運作時相容語言(common language run-time-compatible languages?)foreach聲明互操作
如果想集合二者優點,C#類型安全,以及與其它運作時相容語言互操作,你可以通過繼承IEumerable和IEnumerator和使用如下所述的明确的接口實作來達到這一目的。
//具體代碼,明日待續
IEumerable 與 IEnumerator必須一起使用的原因,自己了解如下。先看IEnumerable的定義。
public interface IEnumerable
{
IEnumerator GetEnumerator();
}
IEnumerable的定義中要求必須實作IEnumerator類型的傳回值,是以在IEnumerable的實作類,應該也要對IEnumerator接口做實作吧。不知道這麼了解正确否。
注釋:帶問号的括号内容,因為自己對中文的翻譯沒有把握