为什么Microsoft在连接事件时使用新的EventHandler

时间:2013-05-30 07:22:13

标签: c# events event-handling eventargs

假设我有一个记录错误的类(ErrorLog)。每次向日志添加错误时,此类都会引发一个事件(ErrorLog.EventErrorAdded),以通知观察者将新错误添加到日志中。此事件包含一些数据(ErrorLog.EventErrorAddadArgs)。

另一个班级想要观察这些事件。构造函数订阅了ErrorLog.EventErrorAdded,以便调用OnEventErrorAdded方法(对象Sender,ErrorLog.EventErrorAddedArgs Args)。

我看到微软订阅该活动的方式与我将如何做的有所不同。这两种方法似乎都有效。我不明白微软方法的优势。谁做了?

代码类似于:

public class ErrorLog
{
    public class EventErrorAddadArgs: EventArgs
    {
        ...
    }

    public EventHandler<EventErrorAddadArgs> EventErrorAdded;
    etc.
}

public class MyObserver
{
    private ErrorLog myErrorLog = new ErrorLog();

    public MyObserver() 
    {
        // observe myErrorLog.EventErrorAdded,
        // make sure that OnEventErrorAdded is called

        // my method would be:
        myErrorLog.EventErrorAdded += OnEventErrorAdded;

        // Microsoft however prefers the following method:
        myErrorLog.EventErrorAdded += new System.EventHandler<ErrorLog.EventErrorAddadArgs>(this.OnEventErrorAdded);
    }

    private OnEventErrorAdded(object Sender, ErrorLog.EventErrorAddedArgs Args)
    {
        ...
    }

    etc.
}

两种方法在编译期间检查语法正确性。两种方法都有效。 所以我的问题是:在我提到委托函数的方法之上,“新的System.EventHandler”方法有什么优势?

1 个答案:

答案 0 :(得分:0)

这是一种语法差异:你的方式是在C#2.0中引入的,MS的方式使用了C#的原始更详细的语法 - they are equivalent,但是:

  

...上面的语法是C#2.0中的新内容。它完全等同于C#1.0语法,其中必须使用new关键字显式创建封装委托: