物件導向設計 「泛型」的起步

2021-09-07 13:47:07 字數 1597 閱讀 5064

泛型是 2.0 版 c# 語言和公共語言執行庫 (clr) 中的乙個新功能。泛型將型別引數的概念引入 .net framework,型別引數使得設計例如以下類和方法成為可能:這些類和方法將乙個或多個型別的指定推遲到client**宣告並例項化該類或方法的時候。比如,通過使用泛型型別引數 t,您可以編寫其它client**可以使用的單個類,而不致引入執行時強制轉換或裝箱操作的成本或風險。

——msdn

我的計算機是以visual basic 6.0拉開帷幕的。讓我印象比較深的是兩個排序:選擇排序和氣泡排序。當然本文不是來討論這兩個排序的詳細實現。更不討論差別。那要幹嗎呢?請往下看。

對於選擇排序。完畢從小到大的排序。我們要怎麼實現功能呢?對於當時的我,肯定毫不猶豫的寫出以下的**。由於課本中就是這種實現思路:

public class selectionsort}}

}}

我們來測試一下:

static void main(string args)

;sorter.sort(array);

foreach (int i in array) console.write(i + " ");

console.writeline();

console.read();

}

輸出結果:0 1 1 2 3 4 5

非常不錯,比較easy實現了功能。

再看看上面的**,我們實現的是對int型別資料的排序,假設我們換成byte該怎麼弄呢?對於vb6.0中。他們是全然相容的。由於vb6.0可以自己主動進行隱式轉換,但c#是乙個強型別的語言,無法在乙個接受int陣列型別的地方傳入乙個byte陣列。

事實上也不難。我們僅僅須要複製一下**,然後改一下引數型別就ok了:

public class selectionsort}}

}}

不能高興的太早,如今又有新需求了,須要對乙個char型別的資料進行排序,當然我們能夠繼續依照上面的思路,採用複製貼上,然後改一下資料型別。這裡就不寫**了!

我們細緻地對照這幾個實現方法,會發現方法的實現全然一樣,除了方法的簽名不同以外,沒有不論什麼的差別。但是完畢這三個功能,**的反覆度、**的冗餘相當大。對於程式設計這但是不好味道。

那麼有沒有一種機制,或者說有這樣乙個keyword。來取代不論什麼型別呢?我們如果有這樣乙個關係字叫「t」:

public class selectionsort}}

}}

啊。這效果看起來怎乙個「爽」字了得。當然上面的**是錯誤的,c#會報錯的。到如今,也用不著賣乖了。c#已經幫我們實現了這樣的效果。那就是泛型。

在.net中。實現比較的基本方法是實現icomparable介面:

public class selectionsort

}if (minindex != i)}}

}

這是泛型的乙個最典型的應用。能夠看到,通過使用泛型。我們極大地降低了反覆**,使我們的程式更加清爽,泛型類就類似於乙個模板,能夠在須要時為這個模板傳入不論什麼我們須要的型別。

Java物件導向 泛型

概念 泛型可以解決資料型別的安全問題,主要原理是在類宣告的時候通過乙個標識表示類中某個屬性的型別或者是某個方法的返回值及引數型別。格式 訪問許可權 class 類名稱 泛型,泛型。屬性方法 示例 public class gnericity publict geti 物件的建立 類名稱 具體型別 物...

c 物件導向程式設計 泛型

泛型類是引用型別,是堆物件。優點 不會強行堆值型別進行裝箱和拆箱,或對引用型別進行向下強制型別轉換,所以效能能得到了提高。list可儲存任意指定型別的集合 優點 與arraylist型別的集合相比,arraylist 在新增string型別時,string型別會隱式強制轉換為object型別。同樣,...

物件導向程式設計VS泛型程式設計

物件導向程式設計vs泛型程式設計 1 物件導向 oop是對data operation的封裝,是對同類事物的抽象,跟結構化程式設計相比它更接近自然語言。繼承使得oo具有了更強的表達能力,進一步地接近了自然語言的屬性。而多型則是oo的最為巧妙和強大的地方,它催生了一系列的設計模式,而設計模式的應用體現...