委托与事件的关系
委托与事件的关系,可参照字段跟属性的关系来理解。
属性的一个功能就是设置字段,可以给字段设置权限。字段可以是值类型,也可以是引用类型,当然包括数组在内。那么委托呢?委托是把方法参数化,想要使用方法时直接使用就可以了(有时候要在不同的地方使用同一个方法,如果把方法的引用交给委托,要使用的时候直接让委托占位(委托去调用这个或这些方法),就方便多了)。
声明一个委托:public deletate void MyDelegate();
可以把委托当做一个容器(名片夹),里面装的是方法的引用(这里我们可以把方法理解为工具,而引用就相当于工具的一个名片来标示工具的位置),容器里可以装很多的名片夹(可以注册多个方法给委托),需要使用时,会按照名片的顺序来调用方法(多播委托)。
一个委托类型的变量可以引用一个或多个方法。
事件的本质就是对委托的封装,约束委托什么时候执行委托里面的方法(不然委托岂不是无法无天逍遥自在了),事实上事件也是对委托的一种安全保护,委托可以赋值,而事件是需要注册的。
委托可以赋值时因为委托本身装的就是方法的引用,引用本身就是一个“值”,裸露的值有可能被更改(如果委托被重新赋值,那么注册的方法的引用就都会被冲掉。+=是注册,而=是全部刷掉再赋新的值得引用),er事件只能注册,后续...........
《《当做笔记》》
原文:http://www.cnblogs.com/newking/p/4375077.html