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); } }
注册事件:
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); }
事件练习
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 " ); } }
注册事件
static
void
Main(
string
[] args)
...
{ Cat c = new Cat( " laomao " ); Mouse mouse = new Mouse( " haozi " , c); Master master = new Master(c); c.Cry(); }