2014-04-13 7 views
0

IEnumerable이 인터페이스라는 것을 알고 있으며 클래스가 인터페이스를 구현할 때 해당 인터페이스의 메서드에 대한 특정 본문을 구현해야한다는 것도 알고 있습니다. 나는 최근에 프로그램을 작성해 왔고 foreach 루프에서 사용할 수 있도록 클래스에 Ienumerable을 구현해야한다고 느꼈다. 나는이 방법을 수행하는 그렇게 후 :)IEnumberable 인터페이스 구현

class FData: IEnumerable<EClass> { 

    // Removed the irrelevant contents 
    public IEnumerator<EnumerableClass> GetEnumerator() 
    {  
     for (int i = 0; i < Emp_Id.Count; i++) { 
      yield return (new EnumerableClass { Emp_Id = Emp_Id[i], Salary = Salary[i] }); 
     } 
    } 
    System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() 
    { 
     return this.GetEnumerator(); 
    } 
} 

내가 내 FData 클래스는 정확히 같은 선택 (같은 모든 열거 방법을 상속하는 것처럼 목록처럼 사용할 수있는 참조), 모두 (모든() 등.

이 메서드의 동작이 인터페이스에 정의되어 있지 않은 경우 어떻게되는지 정확히 알고 싶습니다.

답변

7

이 모든 방법은 IEnumerable 인터페이스를 구현하는 유형의 경우 extension 방법입니다. 따라서 유형이 IEnumerable에 구현되면 해당 유형의 본문 내에 이미 정의 된 메소드를 제외하고 이러한 메소드도 메소드로 갖게됩니다.

자세한 내용은 here을 참조하십시오. 또한, 전에 extension 방법에 대해 들어 본 적이 없다면, 먼저 here보세요.

+0

여기에는 확장 방법이 없습니다. –

+0

무슨 말씀 이세요? – Christos

+0

내 대답은 확장 메서드에 대한 설명과 확장 메서드 설명에 대한 링크입니다.하지만이 메서드는 해당 질문과 아무 관련이 없습니다. –

2

확장 메소드이며 여기에 몇 가지 정보가 있습니다.

확장 메서드는 일부 네임 스페이스 내의 정적 클래스 내에 정적 메서드로 존재하며 메서드의 첫 번째 인수에는 this 키워드가 포함됩니다 (아래 예제 메서드 서명은 OfType 참조). 이 경우 System.Linq.Enumerable extension methods이 표시됩니다. 클래스 파일에서 using System.Linq 네임 스페이스를 제거하려는 경우 해당 확장 메서드를 더 이상 사용할 수 없습니다. Resharper와 같은 시장 리팩토링 도구가 적절한 경우 확장 메소드를 제안하지만 Visual Studio의 기능을 사용하면 확장 메소드 (예 : Ctrl +)를 제안하지 않습니다. 따라서 원하는 경우 적절한 using 문을 클래스 파일 맨 위에 추가해야합니다. 네임 스페이스에 다른 클래스가 필요 없으면 제거 할 수 있으며 확장 메서드는 더 이상 사용할 수 없습니다.

public static IEnumerable<TResult> OfType<TResult>(this IEnumerable source); 

이의 아름다움은 IEnumerable를 구현하는 것도 너무 오래 그 확장 방법의 네임 스페이스가 포함되어 있습니다로 사용할 수있는 OfType 방법을 것입니다. 나만의 확장 방법을 만들 수도 있습니다.