网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 论文素材 设计下载 最新论文 下载排行 论文上传 在线投稿 联系我们
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > C# > 正文
C#事件与委托趣谈
来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/14
下载{$ArticleTitle}原创论文样式
uot;;employee.Age = 25;Admin admin = new Admin(); employee.PlayGame += new DelegateClassHandle(admin.Notify);employee.Games();修改后的代码运行的结果是,当Mike调用Games方法玩游戏时,会自动触发PlayGame事件,而该事件携带相关信息通知admin,后者的Notify方法将接收到数据并输出“Mike is 25”,告诉董事长是Mike,25岁,正在上班时间玩游戏。 委托是可以多路广播(Mulitcast)的,即一个事件可以委托给多个对象接收并处理。在上面的用例中,如果有另一位经理与董事长具有同样的癖好,也可以让委托对象将雇员的PlayGame事件通知他。首先定义经理类:public class Manager{    public void Notify(object sender, CustomeEvetnArgs e)    {        System.Console.WriteLine(sender.ToString() + "-" + e.Name);    }}经理Manager类型的Notify方法与Admin一致,他也接受到相应的信息。委托的多路广播绑定的方法仍然是使用+=运算符,其方法如下面的代码所示:Employee employee = new Employee();employee.Name = "Mike";employee.Age = 25;Admin admin = new Admin();Manager manager = new Manager(); employee.PlayGame += new DelegateClassHandle(admin.Notify);employee.PlayGame += new DelegateClassHandle(manager.Notify);employee.Games();

执行该方法,读者将看到admin和manager的Notify方法都会被事件通知并调用执行。通过这样的方法,董事长和经理都会知道Mike在玩游戏了。

如果董事长不希望经理也收到这个通知,该如何解除PlayGame对manager的事件绑定呢?同样非常简单,在employee.Games方法被调用前执行下列语句即可:

employee.PlayGame -= new DelegateClassHandle(manager.Notify);

 最后需要提醒读者注意的,Employee类中的Games方法在触发事件PlayGame之前需要判断该事件是否为null。当employee对象的Games方法触发事件PlayGame后,必须有一个目标函数来处理这个事件,而该语句正是判断该目标函数是否存在。如果将这个判断去掉,且对事件不进行任何绑定而直接调用Games方法,程序将在事件PlayGame处弹出一个NullReferenceException的异常。

 

读者能够从委托与事件的代码中得出什么结论吗?两个需要存在调用关系的类型,在各自的实现中却没有编写实际的调用代码,它们只是通过一个事件和一个第三方的委托类型完成了消息的传递过程。两个类型之间不存在任何的紧密耦合,它们看似松散地通过一个委托对象中通信,实现了本书一直宣传的“高聚合”和“低耦合”观点。

 

  • 上一篇资讯: C#正则表达式整理备忘
  • 网学推荐

    免费论文

    原创论文

    浏览:
    设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
    版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
    湘ICP备09003080号