概述
什么是泛型?
泛型是C#2.0中推出的新語法,泛型不是語法糖,而且由框架升級提供的功能。
泛型(Generics)是一種編程范式,它允許您編寫可與任何數據類型一起工作的代碼。泛型通過使用類型參數來實現這一點,類型參數是在創建泛型類型或方法的實例時指定的占位符。
泛型有什么用?
我們在編程的時候經常遇到功能非常相似但是數據類型不同的情況,但是我們沒有辦法,只能分別寫多個不同的方法或類來處理不同的數據類型。泛型就是專門來解決同一個類或方法可以傳入不同的數據類型。
泛型可以最大程度的重用代碼、保護類型安全性以及提高性能。.Net常見的泛型 如:List<T>、Dictionary<TKey, TValue>、Queue<T>、Func<T>
,其中T就可以是任意數據類型。我們也可以自定義泛型。
泛型包括:泛型類、泛型方法、泛型接口、泛型委托、泛型事件。
基本語法
1.泛型方法 Method<T>
// 方法定義
public static void Swap<T>(ref T a, ref T b)
{
T temp = a;
a = b;
b = temp;
}
//方法調用
int a = 1, b = 2;
Swap<int>(ref a, ref b);
Console.WriteLine($"a={a}, b={b}");
2.泛型類 class GenericClass<T>{}
//類定義
public class Stack<T>
{
int position;
T[] data = new T[100];
public void Push(T obj)
{
data[position++] = obj;
}
public T Pop()
{
return data[--position];
}
}
//類實例化
var stack = new Stack<int>();
stack.Push(1);
stack.Push(2);
stack.Push(3);
Console.WriteLine(stack.Pop());
Console.WriteLine(stack.Pop());
Console.WriteLine(stack.Pop());
3.泛型接口public interface GenericInterface<T>{}
4.泛型委托 public delegate void GenericDelegate<T>(T t)
5.泛型約束(對T數據類型的約束) class GenericClass<T>{} where T:約束
where T:struct 類型參數必須是值類型。
where T:class 類型參數必須是引用類型,此約束還應用于任何類、接口、委托或數組類型。
where T:new() 類型參數必須具有公共無參數的構造函數。當與其他約束一起使用時,new() 約束必須最后指定。
where T:<基類名> 類型參數必須是指定的基類或派生自指定的基類。
where T:<接口名> 類型參數必須是指定的接口或實現指定的接口。
//其中 class為主要約束,new() 為次要約束
Stack<T> where T : class,new()
使用場景
集合類: 泛型集合類可以存儲各種類型的數據,例如 List<T>, Dictionary<TKey, TValue>, Queue<T>, Stack<T>
等。
數據結構: 泛型數據結構可以實現各種數據結構,例如鏈表、樹、圖等。
算法: 泛型算法可以實現各種算法,例如排序、搜索、加密等。
數據庫操作: 泛型可以用于簡化數據庫操作,例如 ORM 框架。
網絡編程: 泛型可以用于簡化網絡編程,例如 HTTP 客戶端庫。
總結
泛型是一種非常強大的編程工具,可以顯著提高代碼的重用性、類型安全性、性能和可擴展性。
該文章在 2024/5/30 15:25:18 編輯過