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

C#泛型在unity3D中的运用.

2015-06-06 17:26 525 查看
泛型是什么?

这是摘自百度百科中对泛型的介绍:

?
看过之后,会用的还是懂;不会用的,也还是不懂。

所以我们还是看看泛型具体在程序中的应用:

//泛型方法
//unity3D中用的最多的泛型方法应该是GetCompent<T>
//T就是占位符,当调用这个方法的你要告诉编译器,这个T的具体类型。
//另外,"T"只是一个标识,完全可以用其他代替,如"K","MyType"等,只是使用习惯。
//比如:
GameObject player;
Animator animator;
void Start()
{
//在场景中找到名为MyPlayer物体
player = GameObject.Find("MyPlayer");
//获取该物体上的Animator组件
animator = player.GetComponent<Animator>();
//对于使用AddComponent<T>()、GetCompent<T>()这两个泛型方法来说,需要了解的就是:T就是你想要的具体的组件类型。
//对于泛型方法来说,泛型的作用就是占位和约束的作用。
}
//下面来说声明泛型函数
/// <summary>
/// 比较等级;
/// </summary>
/// <returns>
/// 若t1>=t2的等级,则返回true;否则返回false
/// </returns>
/// where T : IRole where K : IRole的作用是约束传入的两个参数类型必须要实现IRole这个接口;
/// 这样就定义好了一个泛型方法
public bool CompareLevel<T,K>(T t1,    K t2) where T : IRole where K : IRole
{
//因为泛型t1,t2都被约束需要实现接口,所以我们可以强制转换到IRole来获取level比较
return ((IRole)t1).level >= ((IRole)t2).level;
}
//那么怎么使用呢?
//接下来看:
public void Test()
{
//先定义三个测试用的类型
MyNPC npc =new MyNPC();
MyPlayer player =new MyPlayer();
MyMonster monster =new MyMonster();
//对各个类型的level赋值
npc.level =1;
player.level =2;
monster.level =3;
//比较npc和player的level就很简单了,只需要这样调用即可
bool b1 = CompareLevel<MyNPC,MyPlayer>(npc,player); //npc?payer//false
bool b2 = CompareLevel<MyNPC,MyMonster>(npc,monster);//npc?monster//false
bool b3 = CompareLevel<MyPlayer,MyMonster>(player,monster);//payer?monster//false
}

public interface IRole
{
int level{get;set;}
}
public class MyPlayer:IRole
{
public int level{get;set;}
}
public class MyNPC:IRole
{
public int level{get;set;}
}
public class MyMonster:IRole
{
public int level{get;set;}
}


这只介绍了泛型方法的使用。还有泛型类,泛型接口等,在此就不多说了。

用C#开发unity3D游戏用的最多的泛型应该还是泛型集合List<T>之类的,这些就靠平时慢慢熟悉了。
http://www.cnblogs.com/wiyi/archive/2013/02/19/2917275.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: