看了波哥的博客,如醍醐灌顶,收获颇丰,照葫芦画瓢,自己写了一个Demo程序,帮助理解。
using System;
using System.IO;
public class DelegateTest
{
public delegate void PublishEventHandle();
/// <summary>
/// 发布者 ——老师
/// Publisher —— Teacher
/// </summary>
public class Teacher
{
//建立事件,EventHandler是系统内部定义的标准事件委托
public event PublishEventHandle OnOrder;
//public event EventHandler OnPublishEventHandle;
public void publishInfo()
{
//MemoryStream memory = new MemoryStream();
FileStream file = new FileStream(@"D:\test.txt", FileMode.Create);
StreamWriter writer = new StreamWriter(file);//实现对字符串的写入
writer.WriteLine("开始考试:" + DateTime.Now.ToLongTimeString());
writer.Close();
}
//事件触发,必须在方法中
public void issue()
{
if (OnOrder !=null)
{
OnOrder();
}
}
}
/// <summary>
/// 订阅者——小明
/// Subscriber ---XiaoMing
/// </summary>
public class XiaoMing
{
public static void testInfo()
{
//MemoryStream memory = new MemoryStream();
FileStream file = new FileStream(@"D:\test.txt", FileMode.Append, FileAccess.Write);
StreamWriter writer = new StreamWriter(file);//实现对字符串的写入
writer.WriteLine("小明开始考试:" + DateTime.Now.ToLongTimeString());
writer.Close();
}
}
/// <summary>
/// 订阅者——小王
/// Subscriber ---XiaoWang
/// </summary>
public class XiaoWang
{
public static void testInfo()
{
//MemoryStream memory = new MemoryStream();
FileStream file = new FileStream(@"D:\test.txt", FileMode.Append, FileAccess.Write);
StreamWriter writer = new StreamWriter(file);//实现对字符串的写入
writer.WriteLine("小王开始考试:" + DateTime.Now.ToLongTimeString());
writer.Close();
}
}
public static void Main()
{
Teacher MrLi = new Teacher();
MrLi.publishInfo();
MrLi.OnOrder += XiaoMing.testInfo;
MrLi.OnOrder += XiaoWang.testInfo;
MrLi.issue();
Console.ReadKey();
}
}
1.扩展知识
委托可以实现设计模式之观察者模式