【发布时间】:2011-03-07 15:02:59
【问题描述】:
让我试着举一个小例子。
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);
无论应用什么技巧/演员,它都必须以真正的代表身份到达 Execute。实际代表可能有更复杂的签名等。
【问题讨论】:
-
请更详细地解释您为什么要做如此令人困惑的事情。可能有更好的方法。
-
不幸的是,使用代表进行类型转换的余地不大。我将不得不首先质疑整体架构。如果没有明确的推理,有些问题可能没有正确的答案。
-
它没有什么令人困惑的地方 - 只是试图通过 reclection 复制它在接受类型依赖时可能发出的确切调用。就这样。 CLR 中有一些特定的类将委托非常有限地“包装”到对象兼容类中——我只需要更通用的相同变体。所以指向任何私有/内部类的指针也很受欢迎:-) B 端(Session.Execute)是一个巨大的旧包,在 A 端加载的 dll 中仍然有“客户”(执行 MethodInfo.Invoke)。跨度>
标签: c# delegates anonymous-methods