欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C# 泛型的約束

 更新時間:2017年02月08日 09:41:10   作者:懂小姐  
本文將詳細介紹C# 泛型的約束:引用類型約束;值類型約束;構(gòu)造函數(shù)類型約束;轉(zhuǎn)換類型約束;組合約束的相關(guān)知識。具有很好的參考價值,下面跟著小編一起來看下吧

1.引用類型約束

struct RefSample<T> where T:class         引用類型用Class表示約束,其他的引用類型為具體的約束。

表示對于的約束必須為一個類(引用類型)不能是值類型(int,char,datatime,struct),可以是接口interface

區(qū)分,數(shù)組為引用類型,因為定義數(shù)組時需要new出一個對象。

雖然定義成 RefSample<T> 傳入的必須為引用類型 但是RefSample仍然為值類型

2.值類型約束

class ValSample<T> where T:struct

為引用類型,因為int,char等類型都是struct

ValSample<int>

3.構(gòu)造函數(shù)類型約束

public T CreateInstance<T>() where T:new()
{
  return new T();
}

指定的類型T必須有構(gòu)造函數(shù),CreateInstance<int>和CreateInstance<object> 都是有效的。但是CreateInstance<strings>沒有構(gòu)造函數(shù)。

4.轉(zhuǎn)換類型約束

一種約束允許你指定另一個類型,類型實參必須可以通過一致性、引用或裝箱轉(zhuǎn)換隱式地轉(zhuǎn)換為該類型。你還可以規(guī)定一個類型實參必須可以轉(zhuǎn)換為另一個類型實參——這稱為類型參數(shù)約束。

理解的意思:可以互換,就是我們可以通過裝箱或者強制類型轉(zhuǎn)換成目標類型的 類型都可以用于類型參數(shù)傳入。

class Sample<T> where T:Stream

有效:Sample<Stream> 這本身符合約束

無效:Sample<String> 因為String類型無法通過引用或者裝箱拆箱強制轉(zhuǎn)換成Stream、

struct Sample<T> where T:IDisposable

規(guī)定T必須為IDisposable 類型的 引用類型

有效:Sample<SqlConnection>引用轉(zhuǎn)換

無效:Sample<StringBuilder>

分析:為什么SqlConnection 可以而StringBuilder不可以?它們都是引用類型

1.SqlConnection實現(xiàn)了IDisposable接口,所以可以協(xié)變

2.StringBuilder只實現(xiàn)了ISerializable接口,無法通過途徑轉(zhuǎn)換為IDisposable

class Sample<T> where T:IComparable<T>

因為將IComparable<T>整體當作約束,分析IComparable<T>的類型,可以用Type.IsValueType判斷,true為值類型,false為引用類型

typeof(IComparable<T>).IsValueType   結(jié)果為false表示為引用類型

有效:Sample<int>(裝箱轉(zhuǎn)換)

無效:Sample<FileInfo>

也可以指定多種約束:

class sample<T> where T:stream,IEnumerable<string>,IComparable<int>

class Sample<T,U> where T:U

有效:Sample<Stream,IDisposable>

無效:Sample<string,IDiposable>

總結(jié):要看傳入類參數(shù)是否可以轉(zhuǎn)換,查看規(guī)定參數(shù)和傳入類參數(shù)是否實現(xiàn)同一接口,如果實現(xiàn)則可以,否則不可以。

不可以是以下:System.Object,System.Enum,System.ValueType,System.Delegate,結(jié)構(gòu)或密封類(String)

5.組合約束

對類型參數(shù)的約束有多個,注意:只能是一種類型,值類型和引用類型不能同時存在,沒用一個類型即是引用類型,又是值類型。

由于每一個值類型都有一個無構(gòu)造函數(shù),此后不能再有構(gòu)造函數(shù)約束

有效:

class Sample<T> where T:class,IDisposable,new()
class Sample<T,U> where T:Stream where U:IDispsable

無效:

class Sample<T> where T:class,struct (沒有任何類型即時引用類型又是值類型的,所以為無效的)

class Sample<T> where T:Stream,class (引用類型約束應該為第一個約束,放在最前面,所以為無效的) Stream只是約束傳入?yún)?shù)為Stream具體類型,而class約束為引用類型,一開始我理解錯了
class Sample<T> where T:new(),Stream   (new() 必須放在最后)

