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

C# 泛型約束(where)的使用小結(jié)

 更新時(shí)間:2026年06月26日 10:27:30   作者:影寂ldy  
本文主要介紹了C# 泛型約束(where)的使用小結(jié),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

一、泛型約束 核心概念

1. 為什么需要泛型約束

普通泛型<T>T 可以是任意類型,范圍太大,無(wú)法使用指定類型的專屬方法、屬性。

泛型約束:通過 where T : 約束條件,縮小泛型類型范圍,限制 T 只能是指定類型。

2. 約束語(yǔ)法

static void 方法名<T>(T 參數(shù)) where T : 約束條件
{

}

二、六大泛型約束

1. 無(wú)約束(任意類型)

語(yǔ)法:無(wú) where 條件

規(guī)則:T 可以是值類型、引用類型、自定義類、接口、數(shù)組任意類型

// 無(wú)任何限制的泛型方法
static void Test1<T>(T a)
{
    Console.WriteLine("Test1");
}

2. 值類型約束struct

語(yǔ)法where T : struct

規(guī)則:T 只能是值類型(int、double、bool、結(jié)構(gòu)體)

禁止:所有引用類型(string、數(shù)組、自定義類)

static void Test2<T>(T a) where T : struct
{
    Console.WriteLine("Test1");
}

// 正確:int是值類型
Test2(10);
// 報(bào)錯(cuò):數(shù)組是引用類型,違反struct約束
// Test2(new int[] {1}); 

3. 引用類型約束class

語(yǔ)法where T : class

規(guī)則:T 只能是引用類型(類、接口、數(shù)組、string)

禁止:所有值類型(int、double、bool)

static void Test3<T>(T a) where T : class
{
    Console.WriteLine("Test1");
}

// 報(bào)錯(cuò):int是值類型
// Test3(10);
// 正確:string是引用類型
Test3("ss");

4. 無(wú)參構(gòu)造函數(shù)約束new()

語(yǔ)法where T : new()

規(guī)則:T 類型 必須擁有無(wú)參構(gòu)造函數(shù)

適用場(chǎng)景:泛型方法內(nèi)部需要 new T() 實(shí)例化對(duì)象

static void Test4<T>(T a) where T : new()
{
    Console.WriteLine("Test1");
}

// People類有無(wú)參構(gòu)造函數(shù),合法
Test4(new People());

注意:如果類只寫了有參構(gòu)造、沒有無(wú)參構(gòu)造,會(huì)直接報(bào)錯(cuò)。

5. 基類約束(父類約束)

語(yǔ)法where T : 父類名

規(guī)則:T 只能是指定父類 或 父類的派生類

static void Test5<T>(T a) where T : People
{
    Console.WriteLine("Test1");
}

Test5(new People()); // 父類本身
Test5(new Stu());    // 子類派生類,合法

6. 接口約束

語(yǔ)法where T : 接口名

規(guī)則:T 必須是 實(shí)現(xiàn)了該接口的類 / 派生類

static void Test6<T>(T a) where T : IPeople
{
    Console.WriteLine("Test1");
}

// SS類實(shí)現(xiàn)了IPeople接口,合法
Test6(new SS());

三、約束優(yōu)先級(jí)與組合規(guī)則

  • structclass不能同時(shí)使用(互斥)
  • new() 必須放在所有約束的最后面
  • 可以多約束疊加:例如where T : class, IPeople, new()

四、所有報(bào)錯(cuò)原因匯總

  • Test2(new int[]{1}) 報(bào)錯(cuò):數(shù)組是引用類型,Test2 約束必須是值類型 struct
  • Test3(10) 報(bào)錯(cuò):int 是值類型,Test3 約束必須是引用類型 class

五、六大約束 終極對(duì)照表(背誦神器)

約束寫法

允許類型

禁止類型

無(wú)約束

全部類型

無(wú)

struct

所有值類型

引用類型(類、數(shù)組、string)

class

所有引用類型

值類型(int、bool、double)

new()

有無(wú)參構(gòu)造的類

無(wú)無(wú)參構(gòu)造的類

父類名

父類、子類

無(wú)關(guān)類、接口

接口名

實(shí)現(xiàn)該接口的類

未實(shí)現(xiàn)接口的類

六、滿分背誦口訣

  • 無(wú)約束通吃所有,范圍最大最自由
  • struct只吃值類型,數(shù)組類全報(bào)錯(cuò)
  • class只吃引用類,數(shù)值類型進(jìn)不來
  • new()要求無(wú)參構(gòu),實(shí)例化不報(bào)錯(cuò)
  • 父類約束認(rèn)子孫,接口約束認(rèn)實(shí)現(xiàn)

