IEnumerableインタフェースの簡単な例
3217 ワード
回転:https://blog.csdn.net/wang371756299/article/details/8197075
要旨:IEnumerableインタフェースはforeachループを実現する重要なインタフェースであり、配列、集合などforeachループでその中の各要素を遍歴できるのは、彼らがIEnumerableインタフェースを実現したからであり、このインタフェースはいったいどのように動作しているのか、次の例で得ることができる...
IEnumerableインタフェースはforeachループを実現する重要なインタフェースであり、配列、集合などforeachループでその各要素を遍歴できるのは、IEnumerableインタフェースを実現しているからであり、このインタフェースはどのように動作しているのか、次の例を通じていくつかのヒントを得ることができる.
このような簡単なクラスを定義します.
names属性はプライベート属性であるため、Personクラスのオブジェクトからアクセスすることができず、遍歴することもできず、PersonクラスにIEnumerableインタフェースを実装して遍歴させることができ、インタフェースを実装したクラスは以下の通りである.
IEnumerableインタフェースが実装された後、PersonクラスにはGetEnumerator関数が実装されなければなりません.この関数はIEnumeratorのタイプのオブジェクトを返し、IEnumeratorインタフェースから継承されたクラスを書きます.
GetEnumerator関数を少し修正すると、次のようになります.
次に、Personクラスのオブジェクトをforeachで巡回できます.
names配列を次の方法で巡回することもできます.
要旨:IEnumerableインタフェースはforeachループを実現する重要なインタフェースであり、配列、集合などforeachループでその中の各要素を遍歴できるのは、彼らがIEnumerableインタフェースを実現したからであり、このインタフェースはいったいどのように動作しているのか、次の例で得ることができる...
IEnumerableインタフェースはforeachループを実現する重要なインタフェースであり、配列、集合などforeachループでその各要素を遍歴できるのは、IEnumerableインタフェースを実現しているからであり、このインタフェースはどのように動作しているのか、次の例を通じていくつかのヒントを得ることができる.
このような簡単なクラスを定義します.
01.public class Person
02. {
03. private string[] names= new string[] { "A", "B", "C" };
04. }
names属性はプライベート属性であるため、Personクラスのオブジェクトからアクセスすることができず、遍歴することもできず、PersonクラスにIEnumerableインタフェースを実装して遍歴させることができ、インタフェースを実装したクラスは以下の通りである.
01.public class Person : IEnumerable
02. {
03. private string[] names= new string[] { "A", "B", "C" };
04.
05. public IEnumerator GetEnumerator()
06. {
07.
08. }
09. }
IEnumerableインタフェースが実装された後、PersonクラスにはGetEnumerator関数が実装されなければなりません.この関数はIEnumeratorのタイプのオブジェクトを返し、IEnumeratorインタフェースから継承されたクラスを書きます.
01.public class PersonEnumerator : IEnumerator
02. {
03. //
04. private string[] _names;
05.
06. //
07. private int index = -1;
08.
09. // ,
10. public PersonEnumerator(string[] temp)
11. {
12. _names = temp;
13. }
14.
15. // names
16. public object Current
17. {
18. get { return _names[index]; }
19. }
20.
21. // ,
22. public bool MoveNext()
23. {
24. index++;
25. if (index < _names.Length)
26. {
27. return true;
28. }
29. else
30. return false;
31. }
32.
33. // ,
34. public void Reset()
35. {
36. index = -1;
37. }
38. }
GetEnumerator関数を少し修正すると、次のようになります.
01.public class Person : IEnumerable
02. {
03. private string[] names = new string[] { "A", "B", "C" };
04.
05. public IEnumerator GetEnumerator()
06. {
07. // PersonEnumerator , Person names
08. return new PersonEnumerator(names);
09. }
10. }
次に、Personクラスのオブジェクトをforeachで巡回できます.
01.static void Main(string[] args)
02. {
03. Person p1 = new Person();
04. foreach (string item in p1)
05. {
06. Console.WriteLine(item);
07. }
08. Console.ReadKey();
09. }
names配列を次の方法で巡回することもできます.
01.static void Main(string[] args)
02. {
03. Person p1 = new Person();
04. IEnumerator rator = p1.GetEnumerator();
05. while (rator.MoveNext())
06. {
07. Console.WriteLine(rator.Current);
08. }
09. Console.ReadKey();
10. }