<strike id="suge2"></strike>
  • <tfoot id="suge2"></tfoot>
    <ul id="suge2"><sup id="suge2"></sup></ul>
    <ul id="suge2"><sup id="suge2"></sup></ul>
    <fieldset id="suge2"><input id="suge2"></input></fieldset>
    <ul id="suge2"><sup id="suge2"></sup></ul>
  • <ul id="suge2"></ul>

    南京軟件定制開(kāi)發(fā)

    南京傾心軟件歡迎您訪(fǎng)問(wèn)本站

    13605185909

    新聞資訊

    NEWS CENTER
    欄目導(dǎo)航

    南京軟件開(kāi)發(fā)之C#泛型

    發(fā)布時(shí)間:Mar 22, 2021         已有 人瀏覽

    一、什么是泛型

    泛型是C#語(yǔ)言和公共語(yǔ)言運(yùn)行庫(kù)(CLR)中的一個(gè)新功能,它將類(lèi)型參數(shù)的概念引入.NET Framework。類(lèi)型參數(shù)使得設(shè)計(jì)某些類(lèi)和方法成為可能,例如,通過(guò)使用泛型類(lèi)型參數(shù)T,可以大大簡(jiǎn)化類(lèi)型之間的強(qiáng)制轉(zhuǎn)換或裝箱操作的過(guò)程。說(shuō)白了,泛型就是通過(guò)參數(shù)化類(lèi)型來(lái)實(shí)現(xiàn)在同一份代碼上操作多種數(shù)據(jù)類(lèi)型,利用“參數(shù)化類(lèi)型”將類(lèi)型抽象化,從而實(shí)現(xiàn)靈活的復(fù)用。

    以下是一個(gè)簡(jiǎn)單的示例,可以通過(guò)T來(lái)控制不同的類(lèi)型

    此時(shí),Test就是一個(gè)泛型類(lèi)。T就是要實(shí)例化的泛型類(lèi)型。如果T被實(shí)例化為int型,那么成員變量就是int型的,如果T被實(shí)例化為string型,那么就是string類(lèi)型的。

    該例中,我創(chuàng)建了一個(gè)稱(chēng)為MyList泛型類(lèi)。為把它參數(shù)化,我簡(jiǎn)單地插入了一個(gè)尖括號(hào)。在<>內(nèi)的T代表了實(shí)際的當(dāng)使用該類(lèi)時(shí)要指定的類(lèi)型。在MyList類(lèi)中,定義了一個(gè)靜態(tài)字段objCount。我在構(gòu)造器中增加它的值。因此我能發(fā)現(xiàn)使用我的類(lèi)的用戶(hù)共創(chuàng)建了多少個(gè)那種類(lèi)型的對(duì)象。屬性Count返回與被調(diào)用的實(shí)例同類(lèi)型的實(shí)例的數(shù)目。

    泛型方法

    Copy()方法就是一個(gè)泛型方法,它與參數(shù)化的類(lèi)型T一起工作。當(dāng)在Main()中激活Copy()時(shí),編譯器根據(jù)提供給Copy()方法的參數(shù)確定出要使用的具體類(lèi)型。

    二、泛型的主約束和次約束是什么?

           where T : struct 類(lèi)型必須是一種值類(lèi)型(struct)

      where T : class 類(lèi)型必須是一種引用類(lèi)型(class)

      where T : new() 類(lèi)型必須有一個(gè)無(wú)參數(shù)的構(gòu)造器

      where T : class_name 類(lèi)型可以是class_name或者是它的一個(gè)子類(lèi)

      where T : interface_name 類(lèi)型必須實(shí)現(xiàn)指定的接口

      你可以指定約束的組合,就象: where T : IComparable, new()。這就是說(shuō),用于參數(shù)化類(lèi)型的類(lèi)型必須實(shí)現(xiàn)Icomparable接口并且必須有一個(gè)無(wú)參構(gòu)造器。

    舉例

    1.接口約束。

    例如,可以聲明一個(gè)泛型類(lèi) MyGenericClass,這樣,類(lèi)型參數(shù) T 就可以實(shí)現(xiàn) IComparable<T> 接口:

    區(qū)別于

    一個(gè)是T繼承IComparable,一個(gè)是MyGenericClass2繼承IComparable

    2.基類(lèi)約束。

    指出某個(gè)類(lèi)型必須將指定的類(lèi)作為基類(lèi)(或者就是該類(lèi)本身),才能用作該泛型類(lèi)型的類(lèi)型參數(shù)。這樣的約束一經(jīng)使用,就必須出現(xiàn)在該類(lèi)型參數(shù)的所有其他約束之前。

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

    以使用 new 運(yùn)算符創(chuàng)建類(lèi)型參數(shù)的實(shí)例;但類(lèi)型參數(shù)為此必須受構(gòu)造函數(shù)約束 new() 的約束。new() 約束可以讓編譯器知道:提供的任何類(lèi)型參數(shù)都必須具有可訪(fǎng)問(wèn)的無(wú)參數(shù)(或默認(rèn))構(gòu)造函數(shù)。new() 約束出現(xiàn)在 where 子句的最后。

    4.對(duì)于多個(gè)類(lèi)型參數(shù),每個(gè)類(lèi)型參數(shù)都使用一個(gè) where 子句。

    5.還可以將約束附加到泛型方法的類(lèi)型參數(shù)。

    6. 裸類(lèi)型約束

    用作約束的泛型類(lèi)型參數(shù)稱(chēng)為裸類(lèi)型約束。當(dāng)具有自己的類(lèi)型參數(shù)的成員函數(shù)需要將該參數(shù)約束為包含類(lèi)型的類(lèi)型參數(shù)時(shí),裸類(lèi)型約束很有用。

     為什么要有約束呢?

    當(dāng)一個(gè)泛型參數(shù)沒(méi)有任何約束時(shí),它可以進(jìn)行的操作和運(yùn)算時(shí)非常有限的。因?yàn)椴荒軐?duì)實(shí)參做任何類(lèi)型上的保證,這時(shí)候就需要用到泛型的約束。泛型的主要約束和次要約束都是指泛型的實(shí)參必須滿(mǎn)足一定的規(guī)范。C#編譯器在編譯的過(guò)程中可以根據(jù)約束來(lái)檢查所有泛型類(lèi)型的實(shí)參并確保其滿(mǎn)足約束條件。

    一個(gè)泛型參數(shù)可以至多擁有一個(gè)主要約束,主要約束可以是一個(gè)引用類(lèi)型、class或者struct。如果指定一個(gè)引用類(lèi)型,則實(shí)參必須是該類(lèi)型或者該類(lèi)型派生類(lèi)型。class規(guī)定實(shí)參必須是一個(gè)引用類(lèi)型。struct規(guī)定了參數(shù)必須是一個(gè)之類(lèi)新。

    Copyright © 2020-2022 南京傾心軟件技術(shù)有限公司 版權(quán)所有     蘇ICP備2020070309號(hào)-1
    QQ在線(xiàn)咨詢(xún)
    13605185909
    返回頂部
    日韩一级特黄av毛片| 欧美日韩亚洲精品| 91麻豆精品国产自产在线观看一区 | 四虎亚洲精品高清在线观看| 日韩国产成人精品视频| 亚洲精品国产字幕久久不卡| 精品国产婷婷久久久| 午夜精品一区二区三区在线视| 中文字幕日韩高清版毛片| 国产精品免费视频网站| 国产成人无码精品久久久小说 | 欧美日韩亚洲精品| 香蕉视频国产精品| 91精品成人福利在线播放| 91精品国产91久久久久久| 精品亚洲成a人片在线观看少妇| 久久久久亚洲精品美女| 亚洲国产精品无码专区影院 | 国产99久久久国产精品小说| 国产精品视频分类一区| 精品国际久久久久999波多野| 999国产高清在线精品| 久久久精品人妻一区二区三区| 久久精品中文字幕久久| 国内精品手机在线观看视频| 亚洲欧洲国产精品香蕉网| 精品九九久久国内精品| 久久精品免费观看| 亚洲av永久无码精品漫画 | 男人扒开女人下添高潮日韩视频| 国产精品美女自在线观看免费| 精品伊人久久香线蕉| 国产精品综合一区二区| 国产精品电影久久久久电影网 | 久久亚洲av无码精品浪潮| 国语自产精品视频| 精品一区二区三区四区| 国产产无码乱码精品久久鸭| 久久精品国产亚洲av成人| 99久热re在线精品视频| 亚洲精品人成电影网|