**型別參數** — 方法/類別定義時不指定具體型別,使用時才由呼叫端提供。泛型讓「型別」成為參數,如同「值」可作參數。
手寫強型別包裝類別,實作 IList 並內部委派 ArrayList:
public class PersonCollection : IList
{
private ArrayList _list = new ArrayList();
public Person this[int i] => (Person)_list[i]; // 強制轉型
public int Add(Person p) { _list.Add(p); return _list.Count-1; }
public void Remove(Person p) => _list.Remove(p);
// 顯性介面實作 IList 成員...
}
缺點:每新增一個型別 (Dog、Car、Order...) 就得 **Copy-Paste 修改型別名稱**,重複代碼爆炸、維護惡夢。
List persons = new List();
persons.Add(new Person());
Person p = persons[0]; // 編譯期類型檢查,無轉型
List dogs = new List();
dogs.Add(new Dog());
Dog d = dogs[0];
List 服務所有型別persons.Add(new Dog()) 直接編譯錯誤