示例一:
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
namespace EventAndDelegate
{
class Program
{
static void Main(string[] args)
{
Server server = new Server();
//订阅成功启动的事件
server.Started += new Server.ServerEventHandler(server_Stopped);
//订阅成功停止的事件
server.Stopped += new Server.ServerEventHandler(server_Started);
//启动服务
server.Start();
Thread.Sleep(3000);
server.Stop();
}
static void server_Stopped(object sender, ServerEventArgs e)
{
Console.WriteLine("Server successfully stopped at: {0}", e.FireDateTime);
}
static void server_Started(object sender, ServerEventArgs e)
{
Console.WriteLine("Server successfully started at: {0}", e.FireDateTime);
}
}
//事件处理函数参数类
public class ServerEventArgs : System.EventArgs
{
public ServerEventArgs()
{
this.FireDateTime = DateTime.Now;
}
public ServerEventArgs(DateTime fireDateTime)
{
this.FireDateTime = fireDateTime;
}
private DateTime fireDateTime;
public DateTime FireDateTime
{
get
{
return fireDateTime;
}
set
{
fireDateTime = value;
}
}
}
public class Server
{
public delegate void ServerEventHandler(object sender, ServerEventArgs e);
public event ServerEventHandler Started;
public event ServerEventHandler Stopped;
protected virtual void DoStataed(object sender, ServerEventArgs e)
{
if (Started != null)
{
Started(sender,e);
}
}
protected virtual void DoStopped(object sender, ServerEventArgs e)
{
if (Stopped != null)
{
Stopped(sender,e);
}
}
/// <summary>
/// 执行服务器的启动操作
/// </summary>
public void Start()
{
//启动服务
DoStataed(this, new ServerEventArgs(DateTime.Now));
}
/// <summary>
/// 执行服务器的停止操作
/// </summary>
public void Stop()
{
//在此停止服务器
DoStopped(this,new ServerEventArgs(DateTime.Now));
}
}
}
示例二:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
public delegate string GetName();
class Program
{
static void Main(string[] args)
{
Heater heater = new Heater();
heater.BoilEvent += new Alarm().MakeAlert;//注册报警器事件
heater.BoilEvent += Display.ShowMsg;//注册显示水温事件
heater.BoilWater();//开始烧水
Console.ReadLine();
}
}
public class Heater
{
public delegate void BoilHandler(int param);
public event BoilHandler BoilEvent;
private int temperature;//水温
/// <summary>
/// 烧水
/// </summary>
public void BoilWater()
{
for (int i = 0; i < 100; i++)
{
temperature = i;
if (temperature <= 95)
Console.WriteLine("温度:{0}", temperature);
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);
}
}
}