<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>

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

    南京傾心軟件歡迎您訪問本站

    13605185909

    新聞資訊

    NEWS CENTER
    欄目導(dǎo)航

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

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

    一、什么是泛型

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

    以下是一個簡單的示例,可以通過T來控制不同的類型

    此時,Test就是一個泛型類。T就是要實例化的泛型類型。如果T被實例化為int型,那么成員變量就是int型的,如果T被實例化為string型,那么就是string類型的。

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

    泛型方法

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

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

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

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

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

      where T : class_name 類型可以是class_name或者是它的一個子類

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

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

    舉例

    1.接口約束。

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

    區(qū)別于

    一個是T繼承IComparable,一個是MyGenericClass2繼承IComparable

    2.基類約束。

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

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

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

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

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

    6. 裸類型約束

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

     為什么要有約束呢?

    當(dāng)一個泛型參數(shù)沒有任何約束時,它可以進行的操作和運算時非常有限的。因為不能對實參做任何類型上的保證,這時候就需要用到泛型的約束。泛型的主要約束和次要約束都是指泛型的實參必須滿足一定的規(guī)范。C#編譯器在編譯的過程中可以根據(jù)約束來檢查所有泛型類型的實參并確保其滿足約束條件。

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

    Copyright © 2020-2022 南京傾心軟件技術(shù)有限公司 版權(quán)所有     蘇ICP備2020070309號-1
    QQ在線咨詢
    13605185909
    返回頂部
    日韩不卡视频在线| 国产av影片麻豆精品传媒| 久久九九久精品国产免费直播| 国产成人无码精品久久二区三区| 亚洲精品无AMM毛片| 久久精品免费一区二区| 99亚洲精品高清一二区| 久久精品视频久久| 国产精品亚洲а∨无码播放| 精品一区二区三区免费观看 | 国产综合色在线精品| 久久国产乱子伦精品免费午夜| 日本精品久久久久影院日本| 日韩毛片免费无码无毒视频观看 | 日韩在线不卡视频| 中文字幕日韩精品有码视频| 日本加勒比在线精品视频| 国产精品无码一区二区三区不卡| 2020国产精品| 国产精品h在线观看| AV无码精品一区二区三区| 精品久久8x国产免费观看| 精品熟人妻一区二区三区四区不卡 | 国产国拍亚洲精品福利| www.99精品视频在线播放| 四虎永久在线精品免费一区二区| 日韩精品久久一区二区三区| 亚洲日韩国产一区二区三区在线| 日韩视频一区二区三区| 日韩欧精品无码视频无删节| 中文字幕无码日韩专区| 亚洲人精品午夜射精日韩| 国产日韩AV免费无码一区二区| 亚洲AV无码日韩AV无码导航| 日韩一区二区视频在线观看| 日韩专区在线观看| 日韩在线看片免费人成视频播放| 四虎影院国产精品| 国产偷伦精品视频| 伊人久久精品无码二区麻豆| 精品在线免费观看|