看了波哥的博客,如醍醐灌頂,收穫頗豐,照葫蘆畫瓢,自己寫了一個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.擴展知識
委託可以實現設計模式之觀察者模式