C#事件(event)解析委托
namespace Vczx.ProCSharp.Event
{
/// <summary>
/// 类EatEventArgs 必须继承自类EventArgs,用来引发事件时封装数据
/// </summary>
public class EatEventArgs : EventArgs
{
public String 饭店名称; //饭店名称
public decimal 准备消费金额; //准备消费金额
} /// <summary>
/// 这个委托用来说明处理吃饭事件的方法的方法头(模式)
/// </summary>
public delegate void EatEventHandler(object sender, EatEventArgs e); /// <summary>
/// 引发吃饭事件(EateEvent)的类Master(主人),这个类必须
/// 1.声明一个名为EatEvent的事件: public event EatEventHandler EatEvent;
/// 2.通过一个名为OnEatEvent的方法来引发吃饭事件,给那些处理此事件的方法传数据;
/// 3.说明在某种情形下引发事件呢?在饿的时候。用方法Hungrg来模拟。
/// </summary>
public class 主人
{
//声明事件
public event EatEventHandler EatEvent; //引发事件的方法
public void OnEatEvent(EatEventArgs e)
{
if (EatEvent != null)
{
EatEvent(this, e);
}
} //当主人饿的时候,他会指定吃饭地点和消费金额。
public void 主人饿(String restrauntName, decimal moneyOut)
{
EatEventArgs e = new EatEventArgs();
e.饭店名称 = restrauntName;
e.准备消费金额 = moneyOut; Console.WriteLine("主人说:");
Console.WriteLine("我饿了,要去{0}吃饭,消费{1}元", e.饭店名称, e.准备消费金额); //引发事件
OnEatEvent(e);
}
} /// <summary>
/// 类Servant(仆人)有一个方法ArrangeFood(安排食物)来处理主人的吃饭事件
/// </summary>
public class 仆人
{
public void 安排食物(object sender, EatEventArgs e)
{
Console.WriteLine();
Console.WriteLine("仆人说:");
Console.WriteLine("我的主人, 您的命令是 : ");
Console.WriteLine("吃饭地点 -- {0}", e.饭店名称);
Console.WriteLine("准备消费 -- {0}元 ", e.准备消费金额);
Console.WriteLine("好的,正给您安排。。。。。。。。\n");
System.Threading.Thread.Sleep(5000);
Console.WriteLine("主人,您的食物在这儿,请慢用");
Console.Read();
}
} /// <summary>
/// 类God安排qinshihuang(秦始皇)的仆人是lisi(李斯),并让李斯的ArrangeFood
/// 方法来处理qinshihuang的吃饭事件:qinshihuang.EatEvent += new EatEventHandler(lishi.ArrangeFood);
/// </summary>
public class God
{
public static void Start()
{
主人 qinshihuang = new 主人();
仆人 lishi = new 仆人(); qinshihuang.EatEvent += new EatEventHandler(lishi.安排食物); //秦始皇饿了,想去希尔顿大酒店,消费5000元
qinshihuang.主人饿("希尔顿大酒店", 5000.0m);
}
}
} //输出: //主人说:
//我饿了,要去希尔顿大酒店吃饭,消费5000.0元 //仆人说:
//我的主人, 您的命令是 :
//吃饭地点 -- 希尔顿大酒店
//准备消费 -- 5000.0元
//好的,正给您安排。。。。。。。。 //主人,您的食物在这儿,请慢用
这有一个很好的例子,有助于理解事件机制。
using System;
namespace  Vczx.ProCSharp.Event   
{   
	/// <summary>   
	/// 类EatEventArgs 必须继承自类EventArgs,用来引发事件时封装数据   
	/// </summary>   
	public  class  EatEventArgs  :  EventArgs   
	{   
		public String restrauntName;     //饭店名称   
public decimal moneyOut;     //准备消费金额   
	}
/// <summary>   
	/// 这个委托用来说明处理吃饭事件的方法的方法头(模式)   
	/// </summary>   
	public delegate void EatEventHandler(object sender, EatEventArgs e);
/// <summary>   
	/// 引发吃饭事件(EateEvent)的类Master(主人),这个类必须   
	/// 1.声明一个名为EatEvent的事件: public event EatEventHandler EatEvent;   
	/// 2.通过一个名为OnEatEvent的方法来引发吃饭事件,给那些处理此事件的方法传数据;   
	/// 3.说明在某种情形下引发事件呢?在饿的时候。用方法Hungrg来模拟。   
	/// </summary>   
	public class Master   
	{   
		//声明事件   
public event EatEventHandler EatEvent;
//引发事件的方法   
public void OnEatEvent(EatEventArgs e)   
		{   
			if (EatEvent != null)   
			{   
				EatEvent(this, e);   
			}   
		}
//当主人饿的时候,他会指定吃饭地点和消费金额。   
public void Hungry(String   restrauntName, decimal moneyOut)   
		{   
			EatEventArgs e = new EatEventArgs();   
			e.restrauntName = restrauntName;   
			e.moneyOut = moneyOut;
Console.WriteLine("主人说:");   
Console.WriteLine("我饿了,要去{0}吃饭,消费{1}元", e.restrauntName, e.moneyOut);
//引发事件   
OnEatEvent(e);   
		}   
	}
/// <summary>   
	/// 类Servant(仆人)有一个方法ArrangeFood(安排食物)来处理主人的吃饭事件   
	/// </summary>   
	public class Servant   
	{   
		public void ArrangeFood(object sender, EatEventArgs e)   
		{   
			Console.WriteLine();   
			Console.WriteLine("仆人说:");   
Console.WriteLine("我的主人, 您的命令是 : ");   
Console.WriteLine("吃饭地点 -- {0}", e.restrauntName);   
			Console.WriteLine("准备消费 -- {0}元 ", e.moneyOut);   
			Console.WriteLine("好的,正给您安排。。。。。。。。\n");
			System.Threading.Thread.Sleep( 5000 );
			Console.WriteLine("主人,您的食物在这儿,请慢用");  
Console.Read();
		}   
	}
/// <summary>   
	/// 类God安排qinshihuang(秦始皇)的仆人是lisi(李斯),并让李斯的ArrangeFood   
	/// 方法来处理qinshihuang的吃饭事件:qinshihuang.EatEvent += new EatEventHandler(lishi.ArrangeFood);   
	/// </summary>   
	public class God   
	{   
		public static void Start()   
		{   
			Master   qinshihuang = new Master();   
			Servant lishi = new Servant();
qinshihuang.EatEvent += new EatEventHandler(lishi.ArrangeFood);
//秦始皇饿了,想去希尔顿大酒店,消费5000元   
qinshihuang.Hungry("希尔顿大酒店", 5000.0m);   
		}   
	}   
}
输出:
主人说:
我饿了,要去希尔顿大酒店吃饭,消费5000.0元
仆人说:
我的主人, 您的命令是 :
吃饭地点 -- 希尔顿大酒店
准备消费 -- 5000.0元
好的,正给您安排。。。。。。。。
主人,您的食物在这儿,请慢用
C#事件(event)解析委托的更多相关文章
- C#事件(event)解析
		事件(event),这个词儿对于初学者来说,往往总是显得有些神秘,不易弄懂.而这些东西却往往又是编程中常用且非常重要的东西.大家都知道windows消息处理机制的重要,其实C#事件就是基于window ... 
