示例一:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace DelegateHeater_1
{
public class Heater
{
private int temperature;
public string label = "A.O.Smith";
public string type ="JSP-100" ;
public delegate void BoiledEventHandler(Object sender, BoiledEventArgs e);
public event BoiledEventHandler Boiled;
//传递给观察者的参数对象
public class BoiledEventArgs : EventArgs
{
public readonly int temperature;
public BoiledEventArgs(int param)
{
this.temperature = param;
}
}
//如果有对象注册,调用所有注册对象的相关方法
public void OnBoiled(BoiledEventArgs e)
{
if (Boiled != null)
{
Boiled(this, e);
}
}
public void BoilWater()
{
for (int i = 0; i < 100; i++)
temperature = i;
if (temperature > 95)
{
BoiledEventArgs e = new BoiledEventArgs(temperature);
OnBoiled(e);
}
}
}
public class Alarm
{
public void MakeAlert(Object sender, Heater.BoiledEventArgs e)
{
Heater ht = (Heater)sender;
Console.WriteLine(ht.label);
Console.WriteLine(ht.type);
Console.WriteLine("警告:现在的温度是{0}。",e.temperature);
}
}
public class Display
{
public static void ShowMessage(Object sender, Heater.BoiledEventArgs e)
{
Heater ht = (Heater)sender;
Console.WriteLine(ht.label);
Console.WriteLine(ht.type);
Console.WriteLine("显示:现在的温度是{0}",e.temperature);
}
}
class Program
{
static void Main(string[] args)
{
Heater ht = new Heater();
ht.Boiled += (new Alarm()).MakeAlert;
ht.Boiled += Display.ShowMessage;
ht.BoilWater();
}
}
}
示例二:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace DelegateHeater_1
{
public class Heater
{
private int temperature;
public string label = "A.O.Smith";
public string type ="JSP-100" ;
public delegate void BoiledEventHandler(Object sender, BoiledEventArgs e);
public event BoiledEventHandler Boiled;
//传递给观察者的参数对象
public class BoiledEventArgs : EventArgs
{
public readonly int temperature;
public BoiledEventArgs(int param)
{
this.temperature = param;
}
}
//如果有对象注册,调用所有注册对象的相关方法
public void OnBoiled(BoiledEventArgs e)
{
if (Boiled != null)
{
Boiled(this, e);
}
}
public void BoilWater()
{
for (int i = 0; i < 100; i++)
temperature = i;
if (temperature > 95)
{
BoiledEventArgs e = new BoiledEventArgs(temperature);
OnBoiled(e);
}
}
}
public class Alarm
{
public void MakeAlert(Object sender, Heater.BoiledEventArgs e)
{
Heater ht = (Heater)sender;
Console.WriteLine(ht.label);
Console.WriteLine(ht.type);
Console.WriteLine("警告:现在的温度是{0}。",e.temperature);
}
}
public class Display
{
public static void ShowMessage(Object sender, Heater.BoiledEventArgs e)
{
Heater ht = (Heater)sender;
Console.WriteLine(ht.label);
Console.WriteLine(ht.type);
Console.WriteLine("显示:现在的温度是{0}",e.temperature);
}
}
class Program
{
static void Main(string[] args)
{
Heater ht = new Heater();
ht.Boiled += (new Alarm()).MakeAlert;
ht.Boiled += Display.ShowMessage;
ht.BoilWater();
}
}
}