天天看點

第一篇學習(翻譯)筆記: C#,怎樣用Foreach通路集合類

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接口做實作吧。不知道這麼了解正确否。

注釋:帶問号的括号内容,因為自己對中文的翻譯沒有把握