私有EventHandler和私有事件EventHandler之间的区别?

时间:2013-02-27 18:17:22

标签: c# .net events delegates event-handling

基本上标题是什么。 这两者之间有什么区别(我目前正在使用第一个)

private EventHandler _progressEvent;

private event EventHandler _progressEvent;

我有一个方法

void Download(string url, EventHandler progressEvent) {
    doDownload(url)
    this._progressEvent = progressEvent;
}

doDownload方法会调用

_progressEvent(this, new EventArgs());

到目前为止一切正常。但我觉得我做错了。

2 个答案:

答案 0 :(得分:8)

第一个定义委托,第二个定义一个事件。这两者是相关的,但它们的使用方式通常不同。

一般情况下,如果您使用EventHandlerEventHandler<T>,则表示您正在使用某个活动。调用者(用于处理进度)通常订阅到事件(不传递代理),如果您有订阅者,则会引发事件。

如果你想使用更实用的方法,并传入一个委托,我会选择一个更合适的委托来使用。在这种情况下,您实际上并未在EventArgs中提供任何信息,因此使用System.Action可能更合适。

话虽如此,从所显示的小代码开始,事件方法似乎更合适。有关使用事件的详细信息,请参阅C#编程指南中的Events

使用事件的代码可能类似于:

// This might make more sense as a delegate with progress information - ie: percent done?
public event EventHandler ProgressChanged;

public void Download(string url)
{ 
  // ... No delegate here...

当你致电进度时,你会写:

var handler = this.ProgressChanged;
if (handler != null)
    handler(this, EventArgs.Empty);

这个用户会把它写成:

yourClass.ProgressChanged += myHandler;
yourClass.Download(url);

答案 1 :(得分:1)

我不认为两者之间存在差异。

event关键字是一个访问修饰符,如private internal和protected。 它用于限制对多播委托的访问。

从最明显到最不可见,我们有

.table > tbody > tr > td{
    border: none;
}