您的位置:首页 > 移动开发 > Unity3D

unity c# 泛型委托

2016-03-19 21:38 701 查看
我们可以通过这种方式老声明一个泛型委托
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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: