1. 程式人生 > >C#泛型在unity3D中的運用

C#泛型在unity3D中的運用

泛型是什麼?

這是摘自百度百科中對泛型的介紹:

?
泛型是c#2.0的一個新增加的特性,它為使用c#語言編寫面向物件程式增加了極大的效力和靈活性。不會強行對值型別進行裝箱和拆箱,或對引用型別進行向下強制型別轉換,所以效能得到提高。通過知道使用泛型定義的變數的型別限制,編譯器可以在一個高得多的程度上驗證型別假設,所以泛型提高了程式的型別安全。它允許程式設計師將一個實際的資料型別的規約延遲至泛型的例項被建立時才確定。泛型為開發者提供了一種高效能的程式設計方式,能夠提高程式碼的重用性,並允許開發者編寫非常優雅的解決方案。

看過之後,會用的還是懂;不會用的,也還是不懂。

所以我們還是看看泛型具體在程式中的應用:

複製程式碼
//泛型方法
//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