Programing

IEnumerator와 IEnumerable의 차이점은 무엇입니까?

lottogame 2020. 8. 26. 08:22
반응형

IEnumerator와 IEnumerable의 차이점은 무엇입니까? [복제]


중복 가능성 :
누구나 IEnumerable 및 IEnumerator를 나에게 설명 할 수 있습니까?

IEnumerator와 IEnumerable의 차이점은 무엇입니까?


IEnumerableIEnumerator 인터페이스 를 반환하는 하나의 메서드 GetEnumerator 를 정의 하는 인터페이스이며, 이는 다시 컬렉션에 대한 읽기 전용 액세스를 허용합니다. IEnumerable을 구현하는 컬렉션은 foreach 문과 함께 사용할 수 있습니다.

정의

IEnumerable 

public IEnumerator GetEnumerator();

IEnumerator

public object Current;
public void Reset();
public bool MoveNext();

codebetter.com의 예제 코드


An IEnumerator은 열거 할 수있는 것입니다. Current속성과 MoveNextReset메서드가 있습니다 (.NET 코드에서는 가능하지만 명시 적으로 호출하지 않을 것입니다).

An IEnumerable은 열거 할 수있는 것입니다 ... 즉, .NET Framework를 반환하는 GetEnumerator 메서드가 있음을 의미합니다 IEnumerator.

어떤 것을 사용합니까? 사용하는 유일한 이유 IEnumerator는 열거하는 비표준 방법 (즉, 다양한 요소를 하나씩 반환하는 방법)이 있고 그 작동 방식을 정의해야하는 경우입니다. .NET을 구현하는 새 클래스를 만듭니다 IEnumerator. 하지만 여전히 수업 IEnumerator에서 반환해야합니다 IEnumerable.

열거 자 (구현 IEnumerator<T>)의 모양을 보려면 , 또는에 Enumerator<T>포함 된 클래스와 같은 클래스를 참조하십시오 . 을 구현하는 클래스 를 보려면 표준 컬렉션 클래스를 참조하십시오.List<T>Queue<T>,Stack<T>IEnumerable


Enumerator쇼 당신에게 목록 또는 컬렉션의 항목. Enumerator의 각 인스턴스는 특정 위치 (첫 번째 요소, 7 번째 요소 등)에 있으며 해당 요소를 제공 IEnumerator.Current하거나 ( ) 다음 요소 로 이동할 수 있습니다 ( IEnumerator.MoveNext). foreachC #에서 루프 를 작성할 때 컴파일러는 열거자를 사용하는 코드를 생성합니다.

An EnumerableEnumerators를 제공 할 수있는 클래스입니다 . 항목을 보는를 GetEnumerator제공 하는 메서드 Enumerator가 있습니다. foreachC #에서 루프 를 작성할 때 루프에서 사용하는 호출 GetEnumerator생성하는 코드입니다 Enumerator.


IEnumerable그리고 IEnumerator두 인터페이스이다. IEnumerable라는 메서드가 하나뿐입니다 GetEnumerator. 이 메서드는 (모든 메서드가 void를 포함하여 무언가를 반환하므로) 인터페이스이고 그 인터페이스는 IEnumerator. 컬렉션 클래스에서 열거 자 논리를 구현할 때 구현합니다 IEnumerable(일반 또는 비 일반). IEnumerable한 가지 방법 만 IEnumerator있고 두 가지 방법 ( MoveNextand Reset)과 하나의 속성이 Current있습니다. 이해하기 쉽 IEnumerable도록 IEnumerator내부 를 포함하는 상자로 간주 하십시오 (상속 또는 포함을 통하지 않음). 더 나은 이해를 위해 코드를 참조하십시오.

class Test : IEnumerable, IEnumerator
{
    IEnumerator IEnumerable.GetEnumerator()
    {
        throw new NotImplementedException();
    }

    public object Current
    {
        get { throw new NotImplementedException(); }
    }

    public bool MoveNext()
    {
        throw new NotImplementedException();
    }

    public void Reset()
    {
        throw new NotImplementedException();
    }
}

참고 URL : https://stackoverflow.com/questions/619564/what-is-the-difference-between-ienumerator-and-ienumerable

반응형