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

淺析c#范型中的特殊關(guān)鍵字where & default

 更新時間:2013年09月05日 09:54:41   作者:  
以下是對c#范型中的特殊關(guān)鍵字where和default進(jìn)行了詳細(xì)的介紹,需要的朋友可以過來參考下

在看源碼的時候看見了where和default,雖說default很常見,但是它的用法我卻是第一次看到,哎,基礎(chǔ)不扎實??!

下面介紹下這兩個特殊的關(guān)鍵字:
一、Where關(guān)鍵字
where 子句用于指定類型約束,這些約束可以作為泛型聲明中定義的類型參數(shù)的變量。
1.接口約束。
例如,可以聲明一個泛型類 MyGenericClass,這樣,類型參數(shù) T 就可以實現(xiàn) IComparable<T> 接口:

復(fù)制代碼 代碼如下:

publicclassMyGenericClass<T>whereT:IComparable{}

2.基類約束:指出某個類型必須將指定的類作為基類(或者就是該類本身),才能用作該泛型類型的類型參數(shù)。
這樣的約束一經(jīng)使用,就必須出現(xiàn)在該類型參數(shù)的所有其他約束之前。
復(fù)制代碼 代碼如下:

class MyClassy<T,U>
whereT:class03.whereU:struct04.{
}

3.where 子句還可以包括構(gòu)造函數(shù)約束。
可以使用 new 運(yùn)算符創(chuàng)建類型參數(shù)的實例;但類型參數(shù)為此必須受構(gòu)造函數(shù)約束 new() 的約束。new() 約束可以讓編譯器知道:提供的任何類型參數(shù)都必須具有可訪問的無參數(shù)(或默認(rèn))構(gòu)造函數(shù)。例如:
復(fù)制代碼 代碼如下:

publicclassMyGenericClass<T>whereT:IComparable,new()
{
//Thefollowinglineisnotpossiblewithoutnew()constraint:04.Titem=newT();
}

new() 約束出現(xiàn)在 where 子句的最后。

4.對于多個類型參數(shù),每個類型參數(shù)都使用一個 where 子句
例如:

復(fù)制代碼 代碼如下:

interface MyI{}
class Dictionary<TKey,TVal>
whereTKey:IComparable,IEnumerable
whereTVal:MyI
{
publicvoidAdd(TKeykey,TValval)
{
}
}

5.還可以將約束附加到泛型方法的類型參數(shù),例如:
復(fù)制代碼 代碼如下:

public bool MyMethod<T>(Tt)whereT:IMyInterface{}

請注意,對于委托和方法兩者來說,描述類型參數(shù)約束的語法是一樣的:
復(fù)制代碼 代碼如下:

delegateTMyDelegate<T>()whereT:new()

總之,Where就是為范型指定類型約束。

二、Default關(guān)鍵字
在泛型類和泛型方法中產(chǎn)生的一個問題是,在預(yù)先未知以下情況時,如何將默認(rèn)值分配給參數(shù)化類型 T:

T 是引用類型還是值類型。
如果 T 為值類型,則它是數(shù)值還是結(jié)構(gòu)。
給定參數(shù)化類型 T 的一個變量 t,只有當(dāng) T 為引用類型時,語句 t = null 才有效;只有當(dāng) T 為數(shù)值類型而不是結(jié)構(gòu)時,語句 t = 0 才能正常使用。

解決方案是使用 default 關(guān)鍵字,此關(guān)鍵字對于引用類型會返回空,對于數(shù)值類型會返回零。對于結(jié)構(gòu),此關(guān)鍵字將返回初始化為零或空的每個結(jié)構(gòu)成員,具體取決于這些結(jié)構(gòu)是值類型還是引用類型。以下來自 GenericList<T> 類的示例顯示了如何使用 default 關(guān)鍵字。

復(fù)制代碼 代碼如下:

public class GenericList<T>
{
    private class Node
    {
        //...06.07.        public Node Next;
        public T Data;
    }
    private Node head;
    //...14.15.    public T GetNext()
    {
        T temp = default(T);
        Node current = head;
        if (current != null)
        {
            temp = current.Data;
            current = current.Next;
        }
        return temp;
    }
}

2.  default 另一種用法
在switch語句中,如果沒有任何 case 表達(dá)式與開關(guān)值匹配,則控制傳遞給跟在可選 default 標(biāo)簽后的語句。如果沒有 default 標(biāo)簽,則控制傳遞到 switch 以外。     
復(fù)制代碼 代碼如下:

int id = int32.Parse(Console.ReadLine());    
switch (id)
      {
          case 1:
              Console.WriteLine("Lee");
              break;
          case 2:
              Console.WriteLine("Tang");
              break;
          default:
              Console.WriteLine("Sorry, no one match this ID!");
              break;
      }

