当我有以下示例代码时:
namespace Test {
public delegate void TestDelegate(object sender, MyEventArgs e);
public class A {
public event EventHandler<MyEventArgs> Handler;
public void Test(){
Handler += B.Observe;
}
}
}
public class B {
public void Observe(TestDelegate) {
// Do something
}
}
我得到了错误
“观察”没有重载匹配委托“ System.EventHandler”
但是,当我使用
Observer(object sender, MyEventArgs e){}
它工作正常。据我了解,可以在多个地方使用委托来定义方法签名,在这种情况下有什么问题?
委托定义签名:
public delegate void TestDelegate(object sender, MyEventArgs e);
public event TestDelegate MyEvent;
事件的处理程序必须具有与委托相同的签名:
MyEvent += MyEventHandler;
void X_Sample_MyEvent(object sender, MyEventArgs e)
{
...
}
您可以传递所需的Wathever类型:
public delegate void AnotherDelegate();
public delegate void TestDelegate(AnotherDelegate arg);
MyEvent += X_Sample_MyEvent;
void X_Sample_MyEvent(AnotherDelegate arg) { }
也许是这样的:
public delegate void TestDelegate(object sender, MyEventArgs e);
MyEvent += (sender, e) =>
{
Observe(MyEvent);
};
void Observe(TestDelegate arg)
{
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句