这里用字典可能使学生会看不懂
首先了解理解事件和委托
委托是把方法包装成一种变量
比如说有一个 public void M1(int i){} 方法
声明一种委托类型 public delegate void dA(int)
创建一个委托变量将方法保存一个方法 dA dA1 =new dA(M1)
这时,dA1就是一个类型为dA的变量,你在其他方法中需要再去使用.来写出完整的地址名,只需要传递这个变量就可以执行它所代表的方法了
调用委托 dA1()
事件其实就是一种委托的应用
事件的声明首先要有个委托类型,这里就用上面定义好的dA委托类型
声明一个事件类似声明一个委托变量,只不过加了event关键字 event dA dAE;
然后就是挂接方法 dAE+=m1 注意挂接不是调用方法,和委托一样,直接加上方法名就行了
最后就是执行事件 m1() 就跟委托调用一样
然后再是理解事件
事件是因为一种叫做事件模式而诞生的
有一个场景——手机没电了,自动执行亮度降低、关闭震动、关闭蓝牙、清理后台等等,这里就可以理解为手机没电了是一个事件,挂接了后面很多方法
那你这么一说,那不就和定义一个方法,然后再在方法里调用亮度降低这些方法一样吗
我一开始也是这么认为的,但其实不是的。如果使用的是方法调用,那么在方法体中就必须写进具体的方法调用,所有的后续的方法都需要写进去。
然而实际情况是,执行亮度降低是A同事写的,关闭震动是B同事写的,关闭蓝牙确实是我自己写的,清理后台还没写好,我必须把他们写的引入到我的程序中才能执行,但还有没写好的,我甚至都没法加进我自己的代码中。
所以得用事件,我把手机没电了事件给出来,所有和这个事件挂接的方法都会执行,哪个方法要接着在后面执行的,自己挂接就行了,至于没写好的,等他写完了自己再挂接就好
那这种就是一种事件模式,其实就是通知响应关系
这里定义了委托类型和enum类型,然后再定一个以enum为key,以委托为值得字典其是就是定义了一个委托数组,而在C#里,事件就是语法糖,本质还是委托
那定义一个委托数组就是因为我们要创建好几个委托,有用于显示文字的,有用于***的,等等
再不明白,就先依葫芦画瓢,跟着敲代码,迟早会明白的。