到此這篇關(guān)于C# 泛型約束(where)的使用小結(jié)的文章就介紹到這了,更多相關(guān)C# 泛型約束內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C# 為String類型增加方法詳解

    C# 為String類型增加方法詳解

    下面小編就為大家?guī)硪黄狢# 為String類型增加方法詳解。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-07-07
  • C#中的遞歸APS和CPS模式詳解

    C#中的遞歸APS和CPS模式詳解

    這篇文章主要介紹了C#中的遞歸APS和CPS模式詳解,本文講解了累加器傳遞模式、CPS函數(shù)、CPS變換、CPS尾遞歸、尾遞歸與Continuation等內(nèi)容,需要的朋友可以參考下
    2015-04-04
  • C#借助Spire.Doc實(shí)現(xiàn)Word表格自動(dòng)排版

    C#借助Spire.Doc實(shí)現(xiàn)Word表格自動(dòng)排版

    在日常開發(fā)中,利用C#自動(dòng)化生成Word報(bào)告是一項(xiàng)常見需求,本文將介紹使用 Spire.Doc for .NET 組件,通過C#代碼精確設(shè)置 C# Word 表格列寬,希望對(duì)大家有所幫助
    2026-02-02
  • C#使用Socket進(jìn)行簡(jiǎn)單的通訊的示例代碼

    C#使用Socket進(jìn)行簡(jiǎn)單的通訊的示例代碼

    Socket 類是基于與 Linux、macOS 或 Windows 的本機(jī)互操作性提供的托管代碼版本的套接字服務(wù),提供了一系列的接口來支持應(yīng)用層的調(diào)用,下面我們就來學(xué)習(xí)一下如何使用Socket進(jìn)行簡(jiǎn)單的通訊,需要的可以參考下
    2023-12-12
  • 基于WPF手寫一個(gè)簡(jiǎn)單的消息對(duì)話框

    基于WPF手寫一個(gè)簡(jiǎn)單的消息對(duì)話框

    消息對(duì)話框是UI界面中不可或缺的組成部分,用于給用戶一些提示,警告或者詢問的窗口,本文將使用WPF手寫一個(gè)簡(jiǎn)單的消息對(duì)話框,感興趣的小伙伴可以了解下
    2023-12-12
  • 在C# 8中如何使用默認(rèn)接口方法詳解

    在C# 8中如何使用默認(rèn)接口方法詳解

    這篇文章主要給大家介紹了關(guān)于在C# 8中如何使用默認(rèn)接口方法的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • WPF實(shí)現(xiàn)授權(quán)碼顯示密文并支持換行

    WPF實(shí)現(xiàn)授權(quán)碼顯示密文并支持換行

    這篇文章主要為大家詳細(xì)介紹了如何使用WPF實(shí)現(xiàn)授權(quán)碼顯示密文并支持換行,文中的示例代碼講解詳細(xì),有需要的小伙伴可以參考一下
    2024-10-10
  • C#中的Drawing 類案例詳解

    C#中的Drawing 類案例詳解

    文章解析WPF與WinForms的Drawing類差異,涵蓋命名空間、繼承鏈、常用類及應(yīng)用場(chǎng)景,通過案例展示如何創(chuàng)建帶陰影圓角矩形按鈕,強(qiáng)調(diào)WPF的輕量、可動(dòng)畫特性與WinForms的即時(shí)繪制模式,對(duì)C# Drawing類相關(guān)知識(shí)感興趣的朋友一起看看吧
    2025-08-08
  • C# GDI在控件上繪圖的方法

    C# GDI在控件上繪圖的方法

    這篇文章主要介紹了C# GDI在控件上繪圖的方法,包括了常見的鼠標(biāo)事件及繪圖操作,需要的朋友可以參考下
    2014-09-09
  • C# WinForm窗口最小化到系統(tǒng)托盤

    C# WinForm窗口最小化到系統(tǒng)托盤

    C#編寫最小化時(shí)隱藏為任務(wù)欄圖標(biāo)的 Window appllication.
    2008-11-11

最新評(píng)論

鸡西市| 温州市| 密云县| 东至县| 明水县| 工布江达县| 西安市| 营山县| 冷水江市| 武功县| 延安市| 东阿县| 盖州市| 盐津县| 浏阳市| 屏边| 凤翔县| 丹江口市| 巴彦淖尔市| 嘉义县| 九江市| 隆尧县| 新野县| 习水县| 东台市| 玉溪市| 富锦市| 芦山县| 剑川县| 天津市| 界首市| 百色市| 吉隆县| 澄城县| 庆城县| 景泰县| 上犹县| 商城县| 于都县| 胶州市| 孟州市|