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();
}
本文介绍了C#中实现事件机制的基本步骤,并通过一个猫叫引发老鼠逃跑和主人惊醒的例子进行演示。该文详细解释了如何定义事件类型、事件处理器、事件触发等关键环节。
5309

被折叠的 条评论
为什么被折叠?



