[ASP.NET]91之ASP.NET由淺入深 不負責講座 Day29 - 泛型
前言
經過Day25~Day28 Ajax增加user experience的洗禮後,我們要再把注意力拉回.net framework的基礎: 泛型。
這其實有點難描述,因為會繞到更多的基礎,最後可能會從型別開始講。這邊,太基礎的部分,我會附上reference來當作參考。
Issues
- CLR 2.0的新功能
- 使用泛用型別以最佳化程式碼重複使用、型別安全性和效能。
- 泛型的最常見用法是建立集合類別。
- .NET Framework 類別庫包含 System.Collections.Generic 命名空間中的數種新泛用集合類別。在任何可能的情況下都應該使用這些類別取代類別 (例如在 System.Collections 命名空間中的 ArrayList)。
- 您可以建立自己的泛用介面、類別、方法、事件和委派 (Delegate)。
- 泛用類別可能會被限制為啟用對特定資料型別上的方法進行存取。
- 在泛型資料型別中使用的型別資訊,可以在執行階段透過Reflection取得。
簡單的說:實值型別與object型別的轉換
boxing & unboxing的問題
- 型別轉換的錯誤
- 效能的消耗
- 開發時編譯無法得知錯誤,要到run time才知道
- 參考型別Null的問
泛型的優點
解決大部分boxing與unboxing的問題
- 安全型別,避免轉型失敗的風險
- 避免boxing與unboxing效能消耗問題
- 編譯時期就能知道是否有型別錯誤
同樣的function,針對不同型別,可以只寫一份。
例如factory pattern透過Reflection產生任意型別 :
{
var obj = (T)Assembly.Load(typeof(T).Assembly.FullName).CreateInstance(typeof(T).Assembly.GetName().Name + "." + product);
return obj;
}
補充
blog 與課程更新內容,請前往新站位置:http://tdd.best/