Sorry, your browser cannot access this site
This page requires browser support (enable) JavaScript
Learn more >

委托

一、什么是委托

委托是 函数(方法)的容器 可以理解为表示函数(方法)的变量类型,用来 存储、传递函数(方法) 委托的本质是一个类,用来定义函数(方法)的类型(返回值和参数的类型) 不同的 函数(方法)必须对应和各自"格式"一致的委托

二、基本语法

  1. 关键字:delegate
  2. 语法:访问修饰符 delegate 返回值 委托名(参数列表);
  3. 写在哪里? 可以申明在 namespace 和 class 语句块中 更多的写在 namespace 中
  4. 简单记忆委托语法 就是 函数申明语法前面加一个 delegate 关键字

三、自定义委托函数

注意: private 其它命名空间就不能用了,一般使用 public 访问修饰默认不写 为 public 在别的命名空间中也能使用

1
2
3
4
//声明了一个可以用了来存储无参无返回值的委托
delegate void MyFun();
//声明了一个可以用了来存储返回int 参数为int 的委托
delegate void MyFun2();

四、使用定义好的委托

注意:

  1. 委托是 专门用来装载 函数的 容器
  2. 委托的申明是不能重名的
  3. 委托可以存储多个函数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//---存储---//
//方法一
MyFun f = new MyFun(Fun);
//方法二
MyFun f2 = Fun;
//方法三 增加
f += Fun;
//方法四 删除委托
f -= Fun;
void Fun()
{
Debug.Log("1");
}
//---调用---//
//方法一
f.Invoke();
//方法二
f();

五、系统提供给我们的委托

  1. 引用命名空间 using System;
  2. 系统提供的委托
委托类型 意义
Acion 无参无返回值的委托
Func<> 有返回值的的委托
Action<> n 个参数的委托(最多 16 个)
Func<> 有返回值的的委托,n 个参数的委托(最多 16 个)

六、委托的多个返回值

问题:当拥有多个返回值的委托容器存储多个函数时,如何获取每一个执行函数后的返回值? 2024-09-10 103101.png

解决方法:委托容器中存在 GetInvocationList()可以返回一个委托数组,在通过迭代器遍历获取到每一个函数 2024-09-10 103349.png

评论