IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
IEnumerator를 상속받는 GetEnumerator 를 구현을 한다.
IEnumerator를 상속받는 GetEnumerator
는 currnet 라는 오브젝트를 리턴하고, 다음에 MoveNext실행 다시 current라는 오브젝틀르 리턴하는 식으로 구동하게 된다.
여기서 MoveNext는 bool을 리턴하고, True리턴시 currnet를 반환, Fals 리턴시 Dispose라는 메소드로 가서 더이상 반환을 안하게 된다.
public class FibonacciNumbers : IEnumerable
{
public IEnumerator
{
return new FibEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
public class FibEnumerator : IEnumerator
{
public FibEnumerator()
{
Reset();
}
public Int64 Current { get; private set; }
Int64 Last { get; set; }
object IEnumerator.Current { get { return Current; } }
public void Dispose()
{ Console.WriteLine("Enumerator is over"); }
public bool MoveNext()
{
if(Current == -1)
{
Current = 0;
}
else if(Current == 0)
{
Current = 1;
}
else if(Current == 5) return false;
else
{
Int64 next = Current + Last;
Last = Current;
Current = next;
}
return true;
}
public void Reset()
{
Current = -1;
}
댓글 없음:
댓글 쓰기