委托与事件

暴露对外的事件或者委托实例,如果没有订阅的方法,那么将为null

所以要这么写

采用事件而不是委托的好处是:如果采用委托实例,那么外界可以改变这个委托指向的方法。一句话就是破坏了封装性。而且严重的事情是,外界本来获得这个事件或者委托的实例是用来注册,但是一旦采用委托实例来做,那么没有办法阻止外界触发。。

用事件可以改变这个行为,在以前用委托的地方,在委托类型前面加个event修饰符,就可以了。

 

委托的GetInvocationList()方法可以获取每个注册的方法列表

 

如果我们要监控一个东西是不是发生了,一种就是不停的监控它的状态,当达到要求时,监控程序做事情。第二种就是,让被监控的对象告诉监控的程序,“我发生了”。事件就是这样一个东西,我们怎样通知监控的程序呢?被监控的对象提供一个板,每一个监控的东西打个钉子到这个板上。当发生了,我打下这个板,那么钉在上面的钉子都能感到震动。

这实际是一种异步操作。

现在如果这个板子上打了太多的钉子,然而有一些“钉子”执行的时间很长。那么后面钉子的执行只能等。那么我们最好采用异步的方式。下面是异步调用的框架。。凑合的看吧。。

解释一下代码:主方法基本上是注册事件和激活时间。最后一句是为了主线程不在begininvoke创建的线程执行完之前执行完。

采用BeginInvoke来调用,会创建一个新线程,立即返回,在新的线程里面执行。等执行完了,如何告诉我?和前面一样,我们不可能去监视,当然还是通过事件来完成,确实如此。当执行完了,会通过事件来告诉我们。C#定义了

begininvoke的第一个参数是这个类型的参数,调用结束了,将会调用这个方法来通知我们执行完了。第二个参数是传入的参数,隐藏在IAsyncResult的AsyncState中。

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值