定义为方法签名的委托不是有效的替代项
本文关键字:有效 方法 定义 | 更新日期: 2023-09-27 18:33:22
>当我有以下示例代码时:
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)
{
}
方法Observer
的签名与方法 EventHandler
的签名不匹配。
(事件处理程序是系统命名空间下的 .NET 委托类型)
你可以这样做:
public event TestDelegate Handler;
而不是
public event EventHandler<MyEventArgs> Handler; //Notice the type of Handler. Its of type EventHandler defined under System namespace.