經過Day25~Day28 Ajax增加user experience的洗禮後,
我們要再把注意力拉回.net framework的基礎: 泛型。
這其實有點難描述,因為會繞到更多的基礎,最後可能會從型別開始講。
這邊,太基礎的部分,我會附上reference來當作參考。
1.介紹
(1)CLR 2.0的新功能
(2)使用泛用型別以最佳化程式碼重複使用、型別安全性和效能。
(3)泛型的最常見用法是建立集合類別。
(4).NET Framework 類別庫包含 System.Collections.Generic 命名空間中的數種新泛用集合類別。在任何可能的情況下都應該使用這些類別取代類別 (例如在 System.Collections 命名空間中的 ArrayList)。
(5)您可以建立自己的泛用介面、類別、方法、事件和委派 (Delegate)。
(6)泛用類別可能會被限制為啟用對特定資料型別上的方法進行存取。
(7)在泛型資料型別中使用的型別資訊,可以在執行階段透過Reflection取得。
半島鐵盒,是一個實體的東西,我們可以把他當作"實值型別"來看。
前面右轉第二排架子上,我們可以當作這是"參考型別的記憶體位址"
把半島鐵盒這個東西,放到某個架子上(或裝在某個盒子裡),這就是boxing。
要取值的時候得先知道架子的位置,走過去架子那邊(或把箱子打開)才能取出值,取出前要檢查是不是我們要的半島鐵盒,是的話再把它拿出來,這就是unboxing。
(4)boxing & unboxing的問題
-型別轉換的錯誤
-效能的消耗
-開發時編譯無法得知錯誤,要到run time才知道
-參考型別Null的問題
3.泛型的優點
(1)解決大部分boxing與unboxing的問題
-安全型別,避免轉型失敗的風險
-避免boxing與unboxing效能消耗問題
-編譯時期就能知道是否有型別錯誤
(2)同樣的function,針對不同型別,可以只寫一份
例如factory pattern透過Reflection產生任意型別
public static T CreateProduct<T>(string product) where T : class
{
var obj = (T)Assembly.Load(typeof(T).Assembly.FullName).CreateInstance(typeof(T).Assembly.GetName().Name + "." + product);
return obj;
}
4.補充
(1)各Collection陣列個別特性列表
(2)泛型集合對應