where 子句還可以包括構(gòu)造函數(shù)約束。可以使用 new 運(yùn)算符創(chuàng)建類型參數(shù)的實例;但類型參數(shù)為此必須受構(gòu)造函數(shù)約束 new() 的約束。

new() 約束可以讓編譯器知道:提供的任何類型參數(shù)都必須具有可訪問的無參數(shù)(或默認(rèn))構(gòu)造函數(shù)。

new() 約束出現(xiàn)在 where 子句的最后。

對于多個類型參數(shù),每個類型參數(shù)都使用一個 where 子句

還可以將約束附加到泛型方法的類型參數(shù)

請注意,對于委托和方法兩者來說,描述類型參數(shù)約束的語法是一樣的

相關(guān)文章

  • C# 系統(tǒng)熱鍵注冊實現(xiàn)代碼

    C# 系統(tǒng)熱鍵注冊實現(xiàn)代碼

    簡單點(diǎn)說就是為程序制定快捷鍵勒。。很多軟件都帶熱鍵功能的,通過以下方式可以實現(xiàn)2個鍵或3個鍵的快捷鍵,相當(dāng)之使用,具體實現(xiàn)方法看后文吧。
    2009-02-02
  • C#反射內(nèi)存的處理分析

    C#反射內(nèi)存的處理分析

    這篇文章主要介紹了C#反射內(nèi)存的處理,較為詳細(xì)的分析了反射加載的內(nèi)存釋放問題,具有一定的參考借鑒價值,需要的朋友可以參考下
    2014-12-12
  • 基于AForge實現(xiàn)C#攝像頭視頻錄制功能

    基于AForge實現(xiàn)C#攝像頭視頻錄制功能

    這篇文章主要為大家詳細(xì)介紹了基于AForge實現(xiàn)C#攝像頭視頻錄制功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-10-10
  • C# webservice接口編寫、發(fā)布與測試

    C# webservice接口編寫、發(fā)布與測試

    這篇文章主要介紹了C# webservice接口編寫、發(fā)布與測試,文章通過圖文結(jié)合的方式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或共組有一定的幫助,需要的朋友可以參考下
    2024-07-07
  • c# 常用框架匯總

    c# 常用框架匯總

    這篇文章主要介紹了c# 常用框架匯總,幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下
    2021-04-04
  • c#配置文件中自定義塊節(jié)點(diǎn)的方法

    c#配置文件中自定義塊節(jié)點(diǎn)的方法

    在.netcore中我們非常方便獲取配置文件節(jié)點(diǎn)參數(shù),但是在非.netcore下一般 我們是使用中方法,本文我們將給大家詳細(xì)介紹c#配置文件中自定義塊節(jié)點(diǎn)的方法,文中有詳細(xì)的代碼示例供大家參考,具有一定的參考價值,需要的朋友可以參考下
    2023-10-10
  • 在C#中基于Semantic?Kernel的檢索增強(qiáng)生成(RAG)實踐記錄

    在C#中基于Semantic?Kernel的檢索增強(qiáng)生成(RAG)實踐記錄

    SemanticKernel是一個用于集成和操作大語言模型的應(yīng)用程序框架,支持C#、Python和Java等多種編程語言,通過SemanticKernel,開發(fā)者可以輕松構(gòu)建基于最新AI技術(shù)的應(yīng)用程序
    2024-10-10
  • WPF實現(xiàn)上下滾動字幕效果

    WPF實現(xiàn)上下滾動字幕效果

    這篇文章主要為大家詳細(xì)介紹了WPF實現(xiàn)上下滾動字幕效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • C#時間操作類分享

    C#時間操作類分享

    這篇文章主要為大家分享了C#時間操作類,秒轉(zhuǎn)換成分鐘,獲得兩個日期的間隔等,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • 詳解使用C#編寫SqlHelper類

    詳解使用C#編寫SqlHelper類

    本篇文章主要介紹了使用C#編寫SqlHelper類,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09

最新評論

武功县| 揭阳市| 宽城| 九龙城区| 于田县| 乳山市| 乌恰县| 沅陵县| 巴彦县| 灵台县| 遂昌县| 泸定县| 乐东| 永州市| 吴忠市| 禹州市| 定襄县| 阳新县| 德阳市| 莎车县| 临漳县| 隆化县| 桦甸市| 涡阳县| 潼关县| 中卫市| 平湖市| 重庆市| 琼结县| 银川市| 黄龙县| 怀来县| 赣州市| 商水县| 旬邑县| 三亚市| 西峡县| 密山市| 津南区| 米林县| 阳西县|