C# 请问 委托 和 事件 到底有什么区别?

2024-11-27 19:38:09
推荐回答(6个)
回答1:

事件是类在发生其被关注的事情时用来提供通知的一种方式。 
使用事件,对象A可以将关于事件或已发生变化的信息通知其他对象B。 
引发事件的对象称为事件发送方源。 
捕获事件并对其作出响应的对象叫做事件接收方。
在事件通信中,发送方不知道哪个对象或方法将接收【处理】它引发的事件。故需要在发送方和接收方之间存在一个媒介【或类似 指针的机制】。.NET Framework 定义了一个特殊的类型 (Delegate),该类型提供函数指针的功能。 
事件使用委托来为触发时将调用的方法提供类型安全的封装。

这段话是我珍藏的,比较抽象。
为什么不能直接用委托代替事件?我个人觉得,在事件通讯这个模式下,这是规定好的:事件+=委托(方法)。如果按您的想法,直接委托+方法,那么接收方如何知道你到底干了什么事情,是双击了button,还是单击了一下窗体,又或者干了其他事情。首先没有方法知道,那么接收方调用哪个委托(方法)呢?
您好好看看刚开始的那段话,应该会有很大帮助。

回答2:

委托是事件的基础,事件在一个方法内部,委托在外部定义,在内部运用,所以说,委托是事件的基础。一个委托可以定义多个事件。

回答3:

事件就是一个狭义的委托,也就是事件是一个用于事件驱动模型的专用委托.

通俗的讲,委托你可以在客户代码中直接调用委托来激发委托指向的函数,而事件不可以,事件的触发只能由服务代码自己触发

也就是说在你的代码里委托你不但可以安排谁是它的调用函数,还可以直接调用它,而事件不能直接调用,只能通过某些操作触发

你可以理解事件就是一个或多个委托,此话应该有误的吧,事件可以有多个事件处理函数,委托同样也可以是个多播委托

回答4:

事件就是一种特殊的委托。委托是一种安全的类似与函数指针,但是她比指针要安全的多,它可以把方法作为一个参数传递给另一个方法,可以理解为指向函数的引用。事件是一种消息机制,它是一种委托,委托不带方法体。

回答5:

最 简单的解释就是:事件是由系统来给你管理什么时候要执行某个函数。而委托是由人来操作什么时候执行某个函数的。一个是自动的,一个是人为的。

回答6:

你可以在代码中直接调用委托来激发委托指向的函数,而事件不可以,事件的触发只能由服务代码自己触发.