




已阅读5页,还剩1页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
委托委托应该是c#里面比较难理解的方面之一,所以成为很多项目经理面试员工的常问问题,下面是从网上看到的一篇文章,写的不错很形象,所以引过来,然后在说明一下委托的用处。/比如说一个公司(场景),你是老板,手下有两个员工,小张和小王。 /你命令小王,如果小张玩游戏,则小王扣去小张500元钱。 /这就是现实中的委托。 /实际上,在写程序中,程序员就是老板,小张和小王就是两个对象。 /小张玩游戏是一个方法,小张还有一个游戏事件,他玩游戏激发这个事件。 /而小王就是事件处理对象,他负责把小张的钱扣除500。 /所以,委托有如下几个要素: /1 激发事件的对象-就是小张 /2 处理对象事件的对象-就是小王 /3 定义委托,就是你让小王监视小张。 /如果这三个要素都满足的话,则你就写出了一个完整事件的处理。 /下面有个例子:在2003 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); 实际上,委托的原理是获取一个窗体的句柄(窗体的指针),通过窗体的指针调用其方法,c#封装了c+的指针,使其更加安全和简单,但是指针封装了带来有些问题无法处理,于是出现了委托的概念。我所用到的委托有两个方面:(1)一个窗体(父窗体)中弹出另一个窗体(子窗体),子窗体中的事件触发父窗体的函数;如,从父窗体中弹出一个设置窗体,设置完毕点击ok按钮后,刷新父窗体。(2)一个窗体(父窗体)中弹出另两个窗体(子窗体1和子窗体2),子窗体1中的事件触发子窗体2中的函数;如,应用多文档窗体时候,一个子窗体中选择改变在另一个窗体中有所反映。第一种方式:代码如下:子窗体代码: public delegate void PlayGameHandler(int i); public event PlayGameHandler shijian; private void FormSon_Load(object sender, EventArgs e) private void button1_Click(object sender, EventArgs e) shijian(4); 父窗体代码: private void FormParent_Load(object sender, EventArgs e) FormSon fs = new FormSon(); fs.shijian += new FormSon.PlayGameHandler(fs_shijian); fs.Show(); void fs_shijian(int i) MessageBox.Show(i.ToString(); ok,这样当在子窗体中单击按钮,父窗体会弹出消息框。第二种应用使用上面的方式可以解决。绿色通道:好文要顶关注我收藏该文与我联系 小Xu关注 - 0粉丝 - 2+加关注00(请您对文章做出评价)博主前一篇:数据库备份博主后一篇:NHibernateposted on 2009-02-09 12:02 小Xu 阅读(846) 评论(2) 编辑 收藏评论1887807#1楼楼主 2010-01-27 16:48 小Xu 定义代理private delegate vo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 品牌运营咨询服务合同范本
- 期货从业资格之《期货基础知识》题库检测题型及答案详解(考点梳理)
- 个人买卖土地合同协议书
- 养老服务用工协议书范本
- 难点详解陕西省韩城市中考数学真题分类(数据分析)汇编专题测试试卷(含答案详解版)
- 小儿心衰的护理查房课件
- 三不放过原则课件
- 期货从业资格之期货投资分析能力检测附答案详解【考试直接用】
- 期货从业资格之《期货法律法规》练习题(一)带答案详解(考试直接用)
- 难点详解吉林省桦甸市七年级上册整式及其加减综合练习试卷(含答案详解)
- 生产企业班组长培训课件
- 基于数据的员工能力预测模型-全面剖析
- 升压站、储能站建筑施工方案
- 脐尿管瘘护理查房
- 重症监护室护理人文关怀
- 造价咨询廉政管理制度
- 隧道养护资金管理制度
- Android移动应用开发(微课版)全套教学课件
- 腰椎间盘突出症试讲教案
- 计算机信息安全管理培训
- 体育与健康核心素养引领下的大单元教学
评论
0/150
提交评论