本文用事件模擬一個熱水器燒水的過程,差不多是這樣的:
熱水器開始對水加熱,當水加熱到95度以上的時候,熱水器的報警器開始報警,並且在屏幕上顯示當前的水溫。
不難從上面的這一小段話看到,要想模擬該程序,需要一個熱水器對象Heater,報警器對象Alarm,顯示器對象Display。
下面邊上代碼邊解釋吧。
/// <summary>
/// 熱水器類,用來燒水的
/// </summary>
class Heater
{
private int temperature; //水溫
public delegate void BoilEventHandler(object sender, BoilEventArgs e);
public event BoilEventHandler boil; //自定義事件
public void OnBoil(BoilEventArgs e) //水溫達到一定溫度後開始執行事件
{
if (boil != null)
boil(this, e);
}
public void BoilWater() //水從0度開始燒,當達到95度的時候開始報警
{
for (int i = 0; i <100; i++)
{
temperature = i;
if (temperature >= 95)
{
BoilEventArgs e = new BoilEventArgs(temperature);
OnBoil(e);
}
}
}
}
/// <summary>
/// 自定義事件參數,此類必須繼承EventArgs類
/// </summary>
class BoilEventArgs:EventArgs
{
public readonly int temperature; //水溫
public BoilEventArgs(int temperature)
{
this.temperature = temperature;
}
}
/// <summary>
/// 警報器類,當水溫達到一定程度時,發出聲響提示用戶水已開
/// </summary>
class Alarm
{
public void MakeAlarm(object sender, BoilEventArgs e)
{
Console.WriteLine(string.Format("警報:嘟嘟,水溫{0}度", e.temperature.ToString()));
}
}
/// <summary>
/// 顯示器類,當水溫達到一定程度時,在屏幕上顯示當前溫度給用戶看
/// </summary>
class Display
{
public static void ShowMessage(object sender,BoilEventArgs e)
{
Console.WriteLine(string.Format("屏幕顯示:當前溫度{0}度",e.temperature.ToString()));
}
}
class Program
{
static void Main(string[] args)
{
Heater heater = new Heater();
Alarm alarm = new Alarm();
heater.boil += alarm.MakeAlarm;
heater.boil += Display.ShowMessage;
heater.BoilWater();
Console.ReadLine();
}
}
輸出結果: