unity c# 泛型委托

来源:互联网 发布:mysql安装教程 图解 编辑:程序博客网 时间:2024/05/29 05:10
我们可以通过这种方式老声明一个泛型委托
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;    }}






0 0
原创粉丝点击