亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

淺析c#范型中的特殊關鍵字where & default

2020-01-24 03:10:00
字體:
來源:轉載
供稿:網友

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

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

復制代碼 代碼如下:

publicclassMyGenericClass<T>whereT:IComparable{}

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

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

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

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

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

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

復制代碼 代碼如下:

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

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

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

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

delegateTMyDelegate<T>()whereT:new()

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

二、Default關鍵字
在泛型類和泛型方法中產生的一個問題是,在預先未知以下情況時,如何將默認值分配給參數化類型 T:

T 是引用類型還是值類型。
如果 T 為值類型,則它是數值還是結構。
給定參數化類型 T 的一個變量 t,只有當 T 為引用類型時,語句 t = null 才有效;只有當 T 為數值類型而不是結構時,語句 t = 0 才能正常使用。

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

復制代碼 代碼如下:

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 表達式與開關值匹配,則控制傳遞給跟在可選 default 標簽后的語句。如果沒有 default 標簽,則控制傳遞到 switch 以外。     
復制代碼 代碼如下:

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 子句還可以包括構造函數約束??梢允褂?new 運算符創建類型參數的實例;但類型參數為此必須受構造函數約束 new() 的約束。

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

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

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

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

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产欧美精品日韩| 久久精品国产99国产精品澳门| 欧美一级黑人aaaaaaa做受| 欧美怡红院视频一区二区三区| 一个人看的www久久| 激情成人在线视频| 国外日韩电影在线观看| 日韩中文字幕网| 另类少妇人与禽zozz0性伦| 国产日韩欧美在线视频观看| 日韩在线观看网站| 成人激情视频在线播放| 久久久久久久久久久亚洲| 97婷婷涩涩精品一区| 国产精品www网站| 亚洲精品一区二区网址| 日韩美女写真福利在线观看| 亚洲精品久久久久中文字幕二区| 亚洲国产欧美自拍| 欧美精品18videosex性欧美| 国产精品欧美亚洲777777| 伊人久久久久久久久久| 欧美一区三区三区高中清蜜桃| 国产精品你懂得| 国产有码在线一区二区视频| 狠狠躁夜夜躁人人爽超碰91| 国产亚洲综合久久| 在线视频欧美性高潮| 国产精品爱久久久久久久| 中文字幕日韩欧美在线视频| 国产精品视频一区二区三区四| 亚洲淫片在线视频| 亚洲精品国产精品乱码不99按摩| 97不卡在线视频| 亚洲免费视频网站| 国产精品精品久久久| 欧美另类在线播放| 成人黄色av免费在线观看| 亚洲免费电影一区| 最近2019中文免费高清视频观看www99| 国产亚洲欧美日韩一区二区| 国产精品视频白浆免费视频| 中文字幕亚洲欧美日韩在线不卡| 91成品人片a无限观看| 国产欧美一区二区三区久久人妖| 亚洲japanese制服美女| 九九热精品视频国产| 日本亚洲欧美成人| 久久久久久久一| 欧美精品一区三区| 九九九热精品免费视频观看网站| 欧美一区二区三区……| 97视频在线观看网址| 国产精品久久视频| 4438全国成人免费| 精品久久久久久久久中文字幕| 亚洲乱码国产乱码精品精| 亚洲欧美国产一本综合首页| 国模极品一区二区三区| 亚洲国产私拍精品国模在线观看| 日韩在线观看免费高清| 成人性生交大片免费看视频直播| 欧美日韩在线一区| 国产视频久久久久久久| 一个人看的www欧美| 亚洲精品久久在线| 国产精品精品视频一区二区三区| 国产欧美日韩精品丝袜高跟鞋| 国产91露脸中文字幕在线| 97在线日本国产| 欧美激情在线观看视频| 国产精品吹潮在线观看| 国产精品久久久久久久久借妻| 欧美xxxx18国产| 久久69精品久久久久久久电影好| 国产日本欧美一区二区三区| 成人精品网站在线观看| 欧美性xxxxxx| 狠狠色香婷婷久久亚洲精品| 亚洲欧美综合v| 亚洲va久久久噜噜噜| 国产精品久久久久免费a∨大胸| 亚洲www永久成人夜色| 国产精品久久久久aaaa九色| 富二代精品短视频| xxav国产精品美女主播| 欧美日韩中文字幕综合视频| 91视频免费网站| 97色在线视频观看| 亚洲欧美激情精品一区二区| 日韩成人久久久| 欧亚精品中文字幕| 欧美日韩中文字幕日韩欧美| 538国产精品视频一区二区| 91在线视频精品| 一区二区三区亚洲| 欧美激情久久久久久| 国产精品久久在线观看| 国产免费一区二区三区在线观看| 国产日韩精品在线| 欧美孕妇与黑人孕交| 日韩av成人在线| 国产精品手机播放| 久久精品这里热有精品| 日韩精品中文字幕久久臀| 欧美最猛黑人xxxx黑人猛叫黄| 国产精品美女www爽爽爽视频| 欧美性猛交xxxx乱大交3| 亚洲精品成人久久久| 久久国产一区二区三区| 日本国产一区二区三区| 亚洲成人1234| 久久久999精品视频| 成人免费xxxxx在线观看| 国产精品久久久久久久久粉嫩av| 国产成人精品综合久久久| 精品视频一区在线视频| 精品国产欧美成人夜夜嗨| 国产精品视频白浆免费视频| 欧美一级高清免费播放| 久久久久国产视频| 欧美国产日韩一区二区在线观看| 精品久久久久久久久久| 永久免费毛片在线播放不卡| 日韩激情在线视频| 色婷婷综合成人av| 日本高清久久天堂| 日韩国产中文字幕| 亚洲图片制服诱惑| 久久久精品美女| 国产亚洲人成网站在线观看| 国产精品极品在线| 国产欧美在线视频| 91精品国产91久久| 热久久99这里有精品| 久久精品国产亚洲精品2020| 国产精选久久久久久| 成人免费观看a| 欧美日韩亚洲网| 国产成人精品久久亚洲高清不卡| 岛国av在线不卡| 精品久久久精品| 爱福利视频一区| 久久精品国产电影| 亚洲在线视频福利| 欧美性猛交xxxx乱大交极品| 成人国产精品久久久久久亚洲| 亚洲欧美一区二区激情| 欧美日韩人人澡狠狠躁视频| 91精品久久久久久久久中文字幕| 久久国产精品首页| 97av在线视频| 一级做a爰片久久毛片美女图片| 欧洲午夜精品久久久| 69国产精品成人在线播放| 国产精品99久久久久久www| 欧美成人亚洲成人| 伊人久久久久久久久久久| 夜夜狂射影院欧美极品| 欧美日韩国产麻豆| 亚洲香蕉av在线一区二区三区| 最近2019中文字幕一页二页| 欧美日韩成人黄色| 成人写真福利网|