- 深入理解事件(event)与委托(delegate)
		好久没学.NET了,最近重又开始学习,发现委托有很多变化了,发现事件不明白了(可能以前就没明白过) 网上搜索了几篇文章,也没注意什么时候的,发现都讲的不彻底,综合一下,也当个学习笔记. using S ... 
- C# 事件 event 【转】
		C#事件(event)解析 事件(event),这个词儿对于初学者来说,往往总是显得有些神秘,不易弄懂.而这些东西却往往又是编程中常用且非常重要的东西.大家都知道windows消息处理机制的重要, ... 
- 重温委托(delegate)和事件(event)
		1.delegate是什么 某种意义上来讲,你可以把delegate理解成C语言中的函数指针,它允许你传递一个类A的方法m给另一个类B的对象,使得类B的对象能够调用这个方法m,说白了就是可以把方法当作 ... 
- 关于C# 委托(delegate)与事件(event)的用法及事例
		C#中的委托和事件对于新手可能会有一点难理解,所以先从一个小例子入手,以便能更好的理解其如何使用.有一个学生每天定闹钟在早上6点起床,所以当每天早上6点的时候,闹钟就会响起来,从而学生才会按时起床. ... 
- laravel框架中Job和事件event的解析
		本篇文章给大家带来的内容是关于laravel框架中Job和事件event的解析,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 在做项目的时候,一直对Job和Event有个疑惑.感觉两 ... 
