# Generics C# 泛型(Generics)是一種允許你定義類別、介面或方法時使用型別參數的特性。這樣的特性可以讓代碼更具彈性和可重用性,而不必在每次需要不同的數據型別時重新定義新的類別或方法。泛型的主要目的是提高代碼的可重用性和型別安全性。 ### 泛型的基本概念 定義:泛型使用尖括號 <T> 來表示型別參數。T 是一個佔位符,可以是任何型別,如 int、string 等。 用途:泛型主要用於創建可重用的程式碼,例如泛型集合類別(List<T>、Dictionary<TKey, TValue>)、泛型方法等。它們能有效減少重複代碼,提高代碼的可讀性和可維護性。 --- ### 如何定義和使用泛型 1. 定義泛型類別 ``` public class Box<T> { // T 可以是任何型別 public T Value; // 建構函數,接受一個 T 型別的參數 public Box(T value) { Value = value; } // 顯示盒子裡的值 public void ShowValue() { Console.WriteLine("Box contains: " + Value); } } ``` 這段代碼定義了一個名為 Box<T> 的泛型類別,其中 T 是一個佔位符,表示可以接受任意型別。Box<T> 包含一個型別為 T 的欄位 Value 和一個用來顯示值的方法 ShowValue()。 2. 使用泛型類別 ``` class Program { static void Main(string[] args) { //創建一個 int type 的 box Box<int> intBox = new Box<int>(123); // 此時Box(T value)被調用 123被assign給value intBox.ShowValue(); // 創建一個 string 型別的 Box Box<string> strBox = new Box<string>("Hello World"); strBox.ShowValue(); // 輸出:Box contains: Hello World } } ``` 在這個例子中,我們創建了兩個 Box 類別的實例:intBox 和 strBox。intBox 用來儲存 int 型別的數據,而 strBox 用來儲存 string 型別的數據。每個實例都調用了 ShowValue() 方法來顯示其內容。 3. 定義泛型方法 泛型不僅可以用於類別,也可以用於方法。例如: ``` public static void Display<T>(T value) { Console.WriteLine("Value: " + value); } 調用這個方法可以處理任何型別的數據: Display<int>(100); // 輸出:Value: 100 Display<string>("Hello"); // 輸出:Value: Hello ``` 在這個例子中,我們創建了兩個 Box 類別的實例:intBox 和 strBox。intBox 用來儲存 int 型別的數據,而 strBox 用來儲存 string 型別的數據。每個實例都調用了 ShowValue() 方法來顯示其內容。 --- ### 泛型的優點 * 型別安全:在編譯時檢查型別,避免了運行時的型別錯誤。 * 提高代碼重用性:可以用相同的代碼處理多種類型的數據,減少重複代碼。 * 性能提升:避免了不必要的裝箱和拆箱操作,提高了性能。 * 可讀性和可維護性:代碼變得更加清晰和易於理解,當需要支持新的型別時,無需修改已存在的代碼。 [教學影片](https://www.youtube.com/watch?v=aNTDJ9bnRU4&list=PLZPZq0r_RZOPNy28FDBys3GVP2LiaIyP_&index=49)