亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

詳解C#泛型的類型參數(shù)約束

 更新時(shí)間:2020年07月30日 16:01:34   作者:time-flies  
這篇文章主要介紹了C#泛型的類型參數(shù)約束的相關(guān)資料,文中講解非常細(xì)致,幫助大家更好的理解和學(xué)習(xí)c#,感興趣的朋友可以了解下

常用約束

約束告知編譯器類型參數(shù)必須具備的功能。 在沒(méi)有任何約束的情況下,類型參數(shù)可以是任何類型。 編譯器只能假定 System.Object 的成員,它是任何 .NET 類型的最終基類。 如果客戶端代碼使用不滿足約束的類型,編譯器將發(fā)出錯(cuò)誤。 通過(guò)使用 where 上下文關(guān)鍵字指定約束。 下表列出了七種類型的約束:

約束 描述
where T : struct 類型參數(shù)必須是不可為 null 的值類型。 有關(guān)可為 null 的值類型的信息,請(qǐng)參閱可為 null 的值類型。 由于所有值類型都具有可訪問(wèn)的無(wú)參數(shù)構(gòu)造函數(shù),因此 struct 約束表示 new() 約束,并且不能與 new() 約束結(jié)合使用。 struct 約束也不能與 unmanaged 約束結(jié)合使用。
where T : class 類型參數(shù)必須是引用類型。此約束還應(yīng)用于任何類、接口、委托或數(shù)組類型。 在 C#8.0 或更高版本中的可為 null 上下文中,T 必須是不可為 null 的引用類型。
where T : class? 類型參數(shù)必須是可為 null 或不可為 null 的引用類型。 此約束還應(yīng)用于任何類、接口、委托或數(shù)組類型。
where T : notnull 類型參數(shù)必須是不可為 null 的類型。 參數(shù)可以是 C# 8.0 或更高版本中的不可為 null 的引用類型,也可以是不可為 null 的值類型。
where T : unmanaged 類型參數(shù)必須是不可為 null 的非托管類型。unmanaged 約束表示 struct 約束,且不能與 struct 約束或 new() 約束結(jié)合使用。
where T : new() 類型參數(shù)必須具有公共無(wú)參數(shù)構(gòu)造函數(shù)。與其他約束一起使用時(shí),new() 約束必須最后指定。 new() 約束不能與 struct 和 unmanaged 約束結(jié)合使用。
where T : <base class name> 類型參數(shù)必須是指定的基類或派生自指定的基類。 在 C# 8.0 及更高版本中的可為 null 上下文中,T 必須是從指定基類派生的不可為 null 的引用類型。
where T : <base class name>? 類型參數(shù)必須是指定的基類或派生自指定的基類。在 C# 8.0 及更高版本中的可為 null 上下文中,T 可以是從指定基類派生的可為 null 或不可為 null 的類型。
where T : <interface name> 類型參數(shù)必須是指定的接口或?qū)崿F(xiàn)指定的接口??芍付ǘ鄠€(gè)接口約束。 約束接口也可以是泛型。在 C# 8.0 及更高版本中的可為 null 上下文中,T 必須是實(shí)現(xiàn)指定接口的不可為 null 的類型。
where T : <interface name>? 類型參數(shù)必須是指定的接口或?qū)崿F(xiàn)指定的接口??芍付ǘ鄠€(gè)接口約束。約束接口也可以是泛型。在 C# 8.0 中的可為 null 上下文中,T 可以是可為 null 的引用類型、不可為 null 的引用類型或值類型。T 不能是可為 null 的值類型。
where T : U 為 T 提供的類型參數(shù)必須是為 U 提供的參數(shù)或派生自為 U 提供的參數(shù)。在可為 null 的上下文中,如果 U 是不可為 null 的引用類型,T 必須是不可為 null 的引用類型。如果 U 是可為 null 的引用類型,則 T 可以是可為 null 的引用類型,也可以是不可為 null 的引用類型。

最常用的泛型約束為where T : struct、where T : class、where T : new()。

約束多個(gè)參數(shù)

可以對(duì)多個(gè)參數(shù)應(yīng)用多個(gè)約束,對(duì)一個(gè)參數(shù)應(yīng)用多個(gè)約束,如下例所示:

class Base { }
class Test<T, U>
  where U : struct
  where T : Base, new()
{ }

對(duì)類型參數(shù)使用 == 和 != 運(yùn)算符

在應(yīng)用 where T : class 約束時(shí),請(qǐng)避免對(duì)類型參數(shù)使用 == 和 != 運(yùn)算符。編譯器只知道 T 在編譯時(shí)是引用類型,并且必須使用對(duì)所有引用類型都有效的默認(rèn)運(yùn)算符。

