源代码:
(1)调用方 InvokeClass.cs
/***
*委托的调用方(包括定义委托)
*
* 分四个步骤:
* 1.定义委托
* 2.声明委托 (声明委托的实例)
* 3.注册
* 4.调用
*
* 注意:先注册,后调用
*
*
*
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace chapter20委托与事件案列回顾
{
//定义委托,委托定义以Handler结尾,微软的定义方式,委托也相当于一个类,定义在类的外面
public delegate void InformInfoHandler(string name);
public class InvokeClass
{
//声明事件,事件是委托的一个实例
public static event InformInfoHandler eveInfo;
/// <summary>
/// 方法调用,即触发事件
/// </summary>
public void DisplayInfo()
{
if (eveInfo != null) //说明委托已经注册方法了
{
//eveInfo("我是前台小张");
eveInfo.Invoke("我是前台小张");
}
}
}
}
(2)注册方 Register.cs
/***
*注册方:方法注册
*
*
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace chapter20委托与事件案列回顾
{
public class RegisterClass
{
public RegisterClass()
{
//可以注册实例方法
InvokeClass.eveInfo += InformZhangsan;
InvokeClass.eveInfo += InformLisi;
//也可以注册静态方法
InvokeClass.eveInfo += InformWangwu;
}
public void InformZhangsan(string name)
{
Console.WriteLine("{0},张三, 注意, 老板来了", name);
}
public void InformLisi(string name)
{
Console.WriteLine("{0},李四, 注意, 老板来了", name);
}
public static void InformWangwu(string name)
{
Console.WriteLine("{0},王五, 注意, 老板来了", name);
}
}
}
(3)测试 Program.cs
/***
*测试
*
*
*
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace chapter20委托与事件案列回顾
{
class Program
{
static void Main(string[] args)
{
//运行事件的注册
new RegisterClass();
//运行调用方
InvokeClass obj = new InvokeClass();
obj.DisplayInfo();
}
}
}