目录

委托(delegate)

委托(delegate)是什么?

委托 = 一份能"记载方法"的武功秘籍.你可以把方法写进去,也可以把它传给别人, 让别人执行方法 .

本质上是:一种方法的类型(method type). 也就是说它不是方法, 而是“装方法的容器”.

1.定义一个委托

定义一本"描述某种招式"的秘籍

public delegate void Kungfu();

有一种"武功招式",它的形式是:无参数,无返回值的方法

void 降龙十八掌() {}
void 打狗棍法() {}
void 独孤九剑() {}

这些"武功招式"(方法)都可以放到“Kungfu”这本"秘籍"(方法容器)内

2.使用委托

往秘籍(方法容器)里写招式(方法)

Kungfu book = 降龙十八掌;

当然,你可以加更多招式(多播委托),前提是秘籍为无参无返回值,所以招式也必须是无参无返回值

book += 打狗棍法;
book += 独孤九剑;

这样下来就相当于Kungfu这本秘籍(方法容器)内包含三招(方法)

3.执行委托

book();

输出顺序会依次执行所有写进秘籍的招式

4.大局观

委托 = 定义了一类方法的类型,可以保存多个方法,并在需要时执行它们.

委托解决了什么问题? —— 当方法可以像参数一样传递.

本来把方法"传来传去"是不可能的,但委托让这件事情变得可能.

5.抽象解释

委托让"方法"变成了"数据".

  • 存储方法
  • 传递方法
  • 修改方法列表
  • 在未来某一刻执行方法

总结:

  1. 委托是一种类型,不是方法.
  2. 委托存的是方法引用,类似"方法的指针"
  3. 一个委托可以存多多个方法
  4. 委托能让"方法作为参数传递"