⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mailmanager.cs

📁 .NET的课件。还不全。。后续我还会传上来的
💻 CS
字号:
//*****************************************************
// Microsoft .NET框架程序设计(修订版)配书源代码
// 第11章,第229-236页
//*****************************************************


using System;

class MailManager 
{
	// 在MailManager内部定义MailMsgEventArgs类型
	public class MailMsgEventArgs : EventArgs 
	{

		// 1. 传递给事件接受者的类型定义信息
		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;
	}

	// 2. 下面的委托类型定义了接受者必须实现的回调方法原型
	public delegate void MailMsgEventHandler(
		Object sender, MailMsgEventArgs args);

	// 3. 事件成员
	public event MailMsgEventHandler MailMsg;

	// 4. 下面的受保护虚方法负责通知事件的登记对象
	protected virtual void OnMailMsg(MailMsgEventArgs e) 
	{

		// 有对象登记事件吗?
		if (MailMsg != null) 
		{

			// 如果有,则通知委托链表上的所有对象
			MailMsg(this, e);
		}
	}

	// 5. 下面的方法将输入转化为期望的事件,该
	//     方法在新的电子邮件消息到达时被调用
	public void SimulateArrivingMsg(String from, String to,
		String subject, String body) 
	{

		// 构造一个对象保存希望传递给通知接受者的信息
		MailMsgEventArgs e =
			new MailMsgEventArgs(from, to, subject, body);

 
		
		// 调用虚方法通知对象事件已发生,
		// 如果派生类型没有重写该虚方法,
		// 对象将通知所有登记的事件侦听者
		OnMailMsg(e);
	}
}


class Fax 
{
	// 将 MailManager 对象传递给构造器
	public Fax(MailManager mm) 
	{

		// 构造一个指向FaxMsg回调方法的MailMsgEventHandler
		// 委托实例。然后登记MailManager的 MailMsg 事件
		mm.MailMsg += new MailManager.MailMsgEventHandler(FaxMsg);
	}

	// MailManager 将调用该方法来通知
	// Fax对象收到一个新的电子邮件消息
	private void FaxMsg(
		Object sender, MailManager.MailMsgEventArgs e) 
	{

		// 参数 ‘sender’ 表示 MailManager 对象,如果
		// 期望和事件的触发者通信,将会用到该参数

		// 参数 ‘e’ 表示MailManager对象希望提供的一些
		// 附加事件信息

		// 通常情况下,这里的代码应该传真电子邮件消息,
		// 这里的实现仅仅将消息显示到控制台上
		Console.WriteLine("Faxing mail message:");
		Console.WriteLine(
			" From: {0}\n To: {1}\n Subject: {2}\n Body: {3}\n",
			e.from, e.to, e.subject, e.body);
	}
	public void Unregister(MailManager mm) 
	{

		// 构造一个指向FaxMsg回调方法的MailMsgEventHandler
		// 委托实例
		MailManager.MailMsgEventHandler callback =
			new MailManager.MailMsgEventHandler(FaxMsg);
		// 注销MailManager的 MailMsg 事件
		mm.MailMsg -= callback;
	}
}

class Pager 
{
	// 将 MailManager 对象传递给构造器
	public Pager(MailManager mm) 
	{

		// 构造一个指向SendMsgToPager回调方法的MailMsgEventHandler
		// 委托实例。然后登记MailManager的 MailMsg 事件
		mm.MailMsg += 
			new MailManager.MailMsgEventHandler(SendMsgToPager);
	}

	// MailManager 将调用该方法来通知
	// Pager对象收到一个新的电子邮件消息
	private void SendMsgToPager(
		Object sender, MailManager.MailMsgEventArgs e) 
	{
		// 参数 ‘sender’ 表示 MailManager 对象,如果
		// 期望和事件的触发者通信,将会用到该参数

		// 参数 ‘e’ 表示MailManager对象希望提供的一些
		// 附加事件信息

		// 通常情况下,这里的代码应该传真电子邮件消息,
		// 这里的实现仅仅将消息显示到控制台上

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

class App 
{
	static void Main() 
	{
		// 构造一个 MailManager 对象
		MailManager mm = new MailManager();

		// 构造一个 Fax 对象,构造器参数为上面的 MailManager 对象
		Fax fax = new Fax(mm);

		// 构造一个 Pager 对象, 构造器参数为上面的 MailManager 对象
		Pager pager = new Pager(mm);

		// 模拟一个进来的邮件消息
		mm.SimulateArrivingMsg("Jeffrey Richter", 
			"Santa", 
			"Christmas", 
			"Thanks for the great presents last year");

		// 强制 Fax 对象注销 MailManager 对象
		fax.Unregister(mm);

		// 模拟一个进来的邮件消息
		mm.SimulateArrivingMsg("Jeffrey Richter", "Mom & Dad", 
			"My birthday", 
			"Thanks for the great presents last year");
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -