加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 04:26:52 所属栏目:百科 来源:网络整理
导读:基本上标题是什么. 这两者之间有什么区别(我目前正在使用第一个) private EventHandler _progressEvent; 和 private event EventHandler _progressEvent; 我有一个方法 void Download(string url,EventHandler progressEvent) { doDownload(url) this._progr
基本上标题是什么.
这两者之间有什么区别(我目前正在使用第一个)
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);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读