<script type="text/javascript">function StorePage(){d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(keyit=window.open('http://www.365key.com/storeit.aspx?t='+escape(d.title)+'&u='+escape(d.location.href)+'&c='+escape(t),'keyit','scrollbars=no,width=475,height=575,left=75,top=20,status=no,resizable=yes'));keyit.focus();}</script>
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();
}