- C#.NET使用Task,await,async,异步执行控件耗时事件(event),不阻塞UI线程和不跨线程执行UI更新,以及其他方式比较
		使用Task,await,async,异步执行事件(event),不阻塞UI线程和不跨线程执行UI更新 使用Task,await,async 的异步模式 去执行事件(event) 解决不阻塞UI线程和 ... 
- Redis总结(五)缓存雪崩和缓存穿透等问题    Web API系列(三)统一异常处理    C#总结(一)AutoResetEvent的使用介绍(用AutoResetEvent实现同步)  C#总结(二)事件Event 介绍总结    C#总结(三)DataGridView增加全选列  Web API系列(二)接口安全和参数校验  RabbitMQ学习系列(六): RabbitMQ 高可用集群
		Redis总结(五)缓存雪崩和缓存穿透等问题 前面讲过一些redis 缓存的使用和数据持久化.感兴趣的朋友可以看看之前的文章,http://www.cnblogs.com/zhangweizhon ... 
- XAML实例教程系列 - 事件(Event) 五
		Kevin Fan分享开发经验,记录开发点滴 XAML实例教程系列 - 事件(Event) 2012-06-19 01:36 by jv9, 1727 阅读, 7 评论, 收藏, 编辑 Events, ... 
随机推荐
- 【leetcode 138. 复制带随机指针的链表】解题报告
			方法一:递归 unordered_map<Node*,Node*> dict; Node* copyRandomList(Node* head) { if (!head) return h ... 
- NSRange 范围
			前言 结构体,这个结构体用来表示事物的一个范围,通常是字符串里的字符范围或者集合里的元素范围. typedef struct _NSRange { NSUInteger location; // 表示 ... 
- postgresql删除活动链接的数据库
			当我们在使用drop database testdb命令删除数据库时,会提示该数据库正在被使用,这样我们就无法删除,此时我们可以通过如下语句断开该数据库的所有链接: SELECT pg_termina ... 
- 【转】asp.net中设置弹出谈话框的几种方式详解
			源地址:https://blog.csdn.net/zou15093087438/article/details/79637114 注:可用winform的MessageBox的方法,只需引用Syst ... 
- Django权限控制进阶
			一.一级菜单的排序 我们用字典存放菜单信息,而字典是无序的,当一级菜单过多时可能会出现乱序情况,因此需要给一级菜单排序 1.给一级菜单表的model中加一个weight权重的字段 ,权重越大越靠前 w ... 
- Python操作hdfs
			Python直接操作hdfs,包括追加数据文件到hdfs文件 #!coding:utf-8 import sys from hdfs.client import Client #设置utf-8模式 r ... 
- JavaWeb学习笔记(十一)—— JavaWeb开发模式【转】
			SUN公司推出JSP技术后,同时也推荐了两种web应用程序的开发模式,一种是JSP+JavaBean模式,一种是Servlet+JSP+JavaBean模式. 一.JSP+JavaBean开发模式 1 ... 
- 【算法笔记】B1036 跟奥巴马一起编程
			1036 跟奥巴马一起编程 (15 分) 美国总统奥巴马不仅呼吁所有人都学习编程,甚至以身作则编写代码,成为美国历史上首位编写计算机代码的总统.2014 年底,为庆祝“计算机科学教育周”正式启动,奥巴 ... 
- 补档 VS远程调试
			先说概念 开发机:将编译好的程序部署到目标机器上执行.配置 VS 工程,建立与目标机的连接,开始远程调试. 目标机:负责执行目标程序.安装和运行远程工具 (Remote Debugger),等待来自开 ... 
- Advanced Data Structures in competitive programming
			1.bit #define isOn(S, j) (S & (1 << j)) #define setBit(S, j) (S |= (1 << j)) #define ... 
