前往
大廳
主題

C#筆記_泛型(入門02)

又在亂玩一通 | 2023-02-18 20:18:12 | 巴幣 2 | 人氣 353

透過Generic(泛型),只要宣告一個CreateArray<T>就可以讓調用他的Method使用不同的Type

這裡CodeMonkey同時對CreateArray<T>使用Int跟String

5:38處開始介紹,如何讓CreateArray能同時輸入Int和String

可以看到一般情況同時使用Int和String,會被報錯

因此CodeMonkey另外定義了一個Multi Type的Generic,T1以及T2
讓T1可以裝Int,T2可以裝String

6:57處開始,CodeMonkey介紹Generic與Delegate的組合運用
CodeMonkey另外宣告了委託Action和Func
首先是Action的部分

檢查裡面的定義,會是一般沒有parameter的樣子

但是可以看到Action後面有一些版本的Generic

所以CodeMonkey舉了個範例是一個Action包了2種不同Type的Generic
以及另外一個Action包了6種不同Type的Generic

再來是Func的部分
可以看到至少需要一個Type給parameter,也就是Result

Func一樣也有很多種Type可以選擇

8:07處,CodeMonkey開始介紹,Action和Action,同等於什麼樣子的Delegate
就跟Action以及Func的定義一樣

8:49處,CodeMonkey介紹,當要寫整個Class的時候也可以使用
直接在Class的名稱後面加Generic

創建一個Class的實例
當核准進入Class並且嘗試看field時,可以發現不需要有field在這個type int 裡

把CreataArray這功能放進Class中,可以不用特別去定義Generic,因為Class已經在實例化時定義好Generic了

另外也可以為Generic增加限制,利用Interface舉例
一個簡單的IEnemy interface,簡單契約了一個Method

接下來Class可以包著Generic的同時,加寫where T來確保不管從Generic使用了什麼type,都會implement IEnemy的契約
現在Generic會應用IEnemy,可以直接地使用在interface定義的method

接下來可以創建一個Constructor,讓它包一個Generic,然後去call Damage這個Method

在創建兩個同樣與IEnemy簽契約的Class

就能在Start()中,
讓MyClass包著<EnemyMinion>、MyClass包著<EnemyArcher>
新增一個MyClass<EnemyMinion>()的物件給myClass,
而在給myClass之前,要再先新增一個EnemyMinion()這個class的物件給MyClass<EnemyMinion>()
也就是 new MyClass<EnemyMinion>(new EnemyMinion());

執行順序
之後EnemyMinion()被放到value,透過value.Damage呼叫EnemyMinion這Classs當中的Damage這個Method,
再執行Debug.Log("EnemyMinion.Damage")

11:44處CodeMonkey開始介紹,還有其他的限制可以增加到Generic中

也可以在interface中使用Generic


好懶哦...寫筆記斷斷續續的

創作回應

更多創作