最近在学习C#,看到了event关键字,刚开始很疑惑,感觉event可有可无,后来经过试验,发现event还是有比较重要的作用的。
1.声明了event之后,事件在类外只能用 +=,-=来修改,不能用 = 赋值,而委托没有这个限制
2.声明了event之后,事件不能在类外直接调用,而委托可以
举个例子:
class Program
{
class Test
{
public Action _myDelegate; //声明了一个委托
public event Action _myEvent; //声明了一个事件
public Test()
{
//在类内,事件和委托都是可以直接用 “=” 赋值的
_myDelegate= Print;
_myEvent= Print;
//在类内,委托和事件都是可以调用的
_myDelegate();
_myEvent();
}
public void Print()
{
}
}
static void Main(string[] args)
{
Test test = new Test();
test._myDelegate(); //委托可以直接调用
test._myEvent(); //这句编译会报错,事件不能直接在类外调用;
test._myDelegate= null; //委托可以在类外直接赋值
test._myEvent= null; //这句编译会报错,事件不能在类外直接赋值,只能通过 "+= ,-="来修改
}
}
事实上,加了event就是限制了delegate的访问,其余用法都是相同的。