我想要做的是以下(我不知道它是否可能);我知道一個運行時間類型。我知道我想在運行時調用哪種方法。但是,我不知道這在編譯時間。C#在運行時創建參數類型未知的方法代理
由於inparam不是類型對象,因此GetFunction方法將無法創建給定methodInfo的委託。
有沒有辦法創建一個函數的委託,我只知道我希望委託的方法的Type和MethodInfo?
public sealed class Functions {
public static int SetStrValue(string s) {
// set a string
}
public static int SetIntValue(int i) {
// set an int
}
}
public sealed class GetFunctions {
public Func<object, int> GetFunction(Type type, MethodInfo methodInfo) {
// what I would like to do.
Func<object, int> func = Delegate.CreateDelegate(typeof(Func<object, int>), methodInfo);
return t => func(t);
}
}
public class InvokeFunctions {
public void invokeFunction() {
Type t = typeof(String);
MethodInfo methodInfo = typeof(Functions).GetMethod("SetStrValue");
int i = GetFunctions.GetFunction(t, methodInfo).Invoke("hello");
}
}
問題本身的一面爲什麼你的課程是封閉的?這通常不是一個好主意,因爲它基本上說'我永遠不想擴展這個類或以任何方式改變它',而許多.NET類是封閉的,因爲.NET是框架,所以這樣做更有意義。你爲什麼要求你的密封? – sydan 2014-10-31 08:51:13