日期:2014-05-18 浏览次数:20975 次
在前面代理对象初始化中提到过Method Group特性,C#编译器能将method group隐式转换成其兼容的代理对象。例如:
Feedback fbInstance = FeedbackToFile;
void MyMethod() void MyMethod(object sender, EventArgs e)
ThreadStart x = MyMethod; EventHandler y = MyMethod;
同样,你也不能将method group隐式转换成System.Delegate类型的对象,因为编译器不知道用哪种子代理类型去创建代理对象。解决的办法是通过显式类型转换。
Delegate invalid = SomeMethod; Delegate valid = (ThreadStart)SomeMethod;
static void SimpleInvoke(Control control,
MethodInvoker invoker)
{
control.Invoke(invoker);
}
...
SimpleInvoke(form, UpdateUI);
form.Invoke((MethodInvoker)UpdateUI);
MethodInvoker invoker = UpdateUI;
form.Invoke(invoker);