Generics#2 (再談泛型)
泛型的功能是傳入 Class T 為類別或方法的參數;這提供我們一個彈性,就是在執行時期才決定某些東西的型別,就以前面的 List 為例,我們來看微軟的 src code
namespace System.Collections.Generic { using System; ... public class List<T> : IList<T>, ... { ... private T[] _items; ...不重要的地方我截掉了,可以看到它是用普通陣列為底去實作的,對於 List 的操作(比方 Sort();)來說陣列元素是什麼型別完全沒有影響,但如果我們沒有 T,要定義 List 中的普通陣列要嘛就是 object[] _items 操作完出去在轉型,不然就是建構子就要傳具型別的陣列進來,像 List(SomeType[] array)。
但對前者,問題是效能差(因為要轉型),而且多了不必要的轉型錯誤可能性,後者則是泛用性低落,每多一個型別就被迫要寫一個多載,造成大量的程式碼重覆。所以在需要把型別當參數的這個背景需求下發展了泛型這個功能。
沒有留言:
張貼留言