为啥我们需要回调事件?
Posted
技术标签:
【中文标题】为啥我们需要回调事件?【英文标题】:Why we need events for callback?为什么我们需要回调事件? 【发布时间】:2010-08-17 18:00:45 【问题描述】:我们可以使用委托调用回调方法。 例如,
公共委托 bool ContinueProcessing();
// 后面我们可以写代码,
ContinueProcessing cp = new ContinueProcessing(IsDataAvailable);
cp += new ContinueProcessing(IsTransactionComplete);
//稍后在方法的代码定义中
bool IsDataAvailable() 返回真;
bool IsTransactionComplete() 返回真;
cp.Invoke() ;
上面的调用会依次调用两个布尔方法。 为什么我们需要“事件”? “事件”的目的是什么?
【问题讨论】:
【参考方案1】:事件是回调,您可以在其中拥有多个互不干扰且不能互相调用的订阅者。
委托提供“这是我要采取的行动”的封装,事件提供对发布/订阅模型的封装。
更多信息请查看我的article on events。
【讨论】:
【参考方案2】:代表非常通用。它们可以在任何上下文中使用:在同一个类中、类之间、静态方法中等等。
事件更具体——它们专门设计用于一个类订阅另一个类引发的事件。
Delegate 是一种(某种)类型安全的指向函数的指针,而 event 是委托的包装器,它提供了订阅/取消订阅/引发事件的标准接口。
【讨论】:
事件仅在委托周围添加“添加”和“删除”方法。我们可以在不提及“事件”的情况下实现一切。为什么说代表更通用? 代表更通用,因为它们可以用于更广泛的场景选择。你可以用委托做很多事情,包括实现事件,但是用事件你只能做一件事:事件。【参考方案3】:看起来'event'关键字是委托声明的修饰符,允许它包含在接口中,限制它从声明它的类中调用,为它提供一对可定制的访问器(添加和删除)并强制委托的签名(在 .NET 框架中使用时)。
【讨论】:
以上是关于为啥我们需要回调事件?的主要内容,如果未能解决你的问题,请参考以下文章