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

前端之家收集整理的这篇文章主要介绍了c# – 私有EventHandler和私有事件EventHandler之间的区别?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
基本上标题是什么.
这两者之间有什么区别(我目前正在使用第一个)
private EventHandler _progressEvent;

和@H_301_6@

private event EventHandler _progressEvent;

我有一个方法@H_301_6@

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

doDownload方法调用@H_301_6@

_progressEvent(this,new EventArgs());

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

解决方法

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

通常,如果您使用的是EventHandler或EventHandler< T>,则表示您正在使用某个事件.调用者(用于处理进度)通常会订阅事件(不传递代理),如果您有订阅者,则会引发事件.@H_301_6@

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

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

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

// 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...

当你打电话给你的进度时,你会写:@H_301_6@

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

这个用户会把它写成:@H_301_6@

yourClass.ProgressChanged += myHandler;
yourClass.Download(url);
原文链接:https://www.f2er.com/csharp/91527.html

猜你在找的C#相关文章