C# 委托和事件的区别
主要区别:1.事件在类外绑定事件只能用“+=”(“-=”解绑),不能使用‘=’绑定;如果在类内部绑定事件可以用‘=’;
2.委托在类内类外都可以用"+="、"-="、"=";
3.事件的调用(执行)只能在类内调用;委托(公有)在类内类外都可以调用
例子:
class A
{
public delegate void FunHandleEvent();
public FunHandleEvent funHandleEvent;
public event FunHandleEvent FunEvent;
public A() {
//通过事件绑定方法
FunEvent = FunA;
}
//调用事件
public void Fun()
{
if (FunEvent != null)
{
FunEvent();
}
}
private void FunA()
{
Console.WriteLine("FUNA");
}
}
class B
{
public B() { }
public B(A a)
{
//A类外绑定方法
a.FunEvent += FunB;
}
private void FunB()
{
Console.WriteLine("FUNB");
}
public void FunC()
{
Console.WriteLine("FUNC");
}
}
main:
static void Main(string[] args)
{
A a = new A();
B b = new B(a);
//事件只能在类内部调用,而委托可以在类外调用
//事件在类外部绑用+= -=,不能用=,在内部可以用=;
a.FunEvent += b.FunC;
a.Fun();//通过方法间接调用事件
a.funHandleEvent = b.FunC;//通过委托绑定方法
a.funHandleEvent();//直接调用委托
Console.ReadKey();
}