2013-06-16 1 views
2

C#의 Functor와 동일한 기능이 있습니까?펑터는 C#에서 이에 상응하는 기능을합니까?

C#은 Func <,>, 대리자 및 익명 메소드를 포함하지만 메소드에 대한 이러한 포인터 중 일부는 아닙니다.

C++ Functor는 클래스이며 메서드에 대한 포인터가 아닙니다.

+0

http://stackoverflow.com/a/974639/187697 – keyboardP

+0

나는 그것을 보았다. 그러나 그들은 자신의 질문에만 국한된 것이지 일반에 관한 것이 아니었다. – 4thSpace

+0

그 답변에는 근사치 목록이 있습니다. –

답변

6

C#을 Func을 <,>, 대표 및 익명 메소드 을 가지고 있지만이 포인터의 모든 방법에하지?

아니요. C# 위임자도 컴파일러에서 구현 한 클래스입니다. 이러한 생성 된 클래스 (대리자 용)는 MulticastDelegate에서 파생되며 Delegate에서 파생됩니다.

즉, 델리게이트는 컴파일러에서 생성 한 클래스의 구문 설탕입니다.

+0

확인. 그것들은 Functors와 유사 할까? – 4thSpace

+0

@ 4thSpace : "비슷한"어떤 의미로? C#에서는'operator()'를 오버로드 할 수 없습니다. 그래서 당신이 그것을 의미한다면, 그것은 비슷하지 않습니다. C#은 다른 언어이고, 다른 것들을 다르게하고, 다르게합니다. – Nawaz

+0

연산자()? 이것과 다른 무언가를 말하고 있습니까? http://msdn.microsoft.com/en-us/library/aa288467(v=vs.71).aspx? – 4thSpace

3

람다 (Func <>, 작업 <>)와 대리인 (익명 포함)은 모두 클래스입니다. 당신이 방법에 포인터를해야하는 경우

당신이 의 정렬 화를 사용해야합니다 (예를 들어, 안전하지 않은 코드로 합격) :

IntPtr pFunc = Marshal.GetFunctionPointerForDelegate(myDelegate); 
이 답변이 도움이 될 수