class Sample<T> where T:IDisposable,Stream (類必須放在接口前面,所以為無效的)

class Sample<T> where T:XmlReader,IComparable,IComparable (對于轉(zhuǎn)換類型約束,同一個接口不能出現(xiàn)多次

class Sample<T,U> where T:struct where  U:Class,T (類型形參“T”具有“struct”約束,因此“T”不能用作“U”的約束,所以為無效的)

class Sample<T,U> where T:Stream ,U:IDisposable  語法錯誤

看到網(wǎng)上還有這種版本也是有效的我表示不理解:

class Sample<T> where T:struct,IDisapsable  IDisapsable為值類型?

class Sample<T,U> where T:class where U:struct ,T   T為引用類型為何與值類型一起約束U?

希望可以指正

以上就是本文的全部內(nèi)容,希望本文的內(nèi)容對大家的學習或者工作能帶來一定的幫助,同時也希望多多支持腳本之家!

相關(guān)文章

  • C#中is,as,using關(guān)鍵字的使用說明

    C#中is,as,using關(guān)鍵字的使用說明

    這篇文章主要介紹了C#中is,as,using關(guān)鍵字的使用說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • C#實現(xiàn)訪問Web API Url提交數(shù)據(jù)并獲取處理結(jié)果

    C#實現(xiàn)訪問Web API Url提交數(shù)據(jù)并獲取處理結(jié)果

    Web API  是 Web 服務器和 Web 瀏覽器之間的應用程序處理接口,我們常見的模式是訪問 Web API Url 地址,并獲取 Json 、XML或其它指定格式的處理結(jié)果, 本文我們介紹了使用C#實現(xiàn)訪問Web API Url提交數(shù)據(jù)并獲取處理結(jié)果,需要的朋友可以參考下
    2024-05-05
  • Unity實現(xiàn)通用的信息提示框

    Unity實現(xiàn)通用的信息提示框

    這篇文章主要為大家詳細介紹了Unity實現(xiàn)通用的信息提示框,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • C# Web應用調(diào)試開啟外部訪問步驟解析

    C# Web應用調(diào)試開啟外部訪問步驟解析

    本文主要介紹了C# Web應用調(diào)試開啟外部訪問的實現(xiàn)過程與方法。具有一定的參考價值,下面跟著小編一起來看下吧
    2017-01-01
  • C#正則表達式Regex類的常用匹配

    C#正則表達式Regex類的常用匹配

    本文通過幾個具體的實例,給大家詳細介紹了C#中的正則表達式Regex類的實用方法,非常的細致,有需要的小伙伴可以參考下
    2015-12-12
  • Unity游戲開發(fā)之射擊小游戲的實現(xiàn)

    Unity游戲開發(fā)之射擊小游戲的實現(xiàn)

    本篇文章為大家?guī)硪粋€橫版2D射擊小游戲,游戲制作超級簡單,玩法一學就會。文中的示例代碼講解詳細,快跟隨小編一起動手試一試
    2022-03-03
  • C#使用哈希表實現(xiàn)XML文件查詢

    C#使用哈希表實現(xiàn)XML文件查詢

    這篇文章主要為大家詳細介紹了C#如何使用哈希表實現(xiàn)XML文件查詢功能,文中的示例代碼講解詳細,具有一定的借鑒價值,有需要的小伙伴可以參考下
    2024-02-02
  • C#中Byte轉(zhuǎn)換相關(guān)的函數(shù)

    C#中Byte轉(zhuǎn)換相關(guān)的函數(shù)

    這篇文章主要介紹了C#中Byte轉(zhuǎn)換相關(guān)的函數(shù)介紹,非常具有參考借鑒價值,特此分享到腳本之家平臺供大家學習
    2016-05-05
  • C#驗證碼識別類完整實例

    C#驗證碼識別類完整實例

    這篇文章主要介紹了C#驗證碼識別類,以一個完整實例形式較為詳細的分析了驗證碼圖片處理所涉及的各種常用技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07
  • C#單位轉(zhuǎn)換器簡單案例

    C#單位轉(zhuǎn)換器簡單案例

    這篇文章主要為大家詳細介紹了C#單位轉(zhuǎn)換器簡單案例,一個簡單的winform應用程序,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-02-02

最新評論