如果必須測(cè)試值相等性,建議同時(shí)應(yīng)用 where T : IEquatable 或 where T : IComparable 約束,并在用于構(gòu)造泛型類的任何類中實(shí)現(xiàn)該接口。

參考文章

類型參數(shù)的約束(C# 編程指南)——Microsoft

以上就是詳解C#泛型的類型參數(shù)約束的詳細(xì)內(nèi)容,更多關(guān)于C#泛型的類型參數(shù)約束的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C#遍歷系統(tǒng)進(jìn)程的方法

    C#遍歷系統(tǒng)進(jìn)程的方法

    這篇文章主要介紹了C#遍歷系統(tǒng)進(jìn)程的方法,涉及C#底層操作獲取系統(tǒng)信息與硬件信息的相關(guān)技巧,需要的朋友可以參考下
    2015-05-05
  • WPF+SkiaSharp實(shí)現(xiàn)自繪彈幕效果

    WPF+SkiaSharp實(shí)現(xiàn)自繪彈幕效果

    這篇文章主要為大家詳細(xì)介紹了如何利用WPF和SkiaSharp實(shí)現(xiàn)自制彈幕效果,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)或工作有一定幫助,感興趣的小伙伴可以了解一下
    2022-09-09
  • c# 數(shù)據(jù)標(biāo)注與數(shù)據(jù)校驗(yàn)

    c# 數(shù)據(jù)標(biāo)注與數(shù)據(jù)校驗(yàn)

    這篇文章主要介紹了c# 數(shù)據(jù)標(biāo)注與數(shù)據(jù)校驗(yàn)的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)c#,感興趣的朋友可以了解下
    2020-10-10
  • C#操作windows系統(tǒng)進(jìn)程的方法

    C#操作windows系統(tǒng)進(jìn)程的方法

    這篇文章主要介紹了C#操作windows系統(tǒng)進(jìn)程的方法,涉及C#針對(duì)windows操作系統(tǒng)進(jìn)程的創(chuàng)建與關(guān)閉的技巧,需要的朋友可以參考下
    2015-04-04
  • c#和net存取cookies操作示例

    c#和net存取cookies操作示例

    這篇文章主要介紹了c#和net存取cookies操作示例,需要的朋友可以參考下
    2014-02-02
  • c# 死鎖和活鎖的發(fā)生及避免

    c# 死鎖和活鎖的發(fā)生及避免

    多線程編程時(shí),如果涉及同時(shí)讀寫(xiě)共享數(shù)據(jù),就要格外小心。如果共享數(shù)據(jù)是獨(dú)占資源,則要對(duì)共享數(shù)據(jù)的讀寫(xiě)進(jìn)行排它訪問(wèn),最簡(jiǎn)單的方式就是加鎖。鎖也不能隨便用,否則可能會(huì)造成死鎖和活鎖。本文將通過(guò)示例詳細(xì)講解死鎖和活鎖是如何發(fā)生的以及如何避免它們。
    2020-11-11
  • C#應(yīng)用BindingSource實(shí)現(xiàn)數(shù)據(jù)同步的方法

    C#應(yīng)用BindingSource實(shí)現(xiàn)數(shù)據(jù)同步的方法

    這篇文章主要介紹了C#應(yīng)用BindingSource實(shí)現(xiàn)數(shù)據(jù)同步的方法,需要的朋友可以參考下
    2014-08-08
  • Unity3D UI Text得分?jǐn)?shù)字增加的實(shí)例代碼

    Unity3D UI Text得分?jǐn)?shù)字增加的實(shí)例代碼

    這篇文章主要介紹了Unity3D UI Text得分?jǐn)?shù)字增加方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-04-04
  • C#中TextBox的橫線樣式及占位提示詳解

    C#中TextBox的橫線樣式及占位提示詳解

    橫線樣式就是將TextBox以一條底橫線的形式展示在頁(yè)面,占位提示就是Web的Placeholder屬性,即在輸入框沒(méi)有內(nèi)容的時(shí)候進(jìn)行一個(gè)輸入提示。本文主要介紹了C#中TextBox的這兩個(gè)的實(shí)現(xiàn),需要的可以參考一下
    2022-11-11
  • C#實(shí)現(xiàn)的一款比較美觀的驗(yàn)證碼完整實(shí)例

    C#實(shí)現(xiàn)的一款比較美觀的驗(yàn)證碼完整實(shí)例

    這篇文章主要介紹了C#實(shí)現(xiàn)的一款比較美觀的驗(yàn)證碼,以完整實(shí)例形式分析了C#生成驗(yàn)證碼與前端調(diào)用驗(yàn)證碼的實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2016-06-06

最新評(píng)論