关于委托事件的一两个很好的例子!希望对大家学习有一定帮助!
哇。眼见在CSDN也玩了一段时间了。想继续学习一下了。最近也有个项目要做了。可能不怎么常来了!在离开前,发个关于对学习委托事件的朋友很有帮助的一两个例子。一个朋友给的,一个是在CSDN搜索到的。感觉非常好!恩,贴上来!
两个例子均用现实的例子来解释委托事件的处理过程。很好!
第一个例子
public delegate void EatEventHandler(object sender, EatEventArgs e);
这个的定义也可以不要这样.可以直接就定义一个参数
public delegate void EatEventHandler(string e); 但然用的时候的参数要相对应好哦
using System;
namespace nsEventSample
{
/// <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("好的,正给您安排。。。。。。。。");
Console.WriteLine("主人,您的食物在这儿,请慢用");
}
}
/// <summary>
/// 类God安排qinshihuang(秦始皇)的仆人是lisi(李斯),并让李斯的ArrangeFood
/// 方法来处理qinshihuang的吃饭事件:qinshihuang.EatEvent += new EatEventHandler(lishi.ArrangeFood);
/// </summary>
public class God
{
public static void Main()
{
Master qinshihuang = new Master();
Servant lishi = new Servant();
qinshihuang.EatEvent += new EatEventHandler(lishi.ArrangeFood);
//秦始皇饿了,想去希尔顿大酒店,消费5000元
qinshihuang.Hungry("希尔顿大酒店", 5000.0m);
}
}
}
第二个例子来源于:
http://community.csdn.net/Expert/topic/2651/2651579.xml?temp=.7183191
比如说一个公司(场景),你是老板,手下有两个员工,小张和小李。你命令小张注意小李,在开发软件工作的时候如果上网打游戏,你就记录下来,从小李工资里扣100元钱。这个实际上就是现实中的委托。
现在给出一个代码,C#控制台程序,编译运行通过
using System;
namespace CSharpConsole
{
public class 场景
{
[STAThread]
public static void Main(string[] args)
{
Console.WriteLine("场景开始了....");
// 生成小王
小王 w = new 小王();
// 生成小账
小张 z = new 小张();
// 指定监视
z.PlayGame += new PlayGameHandler(w.扣钱);
// 开始玩游戏
z.玩游戏();
Console.WriteLine("场景结束...");
Console.ReadLine();
}
}
// 负责扣钱的人
public class 小王
{
public 小王()
{
Console.WriteLine("生成小王...");
}
public void 扣钱(object sender,EventArgs e)
{
Console.WriteLine("小王:好小子,上班时间胆敢玩游戏...");
Console.WriteLine("小王:看看你小子有多少钱...");
小张 f = (小张)sender;
Console.WriteLine("小张的钱: " + f.钱.ToString());
Console.WriteLine("开始扣钱......");
System.Threading.Thread.Sleep(500);
f.钱 = f.钱 - 500;
Console.WriteLine("扣完了....现在小张还剩下:" + f.钱.ToString());
}
}
// 如果玩游戏,则引发事件
public class 小张
{
// 先定义一个事件,这个事件表示“小张”在玩游戏。
public event PlayGameHandler PlayGame;
// 保存小张钱的变量
private int m_Money;
public 小张()
{
Console.WriteLine("生成小张....");
m_Money = 1000; // 构造函数,初始化小张的钱。
}
public int 钱 // 此属性可以操作小张的钱。
{
get
{
return m_Money;
}
set
{
m_Money = value;
}
}
public void 玩游戏()
{
Console.WriteLine("小张开始玩游戏了.....");
Console.WriteLine("小张:CS好玩,哈哈哈! 我玩.....");
System.Threading.Thread.Sleep(500);
System.EventArgs e = new EventArgs();
OnPlayGame(e);
}
protected virtual void OnPlayGame(EventArgs e)
{
if(PlayGame != null)
{
PlayGame(this,e);
}
}
}
// 定义委托处理程序
public delegate void PlayGameHandler(object sender,System.EventArgs e);
}
如果对大家有帮助大家就顶一个,如果觉得对您来说这太菜了。那说明是我太菜了。呵呵。因为我本来就很菜。想再学学。。恩。。N天后结帖。。
问题点数:160、回复次数:51Top
1 楼brando_beat(Eの懒龙)回复于 2005-06-20 09:24:01 得分 5
沙发Top
2 楼LionWangCity(完美生活)回复于 2005-06-20 09:24:56 得分 5
谢谢!板凳,接分!Top
3 楼LoveCherry(论成败,人生豪迈;大不了,重头再来!^_^)回复于 2005-06-20 09:25:44 得分 5
还推荐大家一系列文章:
http://blog.joycode.com/percyboy/archive/2005/01/22/43438.aspxTop
4 楼CMIC(大象)回复于 2005-06-20 09:31:39 得分 5
不错,自定义事件的入门例子Top
5 楼hedonister(冰戈)回复于 2005-06-20 09:33:52 得分 5
谢谢分享Top
6 楼zhanqiangz(闲云野鹤-Overriding)回复于 2005-06-20 09:34:34 得分 3
^_^Top
7 楼Technologytomorrow(轩辕白)回复于 2005-06-20 09:36:11 得分 5
好!Top
8 楼Jinglecat(晓风残月)回复于 2005-06-20 09:38:19 得分 4
学习ing,
学习.net也不短了,还真是没搞懂delegateTop
9 楼WeekZero(∮小气的鬼∮)回复于 2005-06-20 09:38:47 得分 3
谢谢了,学习一下Top
10 楼fphuang(人在哈尔滨·四月)回复于 2005-06-20 09:38:53 得分 3
向大侠学习!~Top
11 楼SunRisingWang(旭日)回复于 2005-06-20 09:39:21 得分 3
谢谢了,jfTop
12 楼LaoDai_Net(『老代』)回复于 2005-06-20 09:43:12 得分 3
MarkTop
13 楼coveking(小草)回复于 2005-06-20 09:43:43 得分 3
^_^ 好好收藏Top
14 楼WeekZero(∮小气的鬼∮)回复于 2005-06-20 09:46:06 得分 3
好好学习一下Top
15 楼ye_zi(行到水穷处·坐看云起时)回复于 2005-06-20 09:48:06 得分 3
mark,goodTop
16 楼jehon(没车步行中。。。)回复于 2005-06-20 09:50:15 得分 3
markTop
17 楼xtxk_917(小强)回复于 2005-06-20 09:53:48 得分 3
!Top
18 楼biao88482005(飚)回复于 2005-06-20 09:54:02 得分 3
谢谢Top
19 楼luckyprg(lucky)回复于 2005-06-20 10:07:39 得分 3
已加入收藏!Top
20 楼ixingarden(心愿)回复于 2005-06-20 10:29:41 得分 3
已收藏!
谢谢楼主!Top
21 楼goody9807(http://goody9807.cnblogs.com)回复于 2005-06-20 10:33:01 得分 3
谢谢分享~~~Top
22 楼bidisty(浪漫草)回复于 2005-06-20 11:27:01 得分 3
很好Top
23 楼fox7805034(肚子饿了)回复于 2005-06-20 11:46:14 得分 3
好..支持!!!!Top
24 楼renyu732(Sysinfo)回复于 2005-06-20 13:17:04 得分 3
谢谢分享Top
25 楼hackate(兰花开香入梦境,独思佳人亦飘然!!)回复于 2005-06-20 14:20:30 得分 0
谢谢各位的支持.呵呵..Top
26 楼loveyzy(菌哥)回复于 2005-06-20 14:37:53 得分 3
好例子!Top
27 楼codeangel(http://www.wSoft.Net)回复于 2005-06-20 14:51:29 得分 3
好例子
前些日子我写了手机短信的东西,
先是启动短信检测线程
若扑捉到发来短信,就用委托将收来的信息用事件抛出到文件并解码。
感觉没问题
但是写成com+就有问题了。Top
28 楼65963(MONDEO)回复于 2005-06-20 15:05:54 得分 3
谢谢Top
29 楼JzeroBiao(先知)回复于 2005-06-20 15:20:35 得分 3
顶了再睇....Top
30 楼jhtchina(学习构架设计)回复于 2005-06-20 15:22:22 得分 3
markTop
31 楼ghchen()回复于 2005-06-20 15:26:20 得分 3
谢谢Top
32 楼hedonister(冰戈)回复于 2005-06-20 15:27:31 得分 3
收藏到我的blog上了,hackate不介意吧,呵呵
http://www.cnblogs.com/hedonister/articles/177747.htmlTop
33 楼xn000(涵夫)回复于 2005-06-20 15:34:09 得分 3
分享是一种快乐
Top
34 楼dragonfly001(I want to fly!)回复于 2005-06-20 15:46:07 得分 3
謝謝......Top
35 楼zkjp()回复于 2005-06-20 16:06:39 得分 3
高手帮忙解答下...
委托事件=自定义事件?Top
36 楼lj9969(恋燕侠)回复于 2005-06-20 16:13:59 得分 3
学习ing..
Good Good Study..
Day Day Up..Top
37 楼ieooo(Jet)回复于 2005-06-20 16:26:49 得分 3
好东东Top
38 楼zhouabc(试着专业一点)回复于 2005-06-20 21:31:32 得分 3
谢谢楼主.Top
39 楼morality(业精于勤,行成于思!)回复于 2005-06-20 22:29:42 得分 3
多谢共享!Top
40 楼Dluxd()回复于 2005-06-21 08:23:41 得分 3
学习Top
41 楼liuzxit(dotnetRGB.com)回复于 2005-06-21 08:32:18 得分 3
很有幫助,收藏Top
42 楼pclogic(跃虹鸟)回复于 2005-06-21 08:39:01 得分 3
markTop
43 楼lzdjoa(西边)回复于 2005-06-21 08:56:15 得分 3
先顶一下,过后再看Top
44 楼bgu(彼岸)回复于 2005-06-21 09:01:58 得分 3
不错。
只是看到有点昏.......
再找本书看看先。Top
45 楼xzq686(★_瞬_★)回复于 2005-06-21 09:03:38 得分 3
楼主兄弟.好人呀..Top
46 楼renyu732(Sysinfo)回复于 2005-06-21 09:05:03 得分 3
markTop
47 楼funnystar(不变的承诺)回复于 2005-06-21 09:15:58 得分 3
markTop
48 楼czm303204(阿朗)回复于 2005-06-21 09:18:11 得分 3
好人那。Top
49 楼yangyu112654374(Spaceman)回复于 2005-06-21 10:40:00 得分 3
学习~~~~~`Top
50 楼rhs(释放自己)回复于 2005-06-21 12:53:15 得分 3
呵~~
不错,多谢!Top
51 楼HJ_34(刺桐游子)回复于 2005-07-01 16:15:11 得分 0
UPTop





