事件
事件本质上是一个私有的委托,对于事件我们只可以添加、删除或调用事件处理程序。
事件基于委托,为委托提供了一种发布/订阅机制
事件是成员,必须声明在类或结构中。
- 发布者定义事件和触发事件的代码
- 订阅者注册在事件被触发触发时要调用的方法
- 当发布者触发事件时,所有列表中的事件处理程序都会被调用
代码:
class Program
{
//声明委托
public delegate void MyEventHandler(string name);
//事件的声明需要委托类型的名字
public static event MyEventHandler Elapsed;//发布者定义事件
/// <summary>
/// 发布者定义一个和委托具有相同参数和返回类型方法
/// </summary>
/// <param name="name"></param>
public static void HandlerA(string name)
{
Console.WriteLine("HandlerA 我的名字叫 {0}", name);
}
/// <summary>
/// 发布者定义一个和委托具有相同参数和返回类型方法
/// </summary>
/// <param name="name"></param>
public static void HandlerB(string name)
{
Console.WriteLine("HandlerB 我的名字叫 {0}", name);
}
static void Main(string[] args)
{
//订阅者注册在事件被触发触发时要调用的方法
Elapsed += HandlerA;//事件订阅,添加处理程序HandlerA
Elapsed += HandlerB;//事件订阅,添加处理程序HandlerB
//发布者触发事件
Elapsed("黑猫");//事件发布
Elapsed -= HandlerB;//取消订阅,移除处理程序HandlerB
Console.WriteLine("取消订阅:处理程序HandlerB");
//发布者触发事件
Elapsed("白猫");//事件发布
Console.ReadKey();
}
}
代码运行后的结果: