c# - 引发事件似乎已经改变

标签 c# .net events .net-4.5

在以前的 .NET 版本中(我认为是 3),我使用类似这样的东西来引发带有自定义 EventArgs 的事件

public delegate void NewTitleEventArgs(object sender, string title);
public event NewTitleEventArgs NewTitle;

public class NewTitleEventArgs : EventArgs //Class used to pass data to event consumers when sending notification.
{
    public readonly string NewTitle;
    public NewTitleEventArgs(string Title)
    {
        NewTitle = Title;
    }
} 

不过,现在看来我只需要这样做:

public delegate void NewTitleEventArgs(object sender, string title);
public event NewTitleEventArgs NewTitle;

并完全忽略类。这是标准还是新事物?

最佳答案

我想我知道你在说什么,是的,有变化。在 .NET 4.0和更早的 EventHandler<TEventArgs> 的定义是

public delegate void EventHandler<TEventArgs>(
    Object sender,
    TEventArgs e
)
where TEventArgs : EventArgs

但是从 .NET 4.5 开始定义改为

public delegate void EventHandler<TEventArgs>(
    Object sender,
    TEventArgs e
)

唯一的区别是 TEventArgs不再需要从 EventArgs 继承所以现在可以做

public event EventHandler<string> NewTitle;

这会让订阅成员(member)成为

public void myObject_NewTitle(object sender, string title)
{
   //...
}

而不是有一些EventArgs包装器将您的标题作为唯一的成员。

关于c# - 引发事件似乎已经改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20671418/

相关文章:

c# - 如何为动态创建的文本框和 div 设置随机 id

c# - 为什么在使用 TestCaseSource 时 nUnit 测试会被忽略?

javascript - 当父 div 的位置为 :relative 时,pageY 计算错误

javascript - 如何在 monthView 上隐藏事件?

javascript - 在 asp.net 中动态添加行项目的最快方法(性能方面)?

c# - HttpWebRequest 无法通过代理连接?

c# - 使电子邮件标签成为超链接

c# - 以编程方式运行 T4 文本模板

c# - 字符串到DateTime异常

Angular2 - 参数 $event 隐式具有 'any' 类型