首页 > 代码库 > C# 事件委托

C# 事件委托

看到百度上有关事件委托的通俗易懂的讲解,觉得解释的不错,照搬过来以温习之用。

问题:c# 事件的含义究竟是什么(刚学习到委托的菜鸟提问)

在没有学习委托之前,觉得事件就是单击一个按钮、双击一个按钮等动作或者行为(事件是动作或行为)。
后来又觉得:单击一个按钮、双击一个按钮仅仅是动作(或行为),这些动作行为本身不是事件,但是这些动作行为却能触发相应的事件。
现在:学习了委托与事件之后,又知道事件只是委托的一个实例,它是类的成员。

请问:这三种对事件的理解哪种对啊?

我查阅相关资料:上面说:
事件有两种不同的含义:第一:表示发生了某个有趣的事情,第二:表示C#语言中已定义的一个对象。
还有人说:
从机制上讲,事件就是你干了什么,你点击了一个button,选择了一个下拉菜单,点击关闭按钮。那么这个时候程序该怎么反应呢?这就看你的事件(或者说动作)有谁关心和谁关联。
在实现上,c#是用委托做的,事件是一个特殊的委托。
 

回答:

楼主的疑问和我当初很像,你努力的想弄明白什么是委托,你也从侧面了解到委托很重要,但是你并不知道委托具体是用来干什么的所以你才疑惑。
考虑一个问题,假设有两个对象 A 和B,现在A想要知道B一个状态(B_Staus)的变化,它马上去执行一个动作(A_Action),用你现在的思路你该如何解决这个问题?
有三种思路,第一种,A设个定时器每隔一段时间就检测B的状态,但是这种方案缺陷太大,你要不停的检测B的状态,可能B一年才回变一次,那就太浪费了。而且即使这样实时性也不好,不能保证马上检测到变化。

第二种 是将 A自己传递给B,让B发生变化后调用A的函数,但是这样B就要对A产生依赖,假如又来个C也要监听,那你还要改动B的代码,很不便,而且B要知道所有A的信息,这也是一种潜在的隐患。

第三种,就是只将A需要执行的A_Action函数传递过去,B发生变化之后自动执行这个函数,那就需要有一种传递函数的方案,这就是委托。

委托去定义一个函数的签名,所谓签名就是这个这个函数接收什么参数,返回什么参数,分别都是什么类型的。然后B 产生一个这个委托的实例,这就是事件。A或者C将自己的方法绑定到这个事件上来,即可。

  摘自:

  https://zhidao.baidu.com/question/1573655955150837900.html?qbl=relate_question_1&word=eventhandler

C# 事件委托