[C#基础学习] Delegate 委托
C++中的指针可以指向对应类型的数据并对其进行操作,但是并没有可以指向某个函数并进行操作的方式。而C#中的delegate就相当于一个指向某个函数的指针,需要时可以直接调用定义的delegate函数来调用对应的函数。
定义方式:
域 delegate [数据类型] 函数名(传参)
基础用法
定义了一个delegate后,仅能将这个函数指向同数据类型、传参一致的函数。
例如如下内容:
public delegate int outNum(int n);
int print(int n)
{
return n;
}
int sum(int n)
{
return n + 10;
}
// Start is called before the first frame update
void Start()
{
outNum out1 = new outNum(print);
outNum out2 = new outNum(sum);
Debug.Log("print:"+out1(3));
Debug.Log("sum:"+out2(3));
}
输出结果为
print:3
sum:13
也可以对delegate函数进行重新定向,如下:
// Start is called before the first frame update
void Start()
{
outNum out1 = new outNum(print);
Debug.Log("print:"+out1(3));
out1 =new outNum(sum);
Debug.Log("sum:"+out1(3));
}
输出结果仍然为
print:3
sum:13
Multicasting 多播
不同于指针的是,指针做加减法会改变指针指向的地址,从而读取下一位地址的数据。而delegate的加减法则是增加所指向的函数,并按顺序处理。
如下例子:
void Start()
{
outNum out1 = new outNum(print);
outNum out2 = new outNum(sum);
out1 += out2;
Debug.Log("sum:"+out1(3));
}
输出结果为
sum:13
过程为:先执行out1初始指向的print函数,然后执行out2所指向的函数,因此是队列形式执行先后顺序。