一般定义一个事件是这样的写法
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
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