博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c# 委托和事件
阅读量:6360 次
发布时间:2019-06-23

本文共 1823 字,大约阅读时间需要 6 分钟。

C#的委托和事件


委托:给我的第一感觉就是C++的函数指针,两者几乎一样。

不过他们有本质的区别:委托对象是一个对象,而函数指针是一个函数的入口地址

事件: 由两部分组成,一个事件发布者,一个事件接受者

事件发布者:

  • 定义一个委托(delegate)
  • 定义一个事件 (event)
  • 定义触发事件的方法

事件接受者

  • 定义事件处理方法
  • 注册事件 (实例化一个委托并加入到事件中)

附图:

281917330663655.png


一个简单例子:

两个类:猫和老鼠, 都有叫的方法。 当猫叫的时候,触发老鼠叫


public class Cat : Animal{    public Cat (String name) : base(name) {}    public Cat () : base() {}    //声明一个委托,具体参数见附    public delegate void CatShoutEventHandle(Object sender, CatShoutEventArgs args);    //声明一个事件    public event CatShoutEventHandle CatShout;    public override void shout()     {        Console.Write( name + ":喵喵喵~\n");        if(CatShout != null)         {            CatShoutEventArgs e = new CatShoutEventArgs();            e.Name = this.name;            CatShout(this, e);        }    }}

public class Mouse : Animal{    public Mouse () : base(){}    public Mouse (String name) : base(name) {}    public void run(Object sender, CatShoutEventArgs e)     {        Console.WriteLine(this.name+ ": " + e.Name + "猫来了,赶紧逃!");    }}

class MainClass{    public static void Main (string[] args)    {        Cat cat = new Cat("Tom");        Mouse mouseJack = new Mouse("Jack");        Mouse mouseJerry = new Mouse("Jerry");        //注册事件        cat.CatShout += new Cat.CatShoutEventHandle(mouseJack.run);        cat.CatShout += new Cat.CatShoutEventHandle(mouseJerry.run);        cat.shout ();    }}

附:

Observer(观察者)设计模式:

Observer设计模式是为了定义对象间的一种一对多的依赖关系,以便于当一个对象的状态

改变时,其他依赖于它的对象会被自动告知并更新。Observer模式是一种松耦合的设计模式。

.Net Framework中的委托与事件

.Net Framework的编码规范:

委托类型的名称都应该以EventHandler结束。
委托的原型定义:有一个void返回值,并接受两个输入参数:一个Object 类型,一个 EventArgs类型(或继承自EventArgs)。
许多事件处理函数都是这样的

事件的命名为 委托去掉 EventHandler之后剩余的部分。

继承自EventArgs的类型应该以EventArgs结尾。

再做一下说明:委托声明原型中的Object类型的参数代表了Subject,

也就是监视对象,回调函数可以通过它访问触发事件的对象。
EventArgs 对象包含了Observer所感兴趣的数据

转载于:https://www.cnblogs.com/newscar/p/4256571.html

你可能感兴趣的文章
CentOS6 手动编译升级 gcc
查看>>
memcached的安装与开启脚本
查看>>
zabbix 邮件报警 -- sendmail
查看>>
JavaScript异步编程
查看>>
tcpdump用法小记
查看>>
Oracle随机函数—dbms_random
查看>>
windows下开发库路径解决方案
查看>>
linux迁移mysql数据目录
查看>>
脚本源码安装LNMP
查看>>
Percona Server安装
查看>>
函数为左边表达式
查看>>
2015.06.04 工作任务与心得
查看>>
icinga2使用587端口发邮件
查看>>
【14】Python100例基础练习(1)
查看>>
boost bind使用指南
查看>>
Android M 特性 Doze and App Standby模式详解
查看>>
IE FF(火狐) line-height兼容详解
查看>>
TX Text Control文字处理教程(3)打印操作
查看>>
mysqld_multi实现多主一从复制
查看>>
中介模式
查看>>