1、定义一个类型用于保存所有需要发送给事件通知接受者的附加信息(继承于System.EventArgs)
2、定义一个委托类型,用于指定事件触发时被调用的方法类型
3、定义一个事件成员
4、定义一个受保护的虚方法,负责通知事件的登记对象
5、定义一个方法,将输入转化为期望的事件
public
class
MailManager
... {
//1、定义一个类型用于保存所有需要发送给事件通知接受者的附加信息(继承于System.EventArgs)
public class MailMsgEvernArgs : EventArgs
...{
public MailMsgEvernArgs( string from,string to,string subject,string body)
...{
this.from = from;
this.to = to;
this.subject = subject;
this.body = body;
}
public readonly string from,to,subject,body;
}
//2、定义一个委托类型,用于指定事件触发时被调用的方法类型
public delegate void MailMsgEventHandler(object sender,MailMsgEvernArgs args);
//3、定义一个事件成员
public event MailMsgEventHandler MailMsg;
//4、定义一个受保护的虚方法,负责通知事件的登记对象
protected virtual void OnMailMsg(MailMsgEvernArgs e)
...{
if(MailMsg!=null)
MailMsg(this,e);
}
//5、定义一个方法,将输入转化为期望的事件
public void SimulateArrivingMsg(string from,string to,string subject,string body)
...{
MailMsgEvernArgs e = new MailMsgEvernArgs(from,to,subject,body);
OnMailMsg(e);
}
}
... {
//1、定义一个类型用于保存所有需要发送给事件通知接受者的附加信息(继承于System.EventArgs)
public class MailMsgEvernArgs : EventArgs
...{
public MailMsgEvernArgs( string from,string to,string subject,string body)
...{
this.from = from;
this.to = to;
this.subject = subject;
this.body = body;
}
public readonly string from,to,subject,body;
}
//2、定义一个委托类型,用于指定事件触发时被调用的方法类型
public delegate void MailMsgEventHandler(object sender,MailMsgEvernArgs args);
//3、定义一个事件成员
public event MailMsgEventHandler MailMsg;
//4、定义一个受保护的虚方法,负责通知事件的登记对象
protected virtual void OnMailMsg(MailMsgEvernArgs e)
...{
if(MailMsg!=null)
MailMsg(this,e);
}
//5、定义一个方法,将输入转化为期望的事件
public void SimulateArrivingMsg(string from,string to,string subject,string body)
...{
MailMsgEvernArgs e = new MailMsgEvernArgs(from,to,subject,body);
OnMailMsg(e);
}
}
注册事件:
static
void
Main(
string
[] args)
... {
MailManager mm = new MailManager();
mm.MailMsg += new MailManager.MailMsgEventHandler(mm_MailMsg);
mm.SimulateArrivingMsg("中国", "美国", "subject", "body");
}
private static void mm_MailMsg( object sender, MailManager.MailMsgEvernArgs args)
... {
Console.WriteLine(args.from);
Console.WriteLine(args.to);
}
... {
MailManager mm = new MailManager();
mm.MailMsg += new MailManager.MailMsgEventHandler(mm_MailMsg);
mm.SimulateArrivingMsg("中国", "美国", "subject", "body");
}
private static void mm_MailMsg( object sender, MailManager.MailMsgEvernArgs args)
... {
Console.WriteLine(args.from);
Console.WriteLine(args.to);
}
事件练习
1、程序设计: 猫叫一声,所有的老鼠都开始逃跑,主人被惊醒。(C#语言)
要求: 1.要有联动性,老鼠和主人的行为是被动的。
2.考虑可扩展性,猫的叫声可能引起其他联动效应。
public
class
CryArgs : EventArgs
... {
public readonly string Name;
public CryArgs(string name)
...{
this.Name = name;
}
}
public delegate void SubEventHandler( object sender,CryArgs cryArgs);
public class Subject
... {
public event SubEventHandler SubEvent;
protected virtual void FireAway(CryArgs cryArgs)
...{
if (this.SubEvent != null)
this.SubEvent(this,cryArgs);
}
}
public class Cat : Subject
... {
private string name;
public Cat(string name)
...{
this.name = name;
}
public void Cry()
...{
CryArgs cryArgs = new CryArgs(name);
//Console.WriteLine("cat cryed.");
this.FireAway(cryArgs);
}
}
public abstract class Observer
... {
public Observer(Subject sub)
...{
sub.SubEvent += new SubEventHandler(Response);
}
public abstract void Response(object sender,CryArgs cryArgs);
}
public class Mouse : Observer
... {
private string name;
public Mouse(string name, Subject sub) : base(sub)
...{
this.name = name;
}
public override void Response(object sender, CryArgs cryArgs)
...{
Console.WriteLine(cryArgs.Name+"叫,"+name + " attempt to escape!");
}
}
public class Master : Observer
... {
public Master(Subject sub) : base(sub)...{}
public override void Response(object sender, CryArgs cryArgs)
...{
Console.WriteLine(cryArgs.Name + "叫," + "host waken");
}
}
... {
public readonly string Name;
public CryArgs(string name)
...{
this.Name = name;
}
}
public delegate void SubEventHandler( object sender,CryArgs cryArgs);
public class Subject
... {
public event SubEventHandler SubEvent;
protected virtual void FireAway(CryArgs cryArgs)
...{
if (this.SubEvent != null)
this.SubEvent(this,cryArgs);
}
}
public class Cat : Subject
... {
private string name;
public Cat(string name)
...{
this.name = name;
}
public void Cry()
...{
CryArgs cryArgs = new CryArgs(name);
//Console.WriteLine("cat cryed.");
this.FireAway(cryArgs);
}
}
public abstract class Observer
... {
public Observer(Subject sub)
...{
sub.SubEvent += new SubEventHandler(Response);
}
public abstract void Response(object sender,CryArgs cryArgs);
}
public class Mouse : Observer
... {
private string name;
public Mouse(string name, Subject sub) : base(sub)
...{
this.name = name;
}
public override void Response(object sender, CryArgs cryArgs)
...{
Console.WriteLine(cryArgs.Name+"叫,"+name + " attempt to escape!");
}
}
public class Master : Observer
... {
public Master(Subject sub) : base(sub)...{}
public override void Response(object sender, CryArgs cryArgs)
...{
Console.WriteLine(cryArgs.Name + "叫," + "host waken");
}
}
注册事件
static
void
Main(
string
[] args)
... {
Cat c = new Cat("laomao");
Mouse mouse = new Mouse("haozi", c);
Master master = new Master(c);
c.Cry();
}
... {
Cat c = new Cat("laomao");
Mouse mouse = new Mouse("haozi", c);
Master master = new Master(c);
c.Cry();
}