之前,老师给我们讲委托、事件的时候,听的云里雾里,概念一直很模糊。在工作中,也一直没有运用,更觉得是“雾里看花,水中望月”。
今天,认真的研究了园子里某兄台的关于委托和事件的文章后,总算是了解了委托和事件是怎么一回事了!不明白的,可以去看看,写的不错赞一个。现在趁着还没忘,先把笔记写下来。
委托本质是一个类,它包含一对有用的字段,一个存放该对象的引用,另一个存放方法的指针。当使用“-=”给委托注册方法的时候,该委托就指向了这个方法
的首地址。当给委托赋值null的时候,就清除了原先方法的指向,指向了null。
注册委托有两种方法:
第一种:直接将方法赋值[=]或者用“+=” 给一个委托==>委托名 =[+=] 方法名;
第二种:委托本质也是一个类,只是一个特殊的类,所以我们也可以实例化一个委托对象通过委托构造函数来注册委托==》委托名 对象名= new 委托名(方法名)。
事件的本质就是一个委托,它的内部仍然是用一个委托。通过add,remove方法来实现委托的注册和删除。代码中我们通过使用“+=”或“-=”来注册和删除。
委托事件,一般是在什么场景下使用呢?(希望园友们给些意见。下面的是在百度上揭下来的,仅作参考。)
委托的用法很多:一般是用于声明事件和回调的委托,还可以是用于代表方法标签的委托。
1)有了委托你就可以把方法看作像常数一样,而委托就是该常数类型的变量。从这个角度看来用于声明事件的委托就是声明这个事件触发以后所调用的方法的标签或者特征。只有符合该标签(参数个数和参数类型)的方法才可以做为该用于该事件的回调。一个事件触发了,你可能需要用多个方法处理该事件或者说该事件调用了多个方法(每个事件的实例都有一个需要调用的方法列表,当事件触发它会逐个调用列表中的每个方法)
2)通过使用委托你可以实现对方法变化的封装。打个比方:如果你骑自行车,你需要有骑自行车的方法DriveBike()。如果你骑摩托车你需要有骑摩托车的方法。现在你有一个方法DriveMoto。现在你需要定义一个方法,实现你骑(自行车或者摩托车)到某地DriveTo(地点,骑的方式)
骑的方式这里其实就是委托。在使用的时候,如果你是骑自行车你就用DriveBike实例化委托的实例带入DriveTo方法,如果你骑摩托车你就用DriveMoto实例化"骑的方式"这个委托带入DriveTo方法。
浙公网安备 33010602011771号