事件是啥意思?

Posted

技术标签:

【中文标题】事件是啥意思?【英文标题】:What does it mean by Event?事件是什么意思? 【发布时间】:2010-07-05 13:39:49 【问题描述】:

我在 dotnet 中学习了引用任何函数的委托。

从概念上讲,事件是什么意思?有参考吗?它有一个中间层并在内部使用委托。但是,中间层是什么?

实际上,我们可以使用 event 做什么?或者我们为什么要使用它?

为什么事件没有返回类型?为什么默认是公开的?

【问题讨论】:

What is the difference between a delegate and events? 的可能重复项 【参考方案1】:

我认为事件是委托方法的集合。您可以根据需要为事件订阅任意数量的事件处理程序。

当您想在代码中公开某个人可以“注入”操作的点时,您可以创建一个事件。例如,假设您有一个负责处理订单的类。您可能希望公开一个名为“OrderProcessed”的事件,并且将来使用您的订单处理类的人可以“连接”到 OrderProcessed 事件以执行诸如发送确认电子邮件之类的操作。因为事件是委托类型,所以您可以指定订阅该事件的所有方法都期望接收包含您的“订单”类型的参数

例子:

public class OrderEventArgs : EventArgs

     public MyOrderClass Order  get; set; 
     public Boolean Processed  get; set; 

     public OrderEventArgs(MyOrderClass order, Boolean processed)
     
         Order = order;
         Processed = processed;
     

public class OrderProcessor

     public delegate void OrderEventHandler(Object sender, OrderEventArgs e);

     public event OrderEventHandler OrderProcessed;

     public void ProcessOrder(MyOrderClass order)
     
          //process the order...

          if(OrderProcessed != null)
               OrderProcessed(this,new OrderEventArgs(order,true));
     

【讨论】:

【参考方案2】:

事件就像一个函数集合,只要“事件”发生就会被调用。由于它通常是一劳永逸,因此不需要返回类型。

【讨论】:

我认为 OP 通过这个答案会更加混淆事件和代表。我同意这个答案是绝对正确的。 我没有写任何关于委托的内容(如果 OP 想知道,委托是某种将函数转换为对象的“函数容器”)。【参考方案3】:

在普通英语中,当您订阅一个事件时,您会在它发生时收到通知,以及零个或多个参数。

所以,object1 可能会说“嘿,当有人点击 btn1 时,我想做 delegate to function that pop up a MessageBox”

object2 可能会说“嘿,当有人点击 btn1 时,我想做 delegate to function that writes to a log”

当有人按下按钮时,每个订阅者都会被告知,并按照其代表所说的去做。

【讨论】:

【参考方案4】:

希望这会让你明白

http://www.akadia.com/services/dotnet_delegates_and_events.html

【讨论】:

以上是关于事件是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

当它说“无法处理事件”时是啥意思?

perf 缓存事件是啥意思?

[Violation] 向 Angular 4 项目中的滚动阻止“touchstart”事件添加非被动事件侦听器是啥意思?

code是啥鬼?

Google Firebase 事件原始数据中的“previous_timestamp_micros”键是啥意思

事件驱动机制是啥?