2026-05-23 深入理解 C# 中的泛型(Generics)練習題
2026-05-23 深入理解 C# 中的泛型(Generics)練習題
我:
接下來繼續 出題,
請一個階段一個階段來教我, 並問問題( 不要答案), 然後確定我是否理解, 之後再接下一個階段, 而且每個階段都要很短, 這樣我才能吸收並消化.
請繼續第八階段:深入理解 C# 中的泛型(Generics)
內容:
什麼是泛型,為什麼我們需要泛型。
如何使用泛型來創建靈活且可重用的類別和方法。
學習常見的泛型集合類別,如 List
練習:
創建一個泛型類來存儲不同類型的數據。
使用泛型方法來執行基本的數據操作(如查找、排序等)。
GPT:
第八階段:深入理解 C# 中的泛型(Generics)
1. 什麼是泛型?
泛型(Generics)允許我們在定義類別、方法或接口時,使用一個或多個未確定類型的參數。這樣可以在不具體指定數據類型的情況下創建靈活且可重用的代碼。
2. 為什麼我們需要泛型?
- 類型安全:使用泛型可以在編譯時檢查類型,從而避免在運行時發生類型錯誤。
- 代碼重用:泛型類別和方法可以處理多種數據類型,減少代碼重複。
- 性能優化:泛型可以避免裝箱和拆箱操作(例如在使用集合時),從而提高性能。
3. 常見的泛型集合類別
- **List
**:一種動態數組,可以存儲多個相同類型的對象。 - **Dictionary<TKey, TValue>**:一種鍵-值對集合,用於存儲具有唯一鍵的數據。
練習
創建一個泛型類來存儲不同類型的數據
定義一個泛型類
Storage<T>,其中有一個方法AddItem(T item)用來添加項目,以及一個方法GetItems()返回所有項目。使用泛型方法來執行基本的數據操作
定義一個泛型方法
FindMax<T>(List<T> items),返回列表中的最大值。要求這些項目必須是可比較的(需要用到IComparable接口)。
問題
問題 1:泛型與非泛型類別相比,有哪些主要的優勢?請舉例說明。
問題 2:如何確保泛型類別中的數據類型具有某些特定的功能或屬性?例如,當你想在泛型方法中使用排序功能時。
問題 3:為什麼在創建一個集合類(例如
List<T>)時,使用泛型是更好的選擇?請說明原因。
GPT:
了解了!讓我們以類似的方式進行第八階段:深入理解 C# 中的泛型(Generics)。
第八階段:深入理解 C# 中的泛型(Generics)
1. 什麼是泛型?
泛型允許我們在類別、方法或接口的定義中使用未知的類型,這樣可以創建更靈活和可重用的代碼。泛型提供了類型安全的特性,使得我們能夠在編譯時檢查類型,從而減少運行時錯誤。
2. 為什麼我們需要泛型?
- 類型安全:泛型在編譯時檢查類型,避免了不必要的類型轉換錯誤。
- 代碼重用:同一泛型類別或方法可以處理多種數據類型,減少重複代碼。
- 性能優化:使用泛型可以避免裝箱和拆箱操作,從而提高性能。
3. 常見的泛型集合類別
- **List
**:一種動態數組,可以存儲多個相同類型的對象。 - **Dictionary<TKey, TValue>**:一種鍵-值對集合,用於存儲具有唯一鍵的數據。
練習
創建一個泛型類來存儲不同類型的數據
定義一個泛型類
Storage<T>,並在裡面添加一個方法AddItem(T item)用來添加項目,以及一個方法GetItems()返回所有項目。1
2
3
4
5
6
7
8
9
10
11
12
13
14public class Storage<T>
{
private List<T> items = new List<T>();
public void AddItem(T item)
{
items.Add(item);
}
public List<T> GetItems()
{
return items;
}
}使用泛型方法來執行基本的數據操作
定義一個泛型方法
FindMax<T>(List<T> items),返回列表中的最大值。這要求這些項目必須實作IComparable接口。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15public T FindMax<T>(List<T> items) where T : IComparable
{
if (items == null || items.Count == 0)
throw new ArgumentException("The list cannot be null or empty.");
T max = items[0];
foreach (T item in items)
{
if (item.CompareTo(max) > 0)
max = item;
}
return max;
}
問題
問題 1:你如何理解泛型在 C# 中的主要優勢?請舉例說明。
問題 2:在何種情況下,使用泛型方法會比使用普通方法更好?
問題 3:為什麼使用泛型會提高性能,特別是在集合操作中?
完成這些問題後,請分享你的回答,然後我們可以討論你的理解,並繼續進行下一個階段的內容!
GPT:
好的!讓我們開始 第八階段:深入理解 C# 中的泛型(Generics)。在這一階段,我們將會學習以下內容:
1. 什麼是泛型?
泛型 是一種能夠讓類別、結構和方法在不指定具體數據類型的情況下,使用類型參數進行定義的功能。這使得我們可以編寫靈活且可重用的代碼。
2. 為什麼我們需要泛型?
泛型提供了以下優勢:
- 類型安全:在編譯時期就能檢查類型,避免運行時錯誤。
- 代碼重用:可以使用相同的代碼處理不同數據類型。
- 性能優化:泛型避免了裝箱和拆箱(boxing and unboxing),提高性能。
3. 如何使用泛型來創建靈活且可重用的類別和方法?
以下是如何創建泛型類別和方法的範例:
泛型類別範例:
1 | public class Box<T> |
泛型方法範例:
1 | public class Utility |
4. 常見的泛型集合類別
- **List
**:可變長度的集合,可以存儲同一類型的對象。 - **Dictionary<TKey, TValue>**:存儲鍵值對的集合,快速查找數據。
實戰練習
練習 1:創建一個泛型類
- 創建一個泛型類
Container<T>,該類包含一個屬性Item用來存儲一個項目,以及SetItem和GetItem方法來設置和獲取這個項目。
練習 2:使用泛型方法
2. 創建一個靜態方法 FindMax<T>(List<T> items),用來返回列表中最大的元素,要求 T 必須實現 IComparable 接口。
練習 3:使用泛型集合
3. 使用 List<T> 創建一個包含不同數字的集合,並使用 LINQ 查找最大值。
問題
- 問題: 泛型如何增強代碼的類型安全性?
- 問題: 使用泛型時,
where關鍵字的作用是什麼?
完成這些練習後,請分享你的解答和問題!如果有需要進一步探討的地方,隨時告訴我!