静态事件static event

一般定义一个事件是这样的写法
public event EventHandler OneEvent;


但是如果这样定义的话就需要进行null判断了
EventHandler tempHandler=OneEvent;
if(tempHandler!=null)
{
tempHandler(sender,e);
}


于是很多人这样定义事件:
public event EventHandler OneEventNeverNull = (o, e) => { };
这样就不需要判断null了。


以上是实例事件,接下来看静态事件(static event)。
静态事件定义如下:
public static event EventHandler OneStaticEvent;


如果想要注册的话,必须要通过类。在.NET中,大多数是实例事件,也存在极少数的静态事件。


静态事件有如下特性:
1、静态事件没有发送的实例对象;
2、静态事件必须取消订阅,否则无法释放对象,可能会造成内存泄露。
(事实上,任何事件都应该取消订阅,有始有终,过程才完成)


对于静态事件没有发送的实例,可以这样理解:
1、静态事件不需要实例,它是代表类级别的事件。也就是可以不知道发出该事件的实例。
2、静态事件没有实例,或者说静态事件无法获得他的实例,所以使用静态事件。


通过以上的理解,我们可以知道什么时候可以使用静态实例:
1、从面向对象的角度,如果一个对象只获得事件的通知(只关心时间的发生),而不需要知道发送该事件的实例的情况下。
2、没有实例的类。比如,静态类,抽象类,或者说其他一些抽象的类。
在实际应用中,只有在不能获取实例的情况下才能选择使用静态事件。


关于静态类总结如下:
1、在无法获取实例的情况下,想要获知事件的通知,可以使用静态事件
2、不管通知的发送者是谁,只要考虑接收事件,可以使用静态事件
3、静态事件一定要取消订阅,否则会内存泄露
4、想要获得静态类的通知,使用静态事件
5、想要获取静态方法和属性的时候,可以使用静态事件


注:原文地址http://www.cnblogs.com/LoveJenny/archive/2013/01/30/2882383.html
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值