Unity提供的Action和Func都是基于C#的委托Delegate加多一层封装,Action用于定义无返回值
的委托,Func用于定义有返回值
的委托。
语法
delegate
delegate <return-type> <delegate-name> <parameter-list>
Action
Action<parameter-list> <Action-name>
Func
Func<parameter-list,out-result-type> <Func-name>
Func返回结果在参数列表之后
使用
单播:
myDelegate=myFun_1;
myDelegate();//执行
多播:
myDelegate=myFun_1;
myDelegate+=myFun_2;
myDelegate+=...;
myDelegate();//执行
Delegate
无返回值
public delegate void Delegate();
Delegate myDelegate;
myDelegate=myFun_1;
myDelegate+=myFun_2;
myDelegate();
有返回值
public delegate int Delegate();
Delegate myDelegate;
myDelegate=myFun_3;
myDelegate();
Action
无返回值,无参数
Action action;
action=myFun_1;
action+=myFun_2;
action();
无返回值,有参数
Action<int,int> action;
action=myFun_4;
action();
Func
有返回值,无参数
Func<int> func;
func=myFun_3;
func();
有返回值,有参数
Func<int,int,int> func;
func=myFun_5;
func();
委托的函数
void myFun_1(){};
void myFun_2(){};
int myFun_3(){};
void myFun_4(int num1,int num2);
int myFun_5(int num1,int num2);
委托作为参数
public delegate int Delegate(int num1,int num2);
void myFun(Delegate myDelegate){
Debug.log(myDelegate(1024,2048));
}
int fun01(int num1,int num2){
return num1+num2;
}
int fun02(int num1,int num2){
return num1-num2;
}
int fun03(int num1,int num2){
return num1*num2;
}
void Start(){
myFun(fun01);
myFun(fun02);
myFun(fun03);
}