假设我们声明一个类DerivedEventArgs
public class DerivedEventArgs : EventArgs { ... }然后,EventHandler委托可以接受具有以下签名的方法:
public static void Some_Method(object o, DerivedEventArgs e) { ... }但是,如果我们尝试订阅具有上述签名的方法到实现EventHandler委托的事件:
public event EventHandler MyEvent;,然后我们得到一个错误。为什么会这样呢?
萨克斯
发布于 2010-02-12 18:40:26
假设引发事件的代码指定了一个不是DerivedEventArgs的值--您希望它做什么?基本上你会失去类型的安全。
编辑注意,您可以反过来做-您可以订阅一个具有更特定参数类型的事件,使用一个参数类型较少的方法-因为该事件仍然保证它将以某种兼容的方式调用处理程序。下面是一个例子:
using System;
class Test
{
    public class DerivedEventArgs : EventArgs { }
    public EventHandler<DerivedEventArgs> SpecialistEvent;
    static void Main()
    {
        Test t = new Test();
        t.SpecialistEvent += GeneralHandler;
    }
    static void GeneralHandler(object sender, EventArgs e)
    {
    }
}发布于 2010-02-12 18:44:32
MyEvent(this, EventArgs.Empty)尝试将一个常规的EventArgs传递给DerivedEventArgs
Some_Method(object o, DerivedEventArgs e) 然后如果Some_Method试图做一个
e.PropertyInDerivedClass会失败的。
发布于 2010-02-12 18:46:26
尝试为您的事件使用EventHandler<T>,其中T是您的DerivedEventArgs类。
https://stackoverflow.com/questions/2254221
复制相似问题