讓我試着舉一個小例子。MethodInfo.Invoke內部有一個委託Object [] params
class Session (
public delegate string CleanBody();
public static void Execute(string name, string q, CleanBody body) ...
可以使用,如:
Session.Execute("foo", "bar", delegate() { string x="beep"; /* whatever*/ return x; });
但是如果我需要運行是通過MethodInfo.Invoke - 在不同的dll沒有類型的依賴關係兩種方式。像:
Type type = Type.GetType("Bla.Session, FooSessionDll", true);
MethodInfo methodInfo = type.GetMethod("Execute");
Object [] args = { "foo", "bar", delegate() // Doesn't compile, now that ?
{
string x="beep"; /* whatever*/ return x;
}
methodInfo.Invoke("Trial Execution :-)", args);
無論伎倆/施放將應用於它必須是這樣的,它仍然會到達執行作爲一個真正的代表。實際委託(或多個)可能有更復雜的簽名等等,等等
請詳細解釋爲什麼你想做這樣一個令人困惑的事情。可能有更好的方法。 – ChaosPandion 2010-06-24 04:04:51
不幸的是,與代表類型鑄造沒有太大的餘地。我不得不首先質疑總體架構。沒有明確的推理背後有些問題可能沒有正確的答案。 – SamuelWarren 2010-06-24 04:44:32
沒有什麼讓人困惑的 - 只是試圖通過重選來複制確實來的調用,如果它取決於類型依賴性。就這樣。 在CLR中有幾個specilazed類,它們將代表「包裝」成Object-compat類非常有限 - 我只需要更多的常規變體。所以指向任何私有/內部類mucho讚賞以及:-) B方(Session.Execute)是一個巨大的lageacy包,仍然有A端加載的DLL(做MethodInfo.Invoke)之間的「客戶」。 – ZXX 2010-06-24 07:43:54