2011-10-20 145 views
2

動態創建委託我想創建一個通用委託,但我只知道執行時的類型。從類型名稱

這裏是我想創建委託:

public delegate void MyDel<T>(T t,string msg); 

這裏是我想要實例化和使用委託方法

Type typeSet = set.GetType(); 
MethodInfo method = typeSet.GetMethod("Add");  
Delegate test = Delegate.CreateDelegate(typeof(MyDel<typeSet>, method); 

其中排版是不明我在彙編。 不幸的是,我想要調用的方法不是靜態的。

有沒有人有任何想法?

在此先感謝

回答

4

您需要創建使用MakeGenericType具體的委託類型:

Type template = typeof(MyDel<>); 
Type specific = template.MakeGenericType(typeSet); 
Delegate test = Delegate.CreateDelegate(specific, method); 

認爲這就是你以後......

+0

感謝您的答覆,我現在怎麼打電話給委託人?像這樣:if(test!= null) { MyDel <> myDel =(MyDel <>)test; myDel(「blabla」); } – user1005016

+0

@ user1005016:如果您有參數並且可以合理確定它們沒問題,您可以使用'Delegate.InvokeDynamic',但是您不知道委託的編譯時類型。 –

+0

我想調用實體框架DbSet實體上的「添加」方法 public delegate void DelegateAddObject (T t,DbSet entity); 輸入contextType =(context as Object).GetType(); var set =(contextType.GetProperty(entitySetName))。GetValue(context,null); 類型typeSet = set.GetType(); MethodInfo method = typeSet.GetMethod(「Add」); 類型template = typeof(DelegateAddObject <>); 類型特定= template.MakeGenericType(typeSet); Delegate test = Delegate.CreateDelegate(specific,method); 其中context是我的dataContext。 但我得到以下錯誤:**錯誤綁定到目標方法** – user1005016