委托 和 事件 总括:

前辈经典文章:C#中的委托和事件

                          C#中的委托和事件(续)

                          浅谈委托和事件(一)

委托 和 事件 在.Net Framework应用广泛。我们从什么是委托、为什么要使用委托、事件的由来、.Net Framework中的委托和事件、委托和事件对Observer设计模式的意义 角度来分析。

什么是委托:

委托是一种调用回调方法,类似C中的指针。

委托delegate 是一个类,当创建实例时需要传入方法名称,每个委托都有一个签名:

签名:delegate int DelegateDemo(string s);

创建代理实例时,要传入一个方法名作为构造函数,这个方法必须满足对应的委托签名的特征:

实例化:

         定义方法  private static int Function(stirng s){}   ;           实例化委托:DelegateDemo dd = new DelegateDemo(Function);

调用:dd(" this is a delegate");

小结:1、这里委托delegate是一个类,它定义了方法的类型,使得可以将方法作为另一个方法的参数进行传递,可以避免大量的if else的使用,提高了代码的扩展性;

          2、使用委托可以将多个相同的方法绑定到同一个委托变量上,当调用此变量时,可以依次调用所有绑定的方法;

什么是事件:事件是类似声明了一个进行了封装的委托类型的变量。

委托和事件的区别:

          1、事件我们只能使用 +=、-=,不能用=进行来赋值,限制了用户直接操作委托的权限;

           2、对照字段和属性,委托和事件似乎也是如此,它是对委托实例的一层封装,使客户端不能随意更改、重置内部的委托列表,只能增加和移除,使代码有更好的封装性;

Observer:Subject(被观察者)Observer(观察者)

              设计模式是为了定义对象间的一种一对多的依赖关系,以便一个对象状态发生改变时,其他依赖于它的对象会被告知和更新,松耦合的设计模式;

.Net Framework  中的委托和事件:参考规范

       .Net Framework的编码规范:

  • 委托类型的名称都应该以EventHandler结束。
  • 委托的原型定义:有一个void返回值,并接受两个输入参数:一个Object 类型,一个 EventArgs类型(或继承自EventArgs)。
  • 事件的命名为 委托去掉 EventHandler之后剩余的部分。
  • 继承自EventArgs的类型应该以EventArgs结尾。

再做一下说明:

  1. 委托声明原型中的Object类型的参数代表了Subject,也就是监视对象。
  2. EventArgs 对象包含了Observer所感兴趣的数据,在本例中是temperature。

上面这些其实不仅仅是为了编码规范而已,这样也使得程序有更大的灵活性。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值