0

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

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

我发现 Microsoft 订阅该事件的方式与我的订阅方式之间存在差异。这两种方法似乎都有效。我不明白微软方法的优势。有谁会?

代码将类似于:

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”方法有什么优势?

4

1 回答 1

0

这是语法上的区别:您的方式是在 C# 2.0 中引入的,而 MS 使用 C# 的原始更冗长的语法的方式 -它们是等效的,但是:

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

于 2013-05-30T07:29:39.993 回答