委托是C#新手必须要下功夫去学习的。
委托字面意思:把事情托付给别人去办。
在C#中委托就是一个类,它定义方法的类型,这样就可以把方法作为另一个方法的参数进行传递。
委托的声明:Delegate至少0个参数,至多32个参数,可以无返回值,也可以指定返回值类型。
例如:
1、 表示委托有两个参数,并返回int类型。
public delegate int DelegateMy(int x,int y);
2、 用这个类型DelegateMy去定义字段,就像平时用int,float类型去定义字段(private int x)。mydelegate就是我们使用DelegateMy委托类型定义的字段。
private DelegateMy mydelegate;
3、现在要给mydelegate赋值。首先定义一个方法,这个方法的返回值、参数类型、个数都要和我们public delegate DelegateMy(int x,int y);的一样才行。例如:求两数之和的方法:
public int numAdd(int x,int y)
{
return(x+y);
}
4、赋值
Mydelegate=numAdd;
这就OK了,使用Mydelegate就像使用方法一样了。
int Sum=Mydelegate(1,2);
using UnityEngine;
using System.Collections;
namespace Gcode
{
public class TestDelegate : MonoBehaviour
{
/// <summary>
/// 这是委托的声明
/// </summary>
public delegate int DelegateMy (int _a, int _b);
private DelegateMy mydelegate;
void Start ()
{
mydelegate = numAdd;
Debug.Log ("10+22=" + mydelegate (10 , 22));
}
public int numAdd(int x,int y){
return (x + y);
}
}
}
小结:
委托允许将方法作为参数进行传递。
委托可已用于定义回调方法。
介绍下系统自带委托声明:
C#中的委托:Action,Func
Action 表示无参,无返回值的委托
Action int,string> 表示有传入参数int,string无返回值的委托(漏了左边的<,一打出来就不显示了。。。求解)
Action int,string,bool> 表示有传入参数int,string,bool无返回值的委托
Action int,int,int,int> 表示有传入4个int型参数,无返回值的委托
Action至少0个参数,至多16个参数,无返回值。
Func是有返回值的泛型委托
Func int> 表示无参,返回值为int的委托
Func object,string,int> 表示传入参数为object, string 返回值为int的委托
Func T1,T2,,T3,int> 表示传入参数为T1,T2,,T3(泛型)返回值为int的委托
Func至少0个参数,至多16个参数,根据返回值泛型返回。必须有返回值,不可void
使用方式和上面自定义委托是一样的:如下
using UnityEngine;
using System.Collections;
using System;
namespace Gcode
{
public class TestDelegate : MonoBehaviour
{
/// <summary>
/// 这是委托的声明
/// </summary>
public delegate int DelegateMy (int _a, int _b);
private DelegateMy mydelegate;
//使用系统自带声明的委托声明字段
private Action myAction;
private Action<int> myActionint;
private Func<int> myfunc;
//这个委托就和DelegateMy委托效果一样的。
private Func<int,int,int> myfuncAdd;
void Start ()
{
mydelegate = numAdd;
Debug.Log ("10+22=" + mydelegate (10 , 22));
myfuncAdd = numAdd;
Debug.Log ("10+30=" + myfuncAdd (10 , 30));
}
public int numAdd(int x,int y){
return (x + y);
}
}
}