這期內容當中小編將會給大家帶來有關C#中泛型約束如何使用,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
c# where泛型約束:在定義泛型的時候,我們可以使用where限制參數的范圍
1:T:類(類型參數必須是引用類型,這一點也適用于任何類,接口,委托或數組類型)
class MyClass<T,U>
where T:class //約束T必須為“引用 類型{}”
where U:struct //約束U必須為“值 類型”
{
//...
}
2:T:結構(類型參數必須是值類型,可以指定除Nullable以外的任何值類型)
class MyClass<T,U>
where T:class //約束T必須為“引用 類型{}“
where U:struct //約束U必須為“值類型”
3:T:new()(類型參數必須具有無參數的公共構造函數。當與其它一起使用時,new()約束必須最后指定
class EmployeeList<T> where T:Employee,IEmployee,System.IComparable<T>,new()
{...}
4:T:<基類名>(類型參數必須是指定的基類或派生自指定的基類)
class Employee()
class GenericList<T> where T:Employee
5:T:<接口名稱>(參數必須是指定的接口或實現指定的接口??梢灾付ǘ鄠€接口約束。約束接口也可以是泛型)
interface IMyInterface{}
class Dictionary<TKey,TVal>
where TKey:IComparable,IEnumerable
where TVal:IMyInterface
{...}
6:T:U(為T提供的類型參數必須是為U提供的參數或派生為U提供的參數,也就是說T和U的參數必須一樣)
class List<T>
{
void Add<U>(List<U> items) where U:T //這種where U:T泛型約束方式以前還沒有看到,此處的要求就是說泛型參數U必須來自T或派生自T類型
}
a)可用于類
public class MyGenericClass<T> where T:IComparable{}//T必須是IComparable接口類型或接口的實現類
b)可用于方法
public boo MyMethod<T>(T t) where T:IMyInterface{}//T類型必須是IMyInterace接口類型或其實現類
c)可用于委托
public delegate T MyDelegate<T>() where T:new()//T類型必須具有無參數的公共構造函數,當new()與其它約束一起使用時,必須要放在最后
public delegate void MyDelegate<T>(T args) where T:IComparer,new()
上述就是小編為大家分享的C#中泛型約束如何使用了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。