iT邦幫忙

DAY 29
3

ASP.NET 由淺入深系列 第 29

91之ASP.NET由淺入深 不負責講座 Day29 - 泛型

經過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取得。

2.Boxing & Unboxing
(1)相關:
實值型別
參考型別
(2)簡單的說:實值型別與object型別的轉換
(3)還是很難懂嗎?我們拿一個實體的例子來做說明,大家都有聽過周杰倫的半島鐵盒嗎?
J:小姐,請問有賣半島鐵盒嗎?
店員:有啊,你從前面右轉的第二排架子上就有了。

半島鐵盒,是一個實體的東西,我們可以把他當作"實值型別"來看。
前面右轉第二排架子上,我們可以當作這是"參考型別的記憶體位址"

半島鐵盒這個東西,放到某個架子上(或裝在某個盒子裡),這就是boxing
要取值的時候得先知道架子的位置走過去架子那邊(或把箱子打開)才能取出值取出前要檢查是不是我們要的半島鐵盒,是的話再把它拿出來,這就是unboxing

想像一下,架子,就是我們的Array。
Array裡面可能放著半島鐵盒、全島鐵盒、中島鐵盒、長島鐵盒還有一支烏龜...
(烏龜是不能轉型成鐵盒的...)

(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)泛型集合對應


上一篇
91之ASP.NET由淺入深 不負責講座 Day28 - jQuery with Ajax in ASP.NET
下一篇
91之ASP.NET由淺入深 不負責講座 Day30 - ORM introduction
系列文
ASP.NET 由淺入深30

尚未有邦友留言

立即登入留言