/*
* 委托与事件的区别与联系
* An event is nothing but an encapsulated delegate.
* 事件可以通知外部订阅此事件的类,委托也可以是实现;但是事件的触发必须由事件发布者来定义
*/
using System;
namespace test002
{
class Program
{
static void Main(string[] args)
{
Test t = new Test();
//委托
t.Devent += new deleEvent(handleEvent);
//event
t.aEvent += new deleEvent(handleEvent);
//外部直接调用invoke
t.Devent.Invoke();
//发布者触发事件
t.OnHappenning();
//内部触发
t.OnEvent();
Console.ReadLine();
}
public static void handleEvent()
{
Console.WriteLine("事件处理方法");
}
}
public delegate void deleEvent();
class Test
{
public deleEvent Devent; //当在这个delegate 类型前,使用关键字event时,这个delegate就转为一个event。
public event deleEvent aEvent; // a delegate becomes an event using the event keyword.
//触发事件,event触发只能由事件的发布者来定义,订阅事件的类不能直接调用事件的invoke方法
public void OnHappenning()
{
if (aEvent != null)//Check event is null or not before raising an event.
{
aEvent.Invoke();//触发
}
}
//委托触发
public void OnEvent()
{
if (Devent != null)
{
Devent.Invoke();
}
}
}
}