泛型是 C# 中的一個重要特性,它允許您創建可重用的程式碼,不需要對不同的資料類型進行多次實作。
泛型允許您定義類型參數化的類別、結構、方法和介面。這表示您可以在不指定具體資料類型的情況下,定義通用的程式碼,並在使用時指定資料類型。
GenericList<T>
,以儲存不同資料類型的元素):
public class GenericList<T>
{
private List<T> list = new List<T>();
public void Add(T value)
{
list.Add(value);
}
public T Get(int index)
{
if (index >= 0 && index < list.Count)
{
return list[index];
}
throw new IndexOutOfRangeException("索引超出範圍");
}
}
當使用泛型類別時,您可以指定資料類型作為類型引數,使其變成具體的資料結構。
GenericList<int> intList = new GenericList<int>();
intList.Add(1);
intList.Add(2);
GenericList<string> stringList = new GenericList<string>();
stringList.Add("Hello");
stringList.Add("World");
泛型不僅適用於類別,還可以用於方法。這使您可以創建能夠處理多種資料類型的通用方法。
程式範例(創建一個泛型方法 Swap,用於交換兩個變數的值。):
public static void Swap<T>(ref T a, ref T b)
{
T temp = a;
a = b;
b = temp;
}
使用 Swap 方法可以交換不同資料類型的變數。
程式範例:
int x = 5, y = 10;
Swap(ref x, ref y);
string str1 = "Hello", str2 = "World";
Swap(ref str1, ref str2);
有時候,需要對泛型類型施加一些約束,以確保滿足特定要求。
這可以通過泛型約束來實現。
程式範例(創建一個泛型方法 AreEqual,比較兩個物件是否相等):
//這個方法僅允許比較實作了 IComparable<T> 介面的物件。
public static bool AreEqual<T>(T a, T b) where T : IComparable<T>
{
return a.CompareTo(b) == 0;
}
程式範例:
int num1 = 5, num2 = 5;
bool intResult = AreEqual(num1, num2);
// 正確,因為整數實作了 IComparable<int>
Person person1 = new Person("Alice"), person2 = new Person("Bob");
bool personResult = AreEqual(person1, person2);
// 錯誤,因為 Person 未實作 IComparable<Person>
題目:
請創建一個泛型類別 DataContainer,它可以儲存任何資料型別的數據。
並創建一個泛型方法 AreEqual,它可以接受兩個 DataContainer 的實例,
並比較它們是否包含相同的數據。
(1)比較int 資料1: 5,int資料2: 5 是否相同
(2)比較string 資料1:"Hello",int資料2: "World" 是否相同
預期輸出:
整數資料是否相等:True
字串資料是否相等:False
程式實作:
public class DataContainer<T>
{
private T data;
public DataContainer(T data)
{
this.data = data;
}
public T GetData()
{
return data;
}
}
internal class Program
{
public static bool AreEqual<T>(DataContainer<T> container1,
DataContainer<T> container2)
{
T data1 = container1.GetData();
T data2 = container2.GetData();
return data1.Equals(data2);
}
static void Main(string[] args)
{
// 創建兩個整數資料
DataContainer<int> intContainer1 =
new DataContainer<int>(5);
DataContainer<int> intContainer2 =
new DataContainer<int>(5);
// 創建兩個字串資料
DataContainer<string> stringContainer1 =
new DataContainer<string>("Hello");
DataContainer<string> stringContainer2 =
new DataContainer<string>("World");
// 比較整數資料
bool intEqual = AreEqual(intContainer1, intContainer2);
// 返回 true
// 比較字串資料
bool stringEqual = AreEqual(stringContainer1, stringContainer2);
// 返回 false
Console.WriteLine("整數資料是否相等:" + intEqual);
Console.WriteLine("字串資料是否相等:" + stringEqual);
}
}
期望挑戰30天持續更新成功 ~ DAY17