C# · 12月 23, 2021

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

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

private event EventHandler _progressEvent;

我有一个方法

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

doDownload方法会调用

_progressEvent(this,new EventArgs());

到目前为止,它工作正常.但我觉得我做的事情非常糟糕.

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

通常,如果您使用的是EventHandler或EventHandler< 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);