参考DLL中的方法创建委托

时间:2017-08-05 17:07:31

标签: c# dll delegates

我有一些方法的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 = // ???

1 个答案:

答案 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()并找到正确的方法(例如按参数类型)。