오늘은 어떠한 상황에서 우리가 정의한 클래스를 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 |
댓글