c艹事件
委托与事件
委托
实际上用类完成了函数指针的功能
使用步骤
声明
1 | delegate void Print(int x) //只能在namespace和类下 |
初始化,赋值
1 | Print someFunc = hello; |
调用委托变量
1 | someFunc(30); |
例子
1 | public delegate void PrintInt(int x) |
多播委托
多播委托将多个函数对象分配到一个委托示例
委托的分配动作是通过 += 、-= 完成的(可以用=。 事件不能用=)
事件
事件是一种特殊的委托
组成
事件拥有者,事件成员,事件相应者,事件处理器,事件订阅
主流理解是将代码分为两个部分:事件发布者(广播者)和事件订阅者(订阅者)
简称SB模式
最大的好处是不能赋值。
实现思路
- 在类中定义私有化委托
- 暴露出-=、+=的方法
1 | public delegate void FuncHandler(int item); |
事件的标准写法
命名事件的委托必须以EventHandler结尾
触发函数必须以On开头,且必须是虚函数
订阅者(+=、-=)函数的类型符合EventHandler委托类型
接收两个参数(object arg1, SomeEventArgs arg2)
arg1 表示广播者
arg2 参数为EventArgs的子类 表示传播信息
例子
1 | public delegate void MyDelegate(string str); |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Pocon's Blog!