atitit.泛型程式設計總結最佳實務 vO99 java c++ c#.net php,

來源:互聯網
上載者:User

atitit.泛型程式設計總結最佳實務 vO99 java c++ c#.net php,

atitit.泛型程式設計總結最佳實務 vO99 java c++ c#.net php

\

1. 泛型曆史 1

由來 1

2. 泛型的機制編輯 1

機制 1

編譯機制 2

3. 泛型方法定義1::前定義 2

4. 泛型方法定義2::後定義,方法也需要加<T>標籤... 2

5. 調用泛型方法::: cls.<String>meth(); 2

6.  //反回值為範型 2

7. 參考 3

 

1. 泛型曆史

泛型程式設計(Generic Programming)最初提出時的動機很簡單直接:發明一種語言機制,能夠協助實現一個通用的標準容器庫。所謂通用的標準容器庫,就是要能夠做到,比如用一個List類存放所有可能類型的對象這樣的事;泛型程式設計讓你編寫完全一般化並可重複使用的演算法,其效率與針對某特定資料類型而設計的演算法相同。泛型即是指具有在多種資料類型上皆可操作的含意,與模板有些相似。STL巨大,而且可以擴充,它包含很多電腦基本演算法和資料結構,而且將演算法與資料結構完全分離,其中演算法是泛型的,不與任何特定資料結構或物件類型系在一起。

 

由來

泛型程式設計最初誕生於C++中,由Alexander Stepanov[2]和David Musser[3]創立。目的是為了實現C++的STL(標準模板庫)。其語言支援機制就是模板(Templates)。模板的精神其實很簡單:參數化型別。換句話說,把一個原本特定於某個類型的演算法或類當中的類型資訊抽掉,抽出來做成模板參數T。比如qsort泛化之後就變成了:

 

作者:: 老哇的爪子 Attilax 艾龍,  EMAIL:1466519819@qq.com

轉載請註明來源: http://blog.csdn.net/attilax

 

2. 泛型的機制編輯機制

C#泛型代碼在被編譯為IL代碼和無資料時,採用特殊的預留位置來表示泛型型別,並用專有的IL指令支援泛型操作。而真正的泛型執行個體化工作以"on-demand"的方式,發生在JIT編譯時間。

編譯機制

1. 第一輪編譯時間,編譯器只為Stack<T>(棧演算法)類型產生“泛型版”的IL代碼與中繼資料-----並不進行泛型型別的執行個體化,T在中間只充當預留位置

2. JIT編譯時間,當JIT編譯器第一次遇到Stack<int>時,將用int替換“泛型版”IL代碼與中繼資料中的T---進行泛型型別的執行個體化。CLR為所有型別參數為“參考型別”的泛型型別產生同一份代碼;但如果型別參數為“值類型”,對每一個不同的“值類型”,CLR將為其產生一份獨立的代碼。

 

3.  泛型方法定義1::前定義


    public static <atiType,retType> retType reduceO4(atiType obj, Func function) {

 

4. 泛型方法定義2::後定義,方法也需要加<T>標籤...

 

 public void bindList2grid<T>(List<T> li, DataTable dt)
        {

 

5. 調用泛型方法::: cls.<String>meth();6.  //反回值為範型

        public static T getValue<T>(object entity, string fieldName)

7. 參考

paip.使用泛型時未能找到類型或命名空間名稱“T - attilax的專欄 - 部落格頻道 - CSDN.NET.htm

paip.自訂java 泛型類與泛型方法的實現總結 - attilax的專欄 - .

 


對於模板與泛型程式設計的問題為何第一次模板的執行個體化沒有問題,準確地匹配出'c',第二種編譯報錯?

這是由於第一個傳入的是 const char*,指標可以 + 操作
第二個傳入的是 string,string 沒有支援的 + 操作
+ 操作出現在這一句 if(*(input+count)==elem)
把這句改成
if(input[count]==elem),因為const char* 和 string 都支援[]操作
這樣就可以編譯通過了
 
java泛型的問題 一個泛型類 如果要執行個體化他 肯定是這樣建立對象 Class<Object> c = new Class<Object>

雖然是泛型的,但你也可以不指定具體的類型,如果你不指定具體類型,預設可以使用任何類型(但基本類型除外),只不過不指定具體類型,會造成資料不一致性,因此在開發時為了便於資料的操作,通常指定具體類型。
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.