首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >EventHandler委托接受具有以下签名的方法,但实现EventHandler的事件不接受

EventHandler委托接受具有以下签名的方法,但实现EventHandler的事件不接受
EN

Stack Overflow用户
提问于 2010-02-12 18:37:49
回答 4查看 341关注 0票数 0

假设我们声明一个类DerivedEventArgs

代码语言:javascript
运行
复制
public class DerivedEventArgs : EventArgs { ... }

然后,EventHandler委托可以接受具有以下签名的方法:

代码语言:javascript
运行
复制
public static void Some_Method(object o, DerivedEventArgs e) { ... }

但是,如果我们尝试订阅具有上述签名的方法到实现EventHandler委托的事件:

代码语言:javascript
运行
复制
public event EventHandler MyEvent;

,然后我们得到一个错误。为什么会这样呢?

萨克斯

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-02-12 18:40:26

假设引发事件的代码指定了一个不是DerivedEventArgs的值--您希望它做什么?基本上你会失去类型的安全。

编辑注意,您可以反过来做-您可以订阅一个具有更特定参数类型的事件,使用一个参数类型较少的方法-因为该事件仍然保证它将以某种兼容的方式调用处理程序。下面是一个例子:

代码语言:javascript
运行
复制
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)
    {
    }
}
票数 2
EN

Stack Overflow用户

发布于 2010-02-12 18:44:32

代码语言:javascript
运行
复制
MyEvent(this, EventArgs.Empty)

尝试将一个常规的EventArgs传递给DerivedEventArgs

代码语言:javascript
运行
复制
Some_Method(object o, DerivedEventArgs e) 

然后如果Some_Method试图做一个

代码语言:javascript
运行
复制
e.PropertyInDerivedClass

会失败的。

票数 2
EN

Stack Overflow用户

发布于 2010-02-12 18:46:26

尝试为您的事件使用EventHandler<T>,其中T是您的DerivedEventArgs类。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2254221

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档