基本上标题是什么。 这两者之间有什么区别(我目前正在使用第一个)
private EventHandler _progressEvent;
和
private event EventHandler _progressEvent;
我有一个方法
void Download(string url, EventHandler progressEvent) {
doDownload(url)
this._progressEvent = progressEvent;
}
doDownload方法会调用
_progressEvent(this, new EventArgs());
到目前为止一切正常。但我觉得我做错了。
答案 0 :(得分:8)
第一个定义委托,第二个定义一个事件。这两者是相关的,但它们的使用方式通常不同。
一般情况下,如果您使用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);
答案 1 :(得分:1)
我不认为两者之间存在差异。
event关键字是一个访问修饰符,如private internal和protected。 它用于限制对多播委托的访问。
从最明显到最不可见,我们有
.table > tbody > tr > td{
border: none;
}