码迷,mamicode.com
首页 > Windows程序 > 详细

c#进阶之Delegate

时间:2017-05-16 20:08:53      阅读:316      评论:0      收藏:0      [点我收藏+]

标签:观察者   异常   system   观察者模式   修改   cas   sys   继承   ica   

委托是什么?答:委托是一种类型   等同与 一个class类,继承System.MulticastDelegate,但mult....gate是一个特殊类,不能够派生

委托的调用,如何去使用

1/委托名.Invoke();

2/委托名();

3/委托名.BeginInvoke(null,null);

3.调用的方法与委托的参数签名一致

 

为什么需要委托,为什么会有委托?

答:1.例如 需要造一个车,其他的都一样,只是发动机不同,那么发送机很复杂,那么我们可以将发送机外包出去,我们只需要调用创造发动机的方法就可以了,这里就可以用委托

 2.可以解耦

看一下下图,那么通过+=是怎么执行的?-=是怎么执行的?

技术分享

    1.+=是一个一个按照顺序执行

    2.-=是从后往前进行匹配,找到第一个吻合的就移除,且只移除一个,找不到也不会异常。若是匿名方法,那么通过-=也不会被删除

        同样的,若是写成 new Stuent().Study;那么通过-=也不会被删除。

    3.有一个限制:如用-=,那么必须保证 是用一个实例同一个方法。

什么是多播委托?

1.第一种:通过遍历.(可以把beginInvoke修改为invoke也可以)

技术分享

2.+=,-=都算是多播委托

 

委托主要用于观察者模式?

答:是的。

 事件是一种委托么?

答:是的。

如何定义一个事件?

技术分享

 

 如何使用事件?

答:因为是委托,所以和原来一样去使用和调用。

委托和事件的区别是什么?有什么联系?

1、事件是一个委托的实例,委托是一种类型

2、事件,控制了实例的使用权限,更加安全。

 

为什么要用事件?事件有什么用呢?

从第一幅图可以看到 在外部(另一类文件)事件可以Invoke()以及赋值。但是事件是不被允许的。

从第二幅图可以看到 在内部(同一类文件)事件可以Invoke()以及赋值,当然委托也是可以允许的。

第一幅图:

技术分享

第二幅图:

技术分享

 

c#进阶之Delegate

标签:观察者   异常   system   观察者模式   修改   cas   sys   继承   ica   

原文地址:http://www.cnblogs.com/zmztya/p/6863131.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!