在讲之前我们先来看看.Net Framework的编码规范:
一、委托类型的名称都应该以EventHandler结束。
二、委托的原型定义:有一个void返回值,并接受两个输入参数:一个Object 类型,一个 EventArgs类型(或继承自EventArgs)。
三、事件的命名为委托去掉 EventHandler之后剩余的部分。
四、继承自EventArgs的类型应该以EventArgs结尾。
这就是微软编码的规范,当然这不仅仅是规则,而是在这种规则下使程序有更大的灵活性,
例子:您是不是不是有过不去上早自习的经历,还叫朋友如果辅导员点到就发个信息通知你。
下面我就就以不去早自习,睡懒觉,叫班长如果辅导员点到就通知我说辅导员来点到了,
如果没来就发个信息说不用来了继续睡,辅导员没来
=================================================================================================
// 观察者(也就是事件的订阅者)感兴趣的内容(EventArgs的继承类)
///<summary>
/// 事件订阅者想要发布者传达的信息
///</summary>
class InformMessageEventArgs : EventArgs
{
private string message;
public string Message
{
get { return message; }
}
public InformMessageEventArgs()
{
}
public InformMessageEventArgs(string message)
{
this.message = message;
}
}
// 观察者(也就是事件订阅者)小明
class XiaoMingPhone
{
// 感兴趣的事,就是今辅导员早自习来没来点到
public void Display(object sender, InformMessageEventArgs e)
{
Console.WriteLine(e.Message);
}
}
// 事件的发布者
class Monitor
{
// 声明一个委托
public delegate void SendMessageEventHandler(object sender, InformMessageEventArgs e);
// 声明一个事件,辅导员点到事件
public event SendMessageEventHandler morningExercise;
{
if (morningExercise != null)
{
morningExercise(this, e);
}
}
//如果辅导员点到了就会调用这个方法触发事件(给小明发信息)
public void send(InformMessageEventArgs e)
{
isAdd(e);
}
}
// 测试程序
class Program
{
//实例化一个小明
XiaoMingPhone xmp;
// 实例化一个班长
Monitor m;
public Program()
{
xmp = new XiaoMingPhone();
m = new Monitor();
//在班长哪里注册一个通知事件(这一步实现事件发送者和事件接收者的关联)
m.morningExercise +=new Monitor.SendMessageEventHandler(xmp.Display);
init();
}
static void Main(string[] args)
{
new Program();
}
///<summary>
/// .send()方法就是用来触发通知事件的
///</summary>
private void init()
{
//班长一看辅导员点到了,触发了注册的通知事件。赶紧告诉小明辅导员来了
string fudaoyuan = "点到";
Console.WriteLine("星期一早自习");
if (fudaoyuan == "点到")
{
m.send(new InformMessageEventArgs("今天早上辅导员来点到了,你被记名了"));
}
//班长一看辅导员没来点到,同样也触发了注册的通知事件。告诉小明继续睡辅导员没来
fudaoyuan = "没来";
Console.WriteLine("星期二早自习");
if (fudaoyuan == "没来")
{
m.send(new InformMessageEventArgs("辅导员早上没来,你继续睡吧"));
}
Console.ReadKey();
}
}