不平凡的泛型

2021-06-29 03:59:48 字數 1338 閱讀 3446

隨著集合的發展,我們使用集合的同時也發現集合的一些問題:由於型別的強制轉換帶來的型別安全問題,**的復用率低,影響**執行效率,比如:

所以為了避免上面的兩個問題,.net2.0提出了泛型的概念。也就是泛型將型別引數的概念引入了 .net中,使用泛型可以最大限度得重用**,保護型別的安全以及提高效能。

所謂泛型,就是通過引數化型別來實現在同乙份**上操作多種資料型別,它利用「引數化型別」將型別抽象化,使實現更為靈活地復用。

在泛型類或方法的定義中,型別引數是客戶端**在例項化泛型型別的變數時指定的特定型別的佔位符。通常我們使用t作為型別引數佔位符,但這並不是必須的,我們可以使用一些更有意義的描述性的名稱作為型別佔位符,如tinput 、toutput等。

public  class  list

但有些**(如下),無法進行編譯,為什麼?因為我們沒有對型別引數t進行型別的設定,這也就是我們通常所說的型別約束。   

public class sorthelper: icomparable}}

所以,應用泛型約束的概念對上面的**進行改善:

c#泛型要求對「所有泛型型別或泛型方法的型別引數」的任何假定,都要基於「顯式的約束」,以維護c#所要求的型別安全。「顯式約束」由where子句表達,而「顯示約束」並非必須,如果沒有指定的「顯示約束」,泛型引數將只能訪問system.object型別中的公有方法。

在定義泛型型別時可以對客戶端**在例項化類時用於型別引數的型別加以限制。約束使用where關鍵字來指定:

where t: struct 型別引數必須是值型別

where t: class 型別引數必須是引用型別

where t: new() 型別引數必須有乙個 public 且無引數的建構函式

where t: 型別引數必須繼承至指定的基類(base class)

where t: 型別引數必須是指定的介面或實現了指定介面的

關於泛型的部落格先總結到這裡,都是個人理解,歡迎各位拍磚。

平凡的榮耀 不平凡

前一段時間一直被 平凡的榮耀 這部劇刷存在感,最近正好有時間將這部劇粗略的過了一遍,畢竟聽說拍的跟我們現實的職場比較貼切,當然電視劇集也是藝術創作一種表現形式,在某些方便肯定是高於生活的,所以期望它完全的與生活中的情形一模一樣也是要求有點過分了,再說時長只有這麼多,也不能面面俱到呀,可能導演的意思希...

不平凡之路

反覆 糾結這麼久,終於開通了部落格。說機緣巧合也好 說天時地利人和也罷。總之有一顆信念的種子開始埋在了我的心裡 出路。人生的出路。所謂人生,絕不只是一場體驗 一場旅行,我更願意視之為一場修行。或住或行,無不是增加生命的分量。在稍稍可以領略到諸前輩大師們心血的澆築與智慧型的光芒那一刻,我真的似乎看到人...

在平凡中找到不平凡

我們都是普通人,最最普通的人,可是普通是否意味著平凡?我們每天上班,工作,上學,日如一日,年復一年,周而復始,沒有大風大浪,也沒有奇蹟輝煌,這是否意味著我們就是平凡的?我感覺至少不是,平凡並不是這樣定義的,什麼是平凡,我至今沒有搞懂,但是絕對不是隨意就可以跟乙個普通人說,你很平凡 我感覺,我們做的事...