深入委托和事件

事件是委托的一种模型。


一瓶牛奶和一张报纸引发的 "委托" 事件

有一个人是定牛奶的,牛奶箱子每天都会有牛奶,有一天我不想喝牛奶了,想要定报纸,想要使用原来的牛奶箱来投递报纸,希望报纸公司把报纸投递到牛奶箱子了,但报纸公司只认报箱,不能投到牛奶箱子里。通过这件事情引发出委托事件的思考。


委托的定义 (What)

委托是一种引用类型,它可以生成实例,有点相当于一个类,它有一个特定的签名(指它的返回类型和参数列表)。

委托是一种引用方法的类型。一旦为委托分配了方法,那么委托将于该方法具有完全相同的行为。委托方法的使用可以像其他任何方法一样,具有参数和返回值。

委托是函数的封装,它代表一"类"函数。它们都符合一定的签名:拥有相同的参数列表、返回值类型。同时,委托也可以看成是对函数的抽象,是函数的“类”。此时,委托的实例将代表一个具体的函数。


为什么使用委托

1) 更加灵活的方法调用

2) 用于异步回调

3) 多线程编程中使用委托来指定启动一个线程时调用的方法

4) C#中的事件模型。用它们来指明处理给定事件的方法。


如何使用委托

先声明委托,再实例化并指明所代具体方法。


1) 委托应用——异步回调(非常重要的应用)

异步回调: 由于实例化委托是一个对象,所以可以将其作为参数进行传递,也可以将其赋值给属性。这样,方法便可以将一个委托作为参数来接受,并且以后可以调用该委托。这成为异步回调,是在较长进程完成后用来通知调用方的产用方法。以这种方式使用委托时,使用委托的代码无需了解有关所有方法的实现方面的任何信息。

回调的另一个常见用法是定义自定义的比较方法并将该委托传递给排序方法。


何时使用委托?何时使用接口?

以下情况中使用委托:

1) 当使用事件设计模型时。

2) 当封装静态方法可取时。

3) 当调用方不需要访问实现该方法的对象中的其他属性、方法或接口时。

4) 需要方便的组合。

5) 当类可能需要该方法的多个实现时。


以下情况中使用接口:

1) 当存在一组可能被调用的相关方法时。

2) 当类只需要方法的单个实例时。

3) 当使用接口的类想要将该类接口强制转换为其他接口或类的类型时。


2) 多播委托

多播委托——引用多个方法的委托,它能连续调用每个方法。委托必须是同类型的,返回类型必须是void,不能带输出参数(可以带引用参数)。多播委托应用于事件模型中。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值