委托(delegate)
目录
委托(delegate)是什么?
委托 = 一份能"记载方法"的武功秘籍.你可以把方法写进去,也可以把它传给别人, 让别人执行方法 .
本质上是:一种方法的类型(method type). 也就是说它不是方法, 而是“装方法的容器”.
1.定义一个委托
定义一本"描述某种招式"的秘籍
public delegate void Kungfu();有一种"武功招式",它的形式是:无参数,无返回值的方法
void 降龙十八掌() {}
void 打狗棍法() {}
void 独孤九剑() {}这些"武功招式"(方法)都可以放到“Kungfu”这本"秘籍"(方法容器)内
2.使用委托
往秘籍(方法容器)里写招式(方法)
Kungfu book = 降龙十八掌;当然,你可以加更多招式(多播委托),前提是秘籍为无参无返回值,所以招式也必须是无参无返回值
book += 打狗棍法;
book += 独孤九剑;这样下来就相当于Kungfu这本秘籍(方法容器)内包含三招(方法)
3.执行委托
book();输出顺序会依次执行所有写进秘籍的招式
4.大局观
委托 = 定义了一类方法的类型,可以保存多个方法,并在需要时执行它们.
委托解决了什么问题? —— 当方法可以像参数一样传递.
本来把方法"传来传去"是不可能的,但委托让这件事情变得可能.
5.抽象解释
委托让"方法"变成了"数据".
- 存储方法
- 传递方法
- 修改方法列表
- 在未来某一刻执行方法
总结:
- 委托是一种类型,不是方法.
- 委托存的是方法引用,类似"方法的指针"
- 一个委托可以存多多个方法
- 委托能让"方法作为参数传递"