C#中委托和事件的例子比较多,讲得好的非常好,就不瞎凑热闹了,推荐博客园大牛的一篇:
C# 中的委托和事件 ,如果你已经有了相应的基础,但没写过相关的例子,那我这里提供一个,首先看一下规范
.Net Framework的编码规范:
- 委托类型的名称都应该以EventHandler结束。
- 委托的原型定义:有一个void返回值,并接受两个输入参数:一个Object 类型,一个 EventArgs类型(或继承自EventArgs)。
- 事件的命名为 委托去掉 EventHandler之后剩余的部分。
- 继承自EventArgs的类型应该以EventArgs结尾。 然后描述一下流程:
老板监视时间变动(ComputerOffWorkTime方法),当工作时间满50后,通知员工时间到(OnNotifyOffWork方法,并传递OffWorkEventArgs参数),可以下班了,(OnNotifyOffWork方法内部调用事件NotifyOffWork),正式员工收到通知后,则下班,其他员工则清扫一下办公室
然后给出例子:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
namespace DelegateAndEvent
{
public class Boss
{
//表示工作时间
private int virTime;
//下班时老板说的话
public String SaidWords
{
get { return "Boss:时间到,下班了"; }
}
//委托定义
public delegate void NotifyOffWorkEventHandler(Object sender, OffWorkEventArgs e);
//事件
public event NotifyOffWorkEventHandler NotifyOffWork;
//事件参数
public class OffWorkEventArgs:EventArgs
{
public readonly int virTime;
public OffWorkEventArgs(int virTime)
{
this.virTime = virTime;
}
}
//触发事件
protected void OnNotifyOffWork(OffWorkEventArgs e)
{
if (NotifyOffWork!=null)
{
NotifyOffWork(this, e);
}
}
//执行操作
public void ComputerOffWorkTime()
{
for (int i = 1; i <= 50; i++)
{
virTime = i;
if (i>=50)
{
OffWorkEventArgs e = new OffWorkEventArgs(i);
OnNotifyOffWork(e);
}
}
}
}
//正式员工
public class FormalEmployee
{
public static void GoHome(Object sender, Boss.OffWorkEventArgs e)
{
Boss boss = (Boss) sender;
Console.WriteLine(boss.SaidWords);
Console.WriteLine(e.virTime);
Console.WriteLine("FormalEmployee:准备回家");
}
}
//其他员工
public class OtherEmployee
{
public static void CleanOffice(Object sender, Boss.OffWorkEventArgs e)
{
Boss boss = (Boss)sender;
Console.WriteLine(boss.SaidWords);
Console.WriteLine(e.virTime);
Console.WriteLine("OtherEmployee:准备清扫办公室");
}
}
public class Program
{
static void Main(string[] args)
{
Boss boss=new Boss();
//注册事件
boss.NotifyOffWork += FormalEmployee.GoHome;
boss.NotifyOffWork += OtherEmployee.CleanOffice;
//老板开始计时
boss.ComputerOffWorkTime();
}
}
}