.NET Framework事件设计准则

.NET Framework事件设计准则
1、事件的命名准则应使用PascalCasing命名方式
2、声明delegate时,使用void类型当作返回值,EventName事件的事件委托是EventNameEventHandler,事件接受两个传入参数,一律命为sender与e。
3、定义一个提供事件数据的类。对类以EventNameEventArgs进行命名,从System.EventArgs派生该类,然后添加所有事件特定的成员。
puclic delegate void EventNameEventHandler(object sender,EventNameEventArgs e);
    4、在引发事件的类中提供一个受保护的方法。以OnEventName进行命名。在该方法中引发该事件
    protected virtual void OnEventName(EventArgs e)
...{
if(EventName!=null)
...{
EventName(this,e);
}
}
采用 EventHandler 模式发布事件

1、在发行者类和订户类均可看见的范围中声明类,并添加保留自定义事件数据所需的成员。

public class CustomEventArgs : EventArgs
...{
    public CustomEventArgs(string s)
    ...{
        msg = s;
    }
    private string msg;
    public string Message
    ...{
        get ...{ return msg; }
    }
}
2、在发布类中声明一个委托。为它指定以 EventHandler 结尾的名称。第二个参数指定自定义 EventArgs 类型。

public delegate void CustomEventHandler(object sender, CustomEventArgs a);
3、如果使用的是 EventHandler 的非泛型版本,并且您有一个由 EventArgs 派生的自定义类,请在发布类中声明您的事件,并且将您的委托用作类型:

class Publisher
...{
    public event CustomEventHandler RaiseCustomEvent;
}
 

 
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
    ...{
        get ...{ return m_magazineName; }
    }
    public DateTime pubDate
    ...{
        get ...{ return m_pubDate; }
    }
}
class Publisher//出版社
...{
    public delegate void PubComputerEventHandler(object sender, pubEventArgs e);//声明发布电脑杂志事件所需的代理
    public delegate void PubLifeEventHandler(object sender, pubEventArgs e);//声明发布生活杂志事件所需的代理
    public event PubComputerEventHandler PubComputer;//事件的声明
    public event PubLifeEventHandler PubLife;//事件的声明
    protected virtual void OnPubComputer(pubEventArgs e)
    ...{
        PubComputerEventHandler handler = PubComputer;
        if (handler != null)
        ...{
            handler(this, e);
        }
    }
    protected virtual void OnPubLive(pubEventArgs e)
    ...{
        PubLifeEventHandler handler = PubLife;
        if (handler != null)
        ...{
            handler(this, e);
        }
    }
    public void issueComputer(string magazineName, DateTime pubDate)//触发事件的方法
    ...{
        Console.WriteLine("发行" + magazineName);
        OnPubComputer(new pubEventArgs(magazineName, pubDate));
    }
    public void issueLife(string magazineName, DateTime pubDate)
    ...{
        Console.WriteLine("发行" + magazineName);
        OnPubLive(new pubEventArgs(magazineName, pubDate));
    }
}
class Subscriber
...{
    private string name;
    public Subscriber(string name)
    ...{
        this.name = name;
    }
    public void Receive(object sender, pubEventArgs e)
    ...{
        Console.WriteLine(e.pubDate + "   " + name + "已经收到  " + e.magazineName);
    }
}
class Story
...{
    static void Main()
    ...{
        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.issueComputer("电脑杂志", Convert.ToDateTime("2006-1-1"));
        Pub.issueLife("生活杂志", Convert.ToDateTime("2006-1-1"));
        Console.WriteLine();
        Console.WriteLine("一年后");
        Pub.PubComputer -= new Publisher.PubComputerEventHandler(ls.Receive);
        Pub.issueComputer("电脑杂志", Convert.ToDateTime("2007-1-1"));
        Pub.issueLife("生活杂志", Convert.ToDateTime("2007-1-1"));
    }
}

本文来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/phqm/archive/2008/01/15/2045861.aspx

转载于:https://www.cnblogs.com/zhdonghu/archive/2009/08/13/1545378.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值