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

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

前言

經過Day25~Day28 Ajax增加user experience的洗禮後,我們要再把注意力拉回.net framework的基礎: 泛型。

這其實有點難描述,因為會繞到更多的基礎,最後可能會從型別開始講。這邊,太基礎的部分,我會附上reference來當作參考。

Issues

介紹

  1. CLR 2.0的新功能
  2. 使用泛用型別以最佳化程式碼重複使用、型別安全性和效能。
  3. 泛型的最常見用法是建立集合類別。
  4. .NET Framework 類別庫包含 System.Collections.Generic 命名空間中的數種新泛用集合類別。在任何可能的情況下都應該使用這些類別取代類別 (例如在 System.Collections 命名空間中的 ArrayList)。
  5. 您可以建立自己的泛用介面、類別、方法、事件和委派 (Delegate)。
  6. 泛用類別可能會被限制為啟用對特定資料型別上的方法進行存取。
  7. 在泛型資料型別中使用的型別資訊,可以在執行階段透過Reflection取得。


Boxing & Unboxing

  1. 實值型別
  2. 參考型別

簡單的說:實值型別與object型別的轉換


boxing & unboxing的問題

  1. 型別轉換的錯誤
  2. 效能的消耗
  3. 開發時編譯無法得知錯誤,要到run time才知道
  4. 參考型別Null的問


泛型的優點
解決大部分boxing與unboxing的問題

  1. 安全型別,避免轉型失敗的風險
  2. 避免boxing與unboxing效能消耗問題
  3. 編譯時期就能知道是否有型別錯誤

同樣的function,針對不同型別,可以只寫一份。

例如factory pattern透過Reflection產生任意型別 :

            {
                var obj = (T)Assembly.Load(typeof(T).Assembly.FullName).CreateInstance(typeof(T).Assembly.GetName().Name + "." + product);
                return obj;
            }

補充

  1. 各Collection陣列個別特性列表
  2. 泛型集合對應
  3. [.NET] 使用 Reflection 呼叫泛型方法


blog 與課程更新內容,請前往新站位置:http://tdd.best/