2012/12/3 C#事件处理机制

来源:互联网 发布:静态头像源码 编辑:程序博客网 时间:2024/06/05 16:36

/*
 * 由SharpDevelop创建。
 * 用户: yangkaizhang
 * 日期: 2012/12/3
 * 时间: 18:48
 * 
 * 要改变这种模板请点击 工具|选项|代码编写|编辑标准头文件
 */
using System;
class PubEventArgs:EventArgs
{
    private readonly string m_magazineName;
    private readonly DateTime m_pubDate;
    public PubEventArgs(string magazineName,DateTime pubDate)
    {
        m_magazineName = magazineName;
        m_pubDate = pubDate;        
    }
    public string magazineName
    {
        getreturn m_magazineName;}
    }
    public DateTime pubDate
    {
        getreturn m_pubDate;}
    }
}

class Publisher //出版社
{
    public delegate void PubComputerEventHandler(object sender,PubEventArgs e);//声明事件所需要的代理 1 返回值必需为void
    public delegate void PubLifeEventHandler(object sender,PubEventArgs e);
    public event PubComputerEventHandler PubComputer;//事件声明 2
    public event PubLifeEventHandler PubLife;
    
    protected virtual void OnPubComputer(PubEventArgs e)
    {
        PubComputerEventHandler handler = PubComputer;
        if (handler != null
        {
            handler(this,e);
        }
    }
    protected virtual void OnPubLife(PubEventArgs e)
    {
        PubLifeEventHandler handler = PubLife;
        if (handler != null
        {
            handler(this,e);
        }
    }
    public void issueCoumputer(string magazineName,DateTime pubDate)//触发事件方法 3
    {
        Console.WriteLine("发行"+magazineName);
        OnPubComputer(new PubEventArgs(magazineName,pubDate));
    }
    public void issueLife(string magazineName,DateTime pubDate)
    {
        Console.WriteLine("发行"+magazineName);
        OnPubLife(new PubEventArgs(magazineName,pubDate));
    }    
}

class Subscriber//订阅者
{
    private string name;
    public Subscriber(string name)
    {
        this.name  = name;    
    }
    public void Receive(object sender,PubEventArgs e)//订阅者事件处理程序 4//和委托定义相一致(参数和返回类型)
    {
        Console.WriteLine(e.pubDate+name +"已收到"+ e.magazineName);
    }
}

namespace TEvent
{
    class Program
    {
        public static void Main(string[] args)
        {
            Publisher pub = new Publisher();
            Subscriber zs = new Subscriber("张三");
            pub.PubComputer += new Publisher.PubComputerEventHandler(zs.Receive);//向发行者订阅一个事件
            Subscriber ls = new Subscriber("李四");
            pub.PubComputer += new Publisher.PubComputerEventHandler(ls.Receive);
            pub.PubLife += new Publisher.PubLifeEventHandler(ls.Receive);
            pub.issueCoumputer("电脑杂志",Convert.ToDateTime("2006-01-01\t"));//触发事件
            pub.issueLife("生活杂志",Convert.ToDateTime("2006-01-01\t"));
            Console.WriteLine("一年后");
            pub.PubComputer -= new Publisher.PubComputerEventHandler(ls.Receive);
            pub.issueCoumputer("电脑杂志",Convert.ToDateTime("2007-01-01\t"));//触发事件
            pub.issueLife("生活杂志 ",Convert.ToDateTime("2007-01-01\t"));
            
            Console.ReadKey(true);
        }
    }
}

 

原创粉丝点击