C#中的泛型

來源:互聯網
上載者:User

標籤:sp   on   bs   new   as   程式   nbsp   c   方法   

、泛型

在C#中可以用<>預留位置,來進行類型佔位。由於泛型佔位在編譯之後就會被替換成對應的類型,所有可以重用,比object效能要好很多。但有一個不算太大的缺點:泛型佔位在編譯時間必須確定類型(傳入或編譯器推斷)。  

   泛型類  1.1 泛型類中預留位置的幾種約束

            a.基類約束 pulic class Hourse<T> where T:Pig 只能傳入Pig類型             b.介面約束 pulic class Hourse1<T> where T:IPig 只能傳入實現了IPig介面的類型             c.參考型別約束 pulic class Hourse2<T> where T:class 只能傳入引用類  型             d.實值型別約束 pulic class Hourse3<T> where T:struct 只能傳入實值型別             f.構造器約束 pulic class Hourse4<T> where T:new() 只能傳入能被new  ()的類型  pulic class Hourse5<T> where T:class,new()     -class關鍵字必須在  前面 。這種方式只能傳入能被new()的參考型別              多個預留位置的約束寫法: 每一個約束用一個where 開頭。例:          pulic class Hourse6<T,V> where V:struct where T:class           1.2 泛型類的繼承        a.非泛型類繼承泛型類:              必須指定具體的父類預留位置類型 public class Son:Person<string,int>         b.泛型類繼承泛型類:             如果子類要將站位符傳給父類,則必須與父類的約束保持一致            pulic class Son2<X,Y>:Person<X,Y>預留位置類型,此時子類可以不加約束                      如果子類不傳遞預留位置,那麼必須為父類指定具體的              pulic calss Son3<X,Y>:Person<string,int>   1.3 封閉類型和開放類型的概念      編碼時mylist<T> 是開發類型,運行時產生的具體類是封閉類型  自己實現的泛型類 ---》開放類型 ,可以更改          程式運行時產生的泛型類--》封閉類型,不可改       泛型方法         位置:泛型方法的型別參數,可以在該方法的 形參,方法體,傳回值   1、泛型方法的預留位置的

   2、泛型方法的重載條件               a.參數個數不一致  b.參數類型不一致(形參非泛型部分)c.方法類型預留位置個數不一致   3、泛型方法的重寫,注意不需要重寫約束條件 ,預設會自己添加

   協變和逆變    只能用於泛型介面和泛型委派

協變: out  ->代表當前預留位置只能當做傳回型別,不能當做入參類型 逆變: in   ->代表當前預留位置只能當做入參類型,不能當做傳回型別

C#中的泛型

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.