Jtro的技术分享:Unity中使用泛型
泛型与结构体很像,都是复用一段代码。但是随着编程技巧的提升,结构体已经不能满足“优雅”的编程的需要了。所以泛型是最好的选择。
新建一个unity空工程,在里面新建一个空物体,在空物体上挂个脚本:Water
输入下面的代码:
using System.Collections;
using System.Collections.Generic;using
UnityEngine;public class Water : MonoBehaviour {
// Use this for initialization
void Start ()
{
Fwatertest = new Fwater();//实例出一个泛型
test .info = "瓶装水";
Fwatertest1 = new Fwater();//实例出一个泛型
test1 .info = 5;
Debug.Log ("水的种类: "+test .info +" , "+"水的价格: "+test1 .info+"元");}//End of Start
}
public class Fwater//泛型类
{
public T info;//水的信息,可以是任何种类
}
运行的结果上面的就是最简单的泛型
下面的泛型可以是传多个,还可以限定泛型的类别:
新建一个工程:WaterPlus。新建一个空物体,新建一个WaterPlus脚本编写如下脚本
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class WaterPlus : MonoBehaviour
{
// Use this for initialization
void Start ()
{
WaterplusClass < string , WaterBase> test = new WaterplusClass< string, WaterBase>();//实例一个test泛型
test.date = "2017.9.11";
test.info = new WaterBase ();test.info.zhonlei = "瓶装水";test.info.wendu = 20;
Debug.Log ("水的生产日期: "+test .date +" ,"+"水的种类: " +test .info .zhonlei+"水的温度: "+ test .info .wendu);
WaterplusClasstest1 = new WaterplusClass();//实例一个test1 泛型
test1.date = 20170911;
test1.info = new WaterBase ();
test1.info.zhonlei = "桶装水";
test1.info.wendu = 15;
Debug.Log ("水的生产日期: "+test1 .date +" ,"+"水的种类: " +test1 .info .zhonlei+"水的温度: "+ test1 .info .wendu);
}//End of Start
}
再新建一个脚本,不继承mono,编写如下脚本:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;//不继承mono
public class WaterplusClasswhere U : WaterBase //限定U只能接收waterbase类型的数据
{
public T date;//水的生产日期
public U info;//水的种类和价格
}
public class WaterBase
{
public string zhonlei;
public int wendu;
}
运行之后:
运行结果最后是泛型方法,同样是新建scene,新建空物体,新建脚本fxfangfa,编写如下脚本:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class FXFangFa : MonoBehaviour {
// Use this for initialization
void Start () {
Test test = new Test ();
string a = test.Fx("FangXing");
int s = test.Fx(12);Debug.Log (a + s);
}//End of Start
// Update is called once per frame
void Update () {}//End of Update
}public class Test //类中的泛型方法{public T Fx(T t)
{
return t;
}
}
运行结果好了泛型的使用就介绍这么多,感谢简书,感谢你的阅读。