gpt4 book ai didi

c# - 私有(private)EventHandler和私有(private)事件EventHandler的区别?

转载 作者:太空狗 更新时间:2023-10-29 21:18:12 27 4
gpt4 key购买 nike

基本上就是标题所说的。这两者有什么区别(我目前使用的是第一个)

private EventHandler _progressEvent;

private event EventHandler _progressEvent;

我有一个方法

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

doDownload 方法将调用

_progressEvent(this, new EventArgs());

到目前为止,一切正常。但我觉得我做的事情非常错误。

最佳答案

第一个定义委托(delegate),第二个定义事件。这两者是相关的,但它们的用法通常有很大不同。

一般来说,如果您使用 EventHandlerEventHandler<T> ,这表明您正在使用一个事件。调用方(用于处理进度)通常会订阅事件(不传递委托(delegate)),如果您有订阅者,您会引发事件。

如果你想使用更函数式的方法,并传入一个委托(delegate),我会选择一个更合适的委托(delegate)来使用。在这种情况下,您实际上并没有在 EventArgs 中提供任何信息。 , 所以也许只使用 System.Action会更合适。

话虽如此,从显示的少量代码来看,事件方法在这里似乎更合适。有关使用事件的详细信息,请参阅 Events在 C# 编程指南中。

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

// 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);

关于c# - 私有(private)EventHandler和私有(private)事件EventHandler的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15119323/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com