2017년 5월 16일 화요일

[c#] Enumerator

IEnumerable  을 구현

IEnumerator IEnumerable.GetEnumerator()
        {
            return GetEnumerator();
        }

 IEnumerator를 상속받는  GetEnumerator 를 구현을 한다.

IEnumerator를 상속받는  GetEnumerator

는 currnet  라는 오브젝트를 리턴하고, 다음에 MoveNext실행 다시 current라는 오브젝틀르 리턴하는 식으로 구동하게 된다.

여기서 MoveNext는 bool을 리턴하고, True리턴시 currnet를 반환, Fals 리턴시 Dispose라는 메소드로 가서 더이상 반환을 안하게 된다.



public class FibonacciNumbers : IEnumerable
    {
        public IEnumerator GetEnumerator()
        {
            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;
        }

댓글 없음:

댓글 쓰기