最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

常用約束

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

約束 描述
where T : struct 類型參數(shù)必須是不可為 null 的值類型。 有關可為 null 的值類型的信息,請參閱可為 null 的值類型。 由于所有值類型都具有可訪問的無參數(shù)構造函數(shù),因此 struct 約束表示 new() 約束,并且不能與 new() 約束結合使用。 struct 約束也不能與 unmanaged 約束結合使用。
where T : class 類型參數(shù)必須是引用類型。此約束還應用于任何類、接口、委托或數(shù)組類型。 在 C#8.0 或更高版本中的可為 null 上下文中,T 必須是不可為 null 的引用類型。
where T : class? 類型參數(shù)必須是可為 null 或不可為 null 的引用類型。 此約束還應用于任何類、接口、委托或數(shù)組類型。
where T : notnull 類型參數(shù)必須是不可為 null 的類型。 參數(shù)可以是 C# 8.0 或更高版本中的不可為 null 的引用類型,也可以是不可為 null 的值類型。
where T : unmanaged 類型參數(shù)必須是不可為 null 的非托管類型。unmanaged 約束表示 struct 約束,且不能與 struct 約束或 new() 約束結合使用。
where T : new() 類型參數(shù)必須具有公共無參數(shù)構造函數(shù)。與其他約束一起使用時,new() 約束必須最后指定。 new() 約束不能與 struct 和 unmanaged 約束結合使用。
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ù)必須是指定的接口或實現(xiàn)指定的接口??芍付ǘ鄠€接口約束。 約束接口也可以是泛型。在 C# 8.0 及更高版本中的可為 null 上下文中,T 必須是實現(xiàn)指定接口的不可為 null 的類型。
where T : <interface name>? 類型參數(shù)必須是指定的接口或實現(xiàn)指定的接口??芍付ǘ鄠€接口約束。約束接口也可以是泛型。在 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()。

約束多個參數(shù)

可以對多個參數(shù)應用多個約束,對一個參數(shù)應用多個約束,如下例所示:

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

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

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

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

參考文章

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

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

相關文章

  • C#垃圾回收用法(GC)通俗易懂版

    C#垃圾回收用法(GC)通俗易懂版

    這篇文章主要介紹了C#垃圾回收用法(GC),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-06-06
  • 淺談C# 類的繼承

    淺談C# 類的繼承

    本文主要介紹了C# 類的繼承相關知識。具有很好的參考價值,下面跟著小編一起來看下吧
    2017-01-01
  • C#使用Mutex簡單實現(xiàn)程序單實例運行的方法

    C#使用Mutex簡單實現(xiàn)程序單實例運行的方法

    這篇文章主要介紹了C#使用Mutex簡單實現(xiàn)程序單實例運行的方法,涉及C#實現(xiàn)單實例程序運行的相關技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-09-09
  • C#中的LINQ?to?Objects詳解(2)

    C#中的LINQ?to?Objects詳解(2)

    本文詳細講解了C#中的LINQ?to?Objects,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • Path類 操作文件類的實例

    Path類 操作文件類的實例

    下面小編就為大家分享一篇Path類 操作文件類的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-11-11
  • C#檢查Windows是否安裝了某個服務的方法

    C#檢查Windows是否安裝了某個服務的方法

    這篇文章主要介紹了C#檢查Windows是否安裝了某個服務的方法,涉及C#操作windows系統(tǒng)服務的技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-03-03
  • C#后臺創(chuàng)建控件并獲取值的方法

    C#后臺創(chuàng)建控件并獲取值的方法

    這篇文章主要介紹了C#后臺創(chuàng)建控件并獲取值的方法,實例講述了前臺與后臺的具體實現(xiàn)方法,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-01-01
  • C#遞歸題目實例代碼

    C#遞歸題目實例代碼

    這篇文章主要介紹了C#遞歸題目實例代碼,有需要的朋友可以參考一下
    2014-01-01
  • C#中DataGridView導出Excel的兩種方法

    C#中DataGridView導出Excel的兩種方法

    這篇文章主要介紹了C#中DataGridView導出Excel的兩種方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-01-01
  • C#使用對象序列化類庫MessasgePack

    C#使用對象序列化類庫MessasgePack

    這篇文章介紹了C#使用對象序列化類庫MessasgePack的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06

最新評論

莱州市| 五常市| 江源县| 莱州市| 汾阳市| 林芝县| 兰溪市| 剑阁县| 额尔古纳市| 新营市| 屯留县| 手游| 同心县| 凌源市| 襄垣县| 汕头市| 介休市| 宜章县| 西藏| 南丰县| 称多县| 高要市| 曲阳县| 神农架林区| 宁陵县| 宣汉县| 阿拉善盟| 行唐县| 乐平市| 尉氏县| 柞水县| 徐汇区| 株洲县| 普宁市| 旅游| 通河县| 石门县| 聂拉木县| 平泉县| 灌南县| 卢氏县|