//用一个开机关机的例子 来解释事件的本质 , 一个委托变量可以存放多个方法,就像一条锁链一样
namespace 开机关机
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("开机。。。");
Console.ReadKey();
CloseComputer cmp = new CloseComputer();
Console.WriteLine("打开qq");
Console.ReadKey();
//创建一个 closeqq的实例
Closeqq CQ = new Closeqq();
//此处调用cmp中的CloseApp 事件
cmp.CloseApp += CQ.Close;
Console.WriteLine("打开IE");
Console.ReadKey();
CloseIE CIE = new CloseIE();
cmp.CloseApp += CIE.Close;
Console.WriteLine("打开Word");
Console.ReadKey();
CloseWord CWD = new CloseWord();
cmp.CloseApp += CWD.Close;
cmp.ShutDown();
Console.ReadKey();
}
}
}
//单独创建一个类来 声明一个委托
namespace 开机关机
{
public delegate void DelegateClose();
}
//创建一个电脑类 用来执行 关机操作
namespace 开机关机
{
class CloseComputer
{
//定义一个事件
//经反编译 可知 事件内部 其实就是一个 私有的委托变量和 一个Remove方法 和 一个 Add 方法
public event DelegateClose CloseApp;
public void ShutDown()
{
if (CloseApp != null)
{
CloseApp();
}
Console.WriteLine("正在关机中");
}
}
}
//关闭IE浏览器的一个类
namespace 开机关机
{
class CloseIE
{
public void Close()
{
Console.WriteLine("关闭IE浏览器");
}
}
}
//关闭Word文档的一个类
namespace 开机关机
{
class CloseWord
{
public void Close()
{
Console.WriteLine("关word");
}
}
}
//关闭qq的一个类
namespace 开机关机
{
class Closeqq
{
public void Close()
{
Console.WriteLine("关QQ");
}
}
}
此示例 比较清楚的说明了 多播委托 :一个委托变量可以存放多个方法,就像一条锁链一样