委托和事件示例

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();
    }
}

}

 

comments powered by Disqus