c#委托与事件
https://www.cnblogs.com/HiroMuraki/p/16343067.html
写的很完整,由浅入深。委托能看懂,链接中事件没看懂。
委托其实就是方法的代表,它用来表示了某个具体的方法。
定义委托:??
??方法的调用只需要知道方法签名,因此要代表方法,委托也只需要能表示方法签名即可。实际上,委托只需要匹配方法的返回类型和参数列表即可(因为方法名已经由委托类型的变量名所替代)。因此,一个简单的的委托定义如下:
delegate void MyDelegate(int n);
声明事件和声明委托字段的区别仅仅在于简单地添加了一个event关键字。但请记住这只是简化语法,其本质行为依然依赖于事件的完整声明语法以及其封装逻辑。
事件的使用和多播委托完全一致,唯一的区别在于在事件的声明类之外,只允许添加与移出特定委托。
当一个事件被触发时,它会在子元素和父元素之间传播。这种交流分为三个阶段。
(1)捕获阶段:从窗口对象到目标节点(从上层到下层)的传输称为“捕获阶段”,捕获阶段不会响应任何事件;
(2) 目标阶段:在目标节点上触发,称为“目标阶段”
(3) 冒泡阶段:将窗口对象从目标节点(从底层到顶层)导回,称为冒泡阶段。事件代理就是利用事件冒泡机制将内层需要响应的事件绑定到外层。
事件是一种特殊的委托,或者说是受限制的委托,是委托一种特殊应用,只能施加+=,-=操作符。二者本质上是一个东西