2012-12-18 2 views
1

내가 좋아하는 종류가있는 경우 : 내가 매개 변수로 그 유형의 객체를 사용하는 일반 대리자를 어떻게해야합니까C#에서 유형을 사용하여 일반 대리인을 만들려면 어떻게해야합니까?

Type type = myObject.GetType(); 

를? 다음과 같은 코드를 기대합니다 :

myDelegate = Action<type> (type parameter); 

위의 코드는 분명히 작동하지 않지만 작동하도록 만들 수 있습니까? 심지어 작동시킬 수 있습니까?

궁극적으로 사전 < 유형 목록, 목록 < 액션 <>이 있습니다.이 유형은 해당 유형의 개체를 매개 변수로 사용하는 대리인 목록과 유형을 보유하고 있습니다.

그리고

이 같은 것을 실행해야합니다

myDict[myType][i] (objectOfMyType); 

어떤 제안을 크게 감상 할 수있다.

감사합니다.

+3

어떤 종류의 사람들 함께 일하고 있습니다. 이것이 이들을 * 제네릭으로 만드는 이유입니다. – Yuck

+0

아마도 도움이 될 수 있습니다. http://stackoverflow.com/questions/773099/generating-delegate-types-dynamically-in-c-sharp – JGaarsdal

+0

실제 사례가 도움이 될 것입니다. – Alex

답변

1

예상대로 사전에 Action<> 유형의 인스턴스화를 직접 사용할 수 없습니다. 당신은 System.Delegate에 입력해야하고, DynamicInvoke 사용합니다 :

Dictionary<Type, List<Delegate>> dict; 

dict[myType][i].DynamicInvoke(objectOfMyType); 

을하고 처음에 대의원을 만드는 데 사용 반사 :

Type delegateType = typeof(Action<>).MakeGenericType(myType); 

MethodInfo delegatedMethod = typeof(ContainingType).GetMethod("MethodToInvoke"); 

Delegate myDelegate = Delegate.CreateDelegate(delegateType, delegatedMethod); 
dict.Add(myType, new List<Delegate> {myDelegate}); 
제네릭이 알 필요가 없습니다
+0

감사합니다. 난 단지 코드 블록을 사용했고, 그것은 올바른 길로 나를 잡았다, 바이 써클 캐스트. – Wahooney

관련 문제