复习C#事件[温故而知新]

0 views
Skip to first unread message

william

unread,
Apr 28, 2006, 8:58:44 AM4/28/06
to [我们的party最扯]
复习是巩固知识的好方法```````

using System;

class MailManager //邮件管理器
{
//定义事件接收者的信息类
public class MailMsgEventArgs : EventArgs
//都要从EventArgs派生
{
//构造函数,生成信息
public MailMsgEventArgs(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;
}


//定义信息接收者处理消息时的委托(事件处理器)的原型

public delegate void MailMsgEventHandler(Object sender,
MailMsgEventArgs args);


//事件本身,接收者需要实现处理这个事件的详细过程

public event MailMsgEventHandler MailMsg;

//负责通知注册过该事件的对象(事件接收者)
protected virtual void OnMailMsg(MailMsgEventArgs e)
{
if(MailMsg!=null){
//说明有接收者(或事件已被注册过)
MailMsg(this, e);
}
}

//当有新邮件到来时,使用这段代码
public void ArriveMsg(string from, string to,
string subject, string body){
//构造一个邮件消息
MailMsgEventArgs e=new MailMsgEventArgs(from, to, subject,
body);
//通知接收对象(注意,它是调用虚方法)
OnMailMsg(e);
}
}

//实现其中一个事件侦听器
class Fax{
//注册事件
public Fax(MailManager mm){
mm.MailMsg +=new MailManager.MailMsgEventHandle*(**xMsg);
}

//定义事件处理器(要与委托中定义的类型一致)
private void FaxMsg(object sender, MailManager.MailMsgEventArgs e){

Console.WriteLine("Faxing mail message");
Console.WriteLine("To: {0}\n From: {1}\n Subject: {2}\n Body:
{3}\n",
e.to, e.from, e.subject, e.body);
}

//取消注册
public void Unregister(MailManager mm){
mm.MailMsg -= new MailManager.MailMsgEventHandle*(**xMsg);
}

//下面是测试接收
public static void Main(){
MailManager mm=new MailManage*();
//注意下面两行代码的次序
**x f=new Fax(mm);
mm.ArriveMsg("a", "b", "hello", "hello");
mm.ArriveMsg("1", "2", "world", "world");
f.Unregister(mm);
mm.ArriveMsg("3", "3", "a;ijdf", "aifjeoif");
}
}

william

unread,
Apr 28, 2006, 9:10:44 AM4/28/06
to [我们的party最扯]
不复习

还真的被忘记了`````````

Reply all
Reply to author
Forward
0 new messages