假设我有一个记录错误的类(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”方法有什么优势?
答案 0 :(得分:0)
这是一种语法差异:你的方式是在C#2.0中引入的,MS的方式使用了C#的原始更详细的语法 - they are equivalent,但是:
...上面的语法是C#2.0中的新内容。它完全等同于C#1.0语法,其中必须使用new关键字显式创建封装委托: