今天写一篇简单的文章,就是关于C#事件。
说简单,其实要理解也不容易。我记得我好些年都没真正搞明白事件和委托。所以,我想,尽管大家都知道事件和委托,但真正能搞明白的,可能还真不一定都能。
一、事件的表现
事件会出现在哪里,我们每个人都清楚的。以Winform为例,各种按钮点击,就是事件的一种。它的代码形式很简单、很熟悉:
比如上图,是一个窗体的初始化加载时发生的事件。
二、事件的声明
事件必须指定一个委托,以及事件参数。
委托都是基于EventHandler基类,事件参数都是基于EventArgs基类。
然后我们可以声明如下 :
public event EventHandler CookingEvent;
三、事件的属性访问器
通常,我们不需要使用事件的属性访问器,但是一些特殊情况下,我们可能会用到。它的作用是让别人可以订阅事件。事件的属性访问器,你可以把它当成普通的属性get和set来理解。
四、如何订阅或者取消事件
只需要简单使用(+=)或者(-=),即可订阅或者取消事件,代码类似如下:
Family family = new Family();
family.OnCooking += Family_OnCooking;
五、事件的使用限制
事件只能在当前声明的类中使用,所以,它的子类,也就是所有的继承类,都无法使用到它。这需要通过编码解决,具体如何解决,我后面会再写一篇文章说说。问题也就是子类中如何使用父类定义的事件?
它为什么会只能在声明的类中使用?原因其实是事件是一种特殊类型的委托。
六、接口能不能定义事件?
答案是可以的。
但会有另一个问题,我们知道,一个类,只能有一个父类,但是它却可以有N个接口。如果这个N个接口,都定义了事件,而且这些接口中的事件名称都完全一样,那么要怎么办呢?
这个问题后面再写文章说吧。
本文就只说接口中可以定义事件吧。
祝您用餐愉快。