我有一些方法的DLL。我在运行时加载它,我想创建委托给位于DLL中的方法。
DLL:
public static Point Play(int[,] foo, int bar, int baz) { ... }
// ...
我想创建Play方法的委托。 DLL中可能有更多方法。
代码:
private delegate Point PlayDel(int[,] foo, int bar, int baz);
// ...
Assembly ass = Assembly.LoadFile(pathToMyDLL);
PlayDel dgt = // ???
答案 0 :(得分:1)
您需要先找到包含该方法的类型,然后使用Delegate.CreateDelegate
:
Type type = ass.GetType("NameOfTypeContainingMethod");
PlayDel del = (PlayDel) Delegate.CreateDelegate(typeof(PlayDel), type, "Play");
或者,您可以获取MethodInfo
并从中创建委托:
Type type = ass.GetType("NameOfTypeContainingMethod");
MethodInfo method = type.GetMethod("Play");
PlayDel del = (PlayDel) Delegate.CreateDelegate(typeof(PlayDel), method);
如果有多个名为Play
的方法,您可能需要先调用GetMethods()
并找到正确的方法(例如按参数类型)。