【转载】事件Event从原理到应用

[软谋.net] Eleven 2018/10/21 21:06:25

【多播委托】

  +=  表示给委托的实例添加更多的方法,会按顺序摆成方法链,Invoke时 会按顺序执行

  -=  表示给委托的实例移除方法,从方法链的尾部开始匹配,遇到第一个完全吻合的,移除且只移除一个,没有匹配也不异常!

注意1 不同的实例的实例方法是不同的,所以不能移除

    2 lambda编译时会分配一个名称,不同的lambda就有一定是不同的方法,所以lambda的注册是无法移除的。

【思考】多播委托有什么价值呢?可以把多个方法放到一个容器,invoke时按顺序执行多个方法!



【事件event

 工作中有很多类似场景,某件事儿发生后,会触发一系列的后续动作,但是又不想耦合,怎么办?用委托作为容器来保存多个动作,然后再一一的按顺序触发调用!

  public Action CatMiaoHandler;

  public event Action CatMiaoHandlerEvent;

  委托的实例加上event关键字,也可以做到相同的效果,这就是事件。添加event关键字能保证实例的安全,避免赋值/invoke这种操作,只允许当前类调用,即使子类也不能调用!

  事件与委托的区别与联系?委托是一个类型,比如Student类,而事件是是委托类型的实例,比如学生:陌生人/抬头看/麦克,这就是二者的核心区别与联系!




看完本文有收获?请转发分享给更多人

关注「.net学院」,提升.Net技能 






原文地址: https://www.opengps.cn/Blog/View.aspx?id=192 文章的更新编辑依此链接为准。欢迎关注源站原创文章!

评论

暂无评论!

发表评论:

用于接收作者回复信息
点击更换验证码 - openGPS提示