首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 委托與事件詳解(十一)

     編輯:關於C語言

事件流程:

  1. 警報器與顯示器向熱水器註冊關注其溫度
  2. 熱水器保留對它們的引用
  3. 燒水過程中溫度超過 95 度時,自動調用註冊方法

此即 GoF 定義的 Observer 設計模式:定義對象間一對多依賴,狀態改變時自動通知並更新依賴者,屬鬆耦合模式。

實作 Observer 模式:

using System;
namespace Delegate {
    public class Heater {
        private int temperature;
        public delegate void BoilHandler(int param);
        public event BoilHandler BoilEvent;
        public void BoilWater() {
            for (int i = 0; i <= 100; i++) {
                temperature = i;
                if (temperature > 95 && BoilEvent != null) {
                    BoilEvent(temperature);
                }
            }
        }
    }
    public class Alarm {
        public void MakeAlert(int param) {
            Console.WriteLine("Alarm:嘀嘀嘀,水已經 {0} 度了:", param);
        }
    }
    public class Display {
        public static void ShowMsg(int param) {
            Console.WriteLine("Display:水快燒開了,當前溫度:{0}度。", param);
        }
    }
    class Program {
        static void Main() {
            Heater heater = new Heater();
            Alarm alarm = new Alarm();
            heater.BoilEvent += alarm.MakeAlert;
            heater.BoilEvent += (new Alarm()).MakeAlert;
            heater.BoilEvent += Display.ShowMsg;
            heater.BoilWater();
        }
    }
}

此版本使用簡單 int 參數而非 EventArgs,展示委托/事件核心機制,為後續規範化版本鋪墊。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved