본문 바로가기
[ Program ]/C#

커스텀 열거자(IEnumerable, IEnumerator)

by 관이119 2012. 9. 17.
카페 > CPPWorld | 오호호
http://cafe.naver.com/cppworld/1060

오늘은 어떠한 상황에서 우리가 정의한 클래스를 Foreach 문에서 사용해야 할때가 있습니다.

이럴때 IEnumerable 과 IEnumerator를 활용할 수 있는데... 살짝만 봅니다.<

어떻게 클래스를 정의하고 어떻게 정의한 클래스를 사용하는지에 대해서만 볼께요.

foreach 문을 제대로 활용하기 위해서는 IEnumerable 인터페이스를 사용해야 한다.
이 인터페이스는 GetEnumerator()를 정의하고 있는데 이는 IEnumerator 인터페이스를 리턴한다.
IEnumerator 인터페이스는

- bool MoveNext();
- object Current {get;}
- void Reset();


의 3가지 메소드를 가지고 있다.

아래처럼 클래스 정의할때 두 인터페이스를 상속해서 정의해야 한다.


public class Cars :IEnumerable, IEnumerator

{

private Car[] carArray;

//배열의 현재 위치
int pos = -1;


//몇몇 Car 객체를 만들고 , 초기 상태를 정해준다.
public Cars()
{
carArray = new Car[4];
carArray[0] = new Car("FeeFee", 200, 0);
carArray[1] = new Car("cluker", 90, 0);
carArray[2] = new Car("Zippy", 30, 0);
carArray[3] = new Car("Fred", 30, 0);
}

public IEnumerator GetEnumerator()
{
return (IEnumerator)this;
}

public bool MoveNext()
{
if(pos < carArray.Length - 1)
{
pos++;
return true;
}
else
return false;
}

public void Reset(){pos = 0;}

public object Current
{
get {return carArray[pos];}
}


}

public class CarDriver
{
public static int Main()
{
Car[] myAutos = new Car[5];
myAutos[0] = new Car(123, "Rusty");
myAutos[1] = new Car(6, "mary");
myAutos[2] = new Car(83, "Viper");
myAutos[3] = new Car(13, "NoName");
myAutos[4] = new Car(9873, "Chucky");

//현재의 배열을 덤퍼한다.
Console.WriteLine("Here is the unordered set of cars:");


foreach(Car c in myAutos)

Console.WriteLine(c.ID + "" + c.petName);


return 0;
}
}


출처 : http://www.ensimple.net/enSimple/

'[ Program ] > C#' 카테고리의 다른 글

IEnumerator, IEnumerable  (0) 2012.09.17
vs2010 에서 WCF REST 프로젝트 무작정 만들기  (0) 2012.09.17
스레드의 상태  (0) 2012.09.17
C# 주의해야 할 문법  (0) 2012.09.17
클래스객체정의  (0) 2012.09.17

댓글