我正在努力了解代表团所以我只是写了一个小试试项目; 我有D班:
class D
{
private static void Func1(Object o)
{
if (!(o is string)) return;
string s = o as string;
Console.WriteLine("Func1 going to sleep");
Thread.Sleep(1500);
Console.WriteLine("Func1: " + s);
}
}
主要使用:
MethodInfo inf = typeof(D).GetMethod("Func1", BindingFlags.NonPublic | BindingFlags.Static);
Delegate d = Delegate.CreateDelegate(typeof(D), inf);
方法信息获取正确的信息,但CreateDelegate方法抛出异常,例如,该类型必须从Delegate派生。
我该如何解决这个问题?
答案 0 :(得分:5)
如果要为Func1
方法创建委托,则需要指定要创建的委托的类型。在这种情况下,您可以使用Action<object>
:
MethodInfo inf = typeof(D).GetMethod("Func1", BindingFlags.NonPublic | BindingFlags.Static);
Delegate d = Delegate.CreateDelegate(typeof(Action<object>), inf);
答案 1 :(得分:0)
传递给CreateDelegate
方法的类型实际上不是类的类型,而是用于调用方法的函数的类型。因此,它将是委托类型,具有与原始方法相同的参数:
public delegate void MyDelegate(Object o);
...
MethodInfo inf = typeof(D).GetMethod("Func1", BindingFlags.NonPublic | BindingFlags.Static);
Delegate d = Delegate.CreateDelegate(typeof(MyDelegate), inf);