日期:2014-05-18 浏览次数:20767 次
在前面代理对象初始化中提到过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);