2009-04-03 2 views
2

열거 형 및 대리자를 저장하는 제네릭 컬렉션 (사전)이 있습니다. 따라서 사용자가 메서드에 enum 값을 매개 변수로 제공하면 컬렉션의 해당 델리게이트가 실행됩니다.Enum, Delegate 대리자가 오버로드 된 메서드를 가리키는 Dictionary 컬렉션

위임자가 가리키는이 메서드는 오버로드됩니다. 이 메소드를 호출 할 때 실행할 메소드의 버전을 어떻게 선택할 수 있습니까?

감사합니다.

+0

귀하의 상황에서 과부하가 정확히 무엇입니까? enum이 모두 같은 유형인지, 즉 대리자의 매개 변수 유형 선언이 모두 같은지 여부를 나타냅니다. (그런 생각으로, 그것은 greal 거래를 이해하지 못할 것이다). 어쩌면 내가 뭔가를 놓친 것일 수도 있지만 여기에 설명이 있으면 도움이 될 것입니다. – Noldorin

+0

델리게이트는 문자열의 수가 서로 다릅니다. 그게 전부입니다. 또한 다른 데이터 형식으로 작업하는 대리자가 있습니다 (이 경우 대리자는 별도의 형식이어야 함). – dotnetdev

+0

친절하게이 질문을 체크 아웃 할 수 있습니까? tp : //stackoverflow.com/questions/3593218 – randomguy

답변

3

대리인은 "메서드 그룹"이 아닌 단일 오버로드를 가리 킵니다. 메서드에 대한 대리자를 얻을 때까지 이미 오버로드 확인을 완료했습니다. 일반적으로, 당신은 단지 컴파일러에서이 작업을 수행 할 수 있습니다 :

using System; 
class Foo { 
    int Bar() { return 1; } 
    void Bar(int a) { } 
    static void Main() { 
     Foo foo = new Foo(); 
     Func<int> myDelegate = foo.Bar; // points to "int Bar()" version 
    } 
} 

을 질문 반사를 통해 오버로드 된 메서드를 얻기에 관련된 경우 - 당신은 (A Type[] 등) Type.GetMethod()의 인수의 패턴을 지정할 수 있습니다. 이것은 당신에게 당신이 원하는 방법을 제공해야합니다.

MethodInfo에서 대리인을 받으려면 Delegate.CreateDelegate을 사용하십시오.

+0

컬렉션에 다른 대리자 형식을 저장할 수 있습니다. 델리게이트 자체가 특정 강제 속성 (반환 유형/매개 변수)을 가지고 있기 때문에 다른 오버로드를 호출하는 방법을 묻는 것은 나에게는 근시입니다. – dotnetdev

+0

다른 대리자 유형을 저장하는 경우 DynamicInvoke를 사용하고 있습니까? 단일 대리자 형식을 저장하고 입력 된 Invoke를 사용하는 것과 비교하면 매우 느립니다. –

+0

Invoke()를 사용하고있었습니다. 그러나 코드는 WIP입니다. 고마워. (나는 새로운 것을 배웠고 모든 답글을 찾아 볼 주제를 깨닫는다.) – dotnetdev

0

대리인을 특정 서명으로 사용합니다. 오버로드가있는 메서드로 대리자를 인스턴스화하면 대리자 서명과 가장 잘 일치하는 서명이있는 오버로드가 사용됩니다.

+0

이것이 유일한 방법입니다. 별도의 클래스에서 대리자를 래핑하고 원하는 대리자를 호출 할 수 있습니다. 해킹 조금,하지만 나는 이것을 시도합니다. – dotnetdev

관련 문제