2013-02-23 3 views
8

:대리인을 인스턴스화하는 다양한 방법 간의 차이점 (Func <T, T>)? <strong>1</strong>

Func<int, int> myFunc = new Func<int,int>(delegate(int x) { 
    return x + 1; 
}); 

2 :

Func<int, int> myFunc = delegate(int x) { 
    return x + 1; 
}; 

3 :

Func<int, int> myFunc = x => x + 1; 

그 차이는 무엇입니까?

+0

, λ 표기 대 대표 키워드 (중복 http://stackoverflow.com/questions/208381/whats-the-difference-between-anonymous-methods-c-2-0- and-lambda-expressions)과 [새로운 액션()과 람다 (lambda)의 차이점은 무엇입니까?] (http://stackoverflow.com/questions/765966/what-is-the-difference-between-new-action-and -a-lambda) – nawfal

답변

7

말을 그냥 아주 아주 짧은 방법입니다. 처음 두 개는 anonymous methods의 예입니다. 마지막은 lambda expression의 예입니다. 익명 메서드 및 람다 식을 모두 익명 함수 인 이라고합니다.

익명 메서드는 C# 2에 도입되었습니다. 람다 식은 C# 3에서 소개되었고 대부분 익명의 메서드로 대체되었습니다. 람다 식은 expression trees으로 변환 될 수 있습니다.이 코드는 대표자뿐만 아니라 IL이 아닌 데이터로 코드를 나타냅니다.

Func<TResult>, Func<T, TResult> 등은 위임 유형의 예에 불과합니다. 익명 함수를 호환 가능한 대리자 형식으로 변환 할 수 있습니다. 예를 들어

public delegate int Foo(string x); 

Foo foo = text => text.Length; 
+0

익명 함수와 Func의 차이점은 무엇입니까? 그들은 같은가요? –

+0

@Lior :'Func'는 델리게이트 형식의 이름 일뿐입니다. –

+0

대단히 감사합니다. –

8

모두 동일합니다. 동일한 내용으로 컴파일되는 syntactic sugar입니다. 이다

- 타입 추론 및 기타 컴파일러 케이크와 함께, 3 그들은 모두 같은 것 1.

+0

익명 함수와 Func의 차이점은 무엇입니까? 동일합니까? –

+0

@Lior -'Func'은 정의 된 델리게이트입니다. 익명 함수에는 명명 된 대리자 형식이 없습니다. – Oded

+0

@Lior 예, 런타임에는 동일하지만 컴파일러를 정의하는 방식이 다르므로이 여러 가지 특정 유형의 매개 변수를 받아들이고 특정 유형을 반환하는 대리자를 이해해야합니다. – Somnath

관련 문제