ienumerable
介面是實現foreach迴圈的乙個重要的介面,像陣列、集合等之所以可以用foreach迴圈遍歷其中的每個元素便是因為他們都實現了ienumerable
介面而,那麼這個介面到底是如何執行的呢,通過下面乙個例子可以得到一些啟發。
定義乙個這樣簡單的類:
public class person
;}
由於names屬性是私有屬性,所以無法通過person類的物件對其進行訪問,也就無法對其遍歷,可以讓person類實現ienumerable
介面來對其進行遍歷,實現介面後的類如下:
public class person : ienumerable
;public ienumerator getenumerator()
}
可以看到實現了ienumerable
介面後person類裡面必須實現乙個getenumerator函式,該函式返回的是乙個型別為ienumerator 的物件,於是我們再寫乙個類繼承自ienumerator 介面:
public class personenumerator : ienumerator
//返回當前索引指向的names陣列中的元素
public object current
}//索引,判斷是否遍歷完成
public bool movenext()
else
return false;
}//重置索引的值,以便下一次遍歷
public void reset()
}
然後對getenumerator函式稍加修改就大功告成了,如下:
public class person : ienumerable
;public ienumerator getenumerator()
}
然後就可以用foreach對person類的物件進行遍歷了,如下:
static void main(string args)
console.readkey();
}
我們也可以用如下方法對names陣列進行遍歷:
static void main(string args)
console.readkey();
}
其實用foreach進行遍歷時也是實現的上述步驟。 介面IEnumerable的使用例項
public class linkedlist ienumerable public linkedlistnode last public linkedlistnode addlast object node else return newnode public ienumerator getenu...
實現泛型IEnumerable介面
用c 實現乙個類的ienumerable介面時有兩種方法 1 實現非泛型ienumerable介面 2 實現泛型ienumerable t 介面。如果採用方法1,當集合元素t是值型別時,將涉及到巨多的boxing和unboxing操作。因此,理所當然地採用方法2 例如,以下 採用方法2實現列舉從指定...
陣列,集合,IEnumerable介面,迭代器
發展 陣列 集合 泛型 1 陣列 1.陣列資料結構是system.array類的乙個例項.2.system.array類的語法為 serializableattribute comvisibleattribute true public abstract class array icloneable...