我们可以通过这种方式老声明一个泛型委托
public delegate T DataChange<T>(T arg);
我们可以在unity中写个例子来看一下泛型委托的用法,目录结构如下:
DeleteT中的代码如下
using UnityEngine;
using System.Collections;
public class DeleteT {
// Use this for initialization
public delegate T DataChange<T>(T arg);
public static T Transform<T>(T value, DataChange<T> t) {
value = t(value);
return value;
}
}
TestDeleteT中的代码如下
using UnityEngine;
using System.Collections;
public class TestDeleteT : MonoBehaviour {
public void GetChangeAge() {
int age = 10;
int value = DeleteT.Transform(age, ChangeAge);
Debug.Log(" value "+ value);
}
public int ChangeAge(int age) {
return age * age;
}
}
这样我们就可以简单的知道泛型委托的用法了。
Action委托
在System空间对Action的定义为
delegate void Action();
delete void Action<int T>();
delete void Action<int T1,int T2>();
........以此类推,最多到T16
也就是我们可以这样来使用Action
public class MethodAction : MonoBehaviour {
public void TestAction() {
Action a = DataChange;
a();
Action<int> age = DataChange;
age(11);
}
public void DataChange() {
Debug.Log("DataChange ");
}
public void DataChange(int age) {
Debug.Log("DataChange age "+ age);
}
}
Func委托
在System空间对Func的定义如下
delegate TResult Func<out TResult>()
delegate TResult Func<int T,out TResult>()
delegate TResult Func<int T1,int T2,out TResult>()
........以此类推,最多到T16
也就是我们可以这样来使用Func
public class MethodFunc : MonoBehaviour {
public void TestFunc() {
Func<int,int> age = DataChange;
int data = age(11);
Debug.Log("data " + data);
}
public int DataChange(int age) {
return age * age;
}
}