溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

C#中泛型約束如何使用

發(fā)布時(shí)間:2021-06-22 17:32:35 來源:億速云 閱讀:140 作者:Leah 欄目:編程語(yǔ)言

這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)碛嘘P(guān)C#中泛型約束如何使用,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

c# where泛型約束:在定義泛型的時(shí)候,我們可以使用where限制參數(shù)的范圍
1:T:類(類型參數(shù)必須是引用類型,這一點(diǎn)也適用于任何類,接口,委托或數(shù)組類型)
class MyClass<T,U>
    where T:class //約束T必須為“引用 類型{}”
    where U:struct //約束U必須為“值 類型”
    {
        //...
    }
2:T:結(jié)構(gòu)(類型參數(shù)必須是值類型,可以指定除Nullable以外的任何值類型)
class MyClass<T,U>
    where T:class //約束T必須為“引用 類型{}“
    where U:struct //約束U必須為“值類型”
3:T:new()(類型參數(shù)必須具有無參數(shù)的公共構(gòu)造函數(shù)。當(dāng)與其它一起使用時(shí),new()約束必須最后指定
class EmployeeList<T> where T:Employee,IEmployee,System.IComparable<T>,new()
{...}
4:T:<基類名>(類型參數(shù)必須是指定的基類或派生自指定的基類)
class Employee()
class GenericList<T> where T:Employee
5:T:<接口名稱>(參數(shù)必須是指定的接口或?qū)崿F(xiàn)指定的接口。可以指定多個(gè)接口約束。約束接口也可以是泛型)
interface IMyInterface{}
class Dictionary<TKey,TVal>
    where TKey:IComparable,IEnumerable
    where TVal:IMyInterface
    {...}
6:T:U(為T提供的類型參數(shù)必須是為U提供的參數(shù)或派生為U提供的參數(shù),也就是說T和U的參數(shù)必須一樣)
class List<T>
{
    void Add<U>(List<U> items) where U:T //這種where U:T泛型約束方式以前還沒有看到,此處的要求就是說泛型參數(shù)U必須來自T或派生自T類型
}        
a)可用于類
public class MyGenericClass<T> where T:IComparable{}//T必須是IComparable接口類型或接口的實(shí)現(xiàn)類
b)可用于方法
public boo MyMethod<T>(T t) where T:IMyInterface{}//T類型必須是IMyInterace接口類型或其實(shí)現(xiàn)類
c)可用于委托
public delegate T MyDelegate<T>() where T:new()//T類型必須具有無參數(shù)的公共構(gòu)造函數(shù),當(dāng)new()與其它約束一起使用時(shí),必須要放在最后
public delegate void MyDelegate<T>(T args) where T:IComparer,new()

上述就是小編為大家分享的C#中泛型約束如何使用了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI