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();
}