本文內容轉自:https://www.cnblogs.com/netbatman/p/10374072.html
什么是泛型?
C# 語言和公共語言運行時 (CLR) 在 2.0 版本中添加了泛型,泛型將型別引數的概念引入 .NET Framework,這樣就可以設計具有相同特征的類和方法:在客戶端代碼宣告并初始化這些類和方法之前,這些類和方法會延遲指定一個或多個型別(使用占位符~3:數字代表型別引數個數),
泛型有什么用?
使用泛型型別可以最大限度地重用代碼、保護型別安全性以及提高性能,泛型最常見的用途是創建集合類 List<int>,
可以創建:泛型介面、泛型類、泛型方法、泛型事件和泛型委托,
泛型約束有哪些?
where T : struct 型別引數必須是值型別 , 可以指定除 Nullable 以外的任何值型別,
where T : class 型別引數必須是參考型別, 此約束還應用于任何類、介面、委托或陣列型別,
where T : unmanaged 型別引數不能是參考型別,并且任何嵌套級別均不能包含任何參考型別成員,
where T : new() 型別引數必須具有公共無引數建構式,
where T : <基類名> 型別引數必須是指定的基類或派生自指定的基類,
where T : <介面名稱> 型別引數必須是指定的介面或實作指定的介面,
where T : U 為 T 提供的型別引數必須是為 U 提供的引數或派生自為 U 提供的引數,
where T : notnull 指定型別引數必須是不可為 null 的值型別或不可為 null 的參考型別(C# 8.0)
某些約束是互斥的, 所有值型別必須具有可訪問的無引數建構式, struct 約束包含 new() 約束,且 new() 約束不能與 struct 約束結合使用, unmanaged 約束包含 struct 約束, unmanaged 約束不能與 struct 或 new() 約束結合使用,
泛型類:
class GenericClass<T> { }
泛型介面:
public interface GenericInterface<T>{}
泛型方法:(可以作為傳入引數,也可以作為回傳值)
public T void Create<T>(T t)
{
return default(T)
}
泛型委托:
public delegate void GenericDelegate<T>(T t);
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/71356.html
標籤:C#
