C#用户可能会发现,event关键字有时候可有可无。
namespace ConsoleApplication3
{
class Program
{
static void Main(string[] args)
{
MyClass1 obj = new MyClass1();
obj.AEvent += new EventHandler(MyEventHandler);
//obj.AEvent();
obj.FireEvent();
obj.AEvent -= new EventHandler(MyEventHandler);
obj.FireEvent();
}
public static int MyEventHandler()
{
Console.WriteLine("Event");
return 0;
}
}
public delegate int EventHandler();
class MyClass1
{
public /*event*/ EventHandler AEvent;
public void FireEvent()
{
if (AEvent != null)
{
AEvent();
}
}
}
}
如上源码,event关键字有无的效果一样。那么event关键字的作用到底是什么呢?就是那句obj.AEvent()。如果使用了关键字event,那么这句在编译时将报错,而如果没有使用关键字event,则编译正常。event关键字,限定了外界对委托变量只能使用+=或-=操作符,对于其他的比如赋值或者调用都会被视为错误。另外,据说event关键字限定的委托最好是返回值为void的类型,当然这只是推荐,没有强制。