程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#委托和事件詳解(11)

C#委托和事件詳解(11)

編輯:關於C語言

在本例中,事情發生的順序應該是這樣的:

1. 警報器和顯示器告訴熱水器,它對它的溫度比較感興趣(注冊)。

2. 熱水器知道後保留對警報器和顯示器的引用。

3. 熱水器進行燒水這一動作,當水溫超過95度時,通過對警報器和顯示器的引用,自動調用警報器的MakeAlert()方法、顯示器的ShowMsg()方法。

類似這樣的例子是很多的,GOF對它進行了抽象,稱為Observer設計模式:Observer設計模式是為了定義對象間的一種一對多的依賴關系,以便於當一個對象的狀態改變時,其他依賴於它的對象會被自動告知並更新。Observer模式是一種松耦合的設計模式。

實現范例的Observer設計模式

我們之前已經對委托和事件介紹很多了,現在寫代碼應該很容易了,現在在這裡直接給出代碼,並在注釋中加以說明。

using System;
using System.Collections.Generic;
using System.Text;
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) {
if (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(); //燒水,會自動調用注冊過對象的方法
}
}
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved