在C#中,泛型編程是一種編程范式,它允許程序員編寫可重用、可擴展的代碼。泛型允許程序員創建能夠處理不同類型數據的類、接口和方法,而無需為每種數據類型編寫單獨的代碼。泛型編程通過類型參數來實現,這些類型參數可以在類、接口和方法的定義中使用。
以下是使用C#泛型編程實現的一個簡單示例:
public interface IStack<T>
{
void Push(T item);
T Pop();
bool IsEmpty();
}
在這個例子中,IStack<T>
是一個泛型接口,它表示一個棧數據結構。T
是一個類型參數,表示棧中存儲的元素類型。
public class Stack<T> : IStack<T>
{
private List<T> _items = new List<T>();
public void Push(T item)
{
_items.Add(item);
}
public T Pop()
{
if (IsEmpty())
{
throw new InvalidOperationException("Stack is empty.");
}
T item = _items[_items.Count - 1];
_items.RemoveAt(_items.Count - 1);
return item;
}
public bool IsEmpty()
{
return !_items.Any();
}
}
在這個例子中,Stack<T>
是一個泛型類,它實現了 IStack<T>
接口。_items
是一個類型為 List<T>
的私有字段,用于存儲棧中的元素。
public class Program
{
public static void Main()
{
IStack<int> intStack = new Stack<int>();
intStack.Push(1);
intStack.Push(2);
intStack.Push(3);
Console.WriteLine("Int stack:");
while (!intStack.IsEmpty())
{
Console.WriteLine(intStack.Pop());
}
IStack<string> stringStack = new Stack<string>();
stringStack.Push("A");
stringStack.Push("B");
stringStack.Push("C");
Console.WriteLine("\nString stack:");
while (!stringStack.IsEmpty())
{
Console.WriteLine(stringStack.Pop());
}
}
}
在這個例子中,我們創建了兩個不同類型的棧:一個用于存儲整數,另一個用于存儲字符串。通過使用泛型類 Stack<T>
,我們可以輕松地實現這一目標,而無需為每種數據類型編寫單獨的代碼。