C# 委託事件 -- 通俗入門

看了波哥的博客,如醍醐灌頂,收穫頗豐,照葫蘆畫瓢,自己寫了一個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.擴展知識

委託可以實現設計模式之觀察者模式

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章