C#泛型方法

下面一段代碼用于判斷某個輸入值是否落在最大值和最小值的區(qū)間范圍內(nèi),如果是就返回這個輸入值,否則返回控件原來的值.

輸入值可能有兩種類型(int或float),

我想如果是像Python這樣的弱類型語言,解釋器應(yīng)該可以自動推斷出變量類型,直接寫一次比較邏輯的代碼就可以了.

但是像C/C++, C#/Java這樣的強類型語言,因為比較操作涉及的變量類型不同,如果不使用泛型的話,就要為每種類型各寫一遍比較邏輯代碼.

代碼如下,除了類型不一樣,上下兩種類型的處理邏輯是一模一樣的.

1


要消除這種代碼重復(fù),就要用到泛型.平時在實際中用到的也不多,正好借這個機會復(fù)習(xí)一下.

決定采用泛型方法(還有泛型類,泛型接口,泛型代理等),把重復(fù)的比較邏輯代碼提出到共通的泛型方法中去,具體的變量類型作為參數(shù)傳遞.

代碼如下:

<T>跟在方法名的后面表示類型的占位符, 后面參數(shù)列表中對應(yīng)的參數(shù)類型用T替代.

但是直接這樣寫還不行,有編譯error,因為代碼用到了變量對象的比較操作.而此時在泛型方法內(nèi)編譯器并不知道如何比較兩個T類型變量對象.

2


所以還要額外指明類型T的約束條件,也就是讓編譯器知道:類型T的變量實現(xiàn)了IComparable<T>接口.

這樣編譯器就知道T類型的變量可以用.CompareTo方法來比較大小.

而int,float顯然都是實現(xiàn)了這個接口的類型.

于是借這個機會又復(fù)習(xí)了一下接口的概念.

其實我本來以為實現(xiàn)了IComparable<T>接口就可以直接用大于號小于號比較大小了(運算符重載).

然而實際上并不是,還是得調(diào)用.CompareTo方法才能比較大小.

泛型的類型約束用where子句表示, 代碼如下:

3


將比較邏輯提出到泛型方法中以后,原來的代碼如下:

雖然用了泛型,但還是要先判斷變量的類型,再分別調(diào)用兩次.

因為泛型方法只是聲明,在實際調(diào)用的時候,編譯器實際上還是要根據(jù)傳入的實際類型分別構(gòu)造出兩個不同參數(shù)類型的方法.

4


Python應(yīng)該不會遇到這種問題吧?應(yīng)該直接寫一次相關(guān)的邏輯處理代碼就可以了.

但是我還沒實際動手試一下,回去有時間試一下.如果不出所料果真如此的話.

那Python一直以來宣傳的簡潔優(yōu)雅的優(yōu)點,我之前卻一直都沒怎么看出來(相較于C#),現(xiàn)在看至少在這個問題上,確實也還是有一定道理的.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌高职,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,542評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件吃嘿,死亡現(xiàn)場離奇詭異们镜,居然都是意外死亡瑰步,警方通過查閱死者的電腦和手機的妖,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評論 3 385
  • 文/潘曉璐 我一進店門绣檬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人羔味,你說我怎么就攤上這事河咽。” “怎么了赋元?”我有些...
    開封第一講書人閱讀 158,021評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長飒房。 經(jīng)常有香客問我搁凸,道長,這世上最難降的妖魔是什么狠毯? 我笑而不...
    開封第一講書人閱讀 56,682評論 1 284
  • 正文 為了忘掉前任护糖,我火速辦了婚禮,結(jié)果婚禮上嚼松,老公的妹妹穿的比我還像新娘嫡良。我一直安慰自己,他們只是感情好献酗,可當(dāng)我...
    茶點故事閱讀 65,792評論 6 386
  • 文/花漫 我一把揭開白布寝受。 她就那樣靜靜地躺著,像睡著了一般罕偎。 火紅的嫁衣襯著肌膚如雪很澄。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,985評論 1 291
  • 那天,我揣著相機與錄音甩苛,去河邊找鬼蹂楣。 笑死,一個胖子當(dāng)著我的面吹牛讯蒲,可吹牛的內(nèi)容都是我干的痊土。 我是一名探鬼主播,決...
    沈念sama閱讀 39,107評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼墨林,長吁一口氣:“原來是場噩夢啊……” “哼施戴!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起萌丈,我...
    開封第一講書人閱讀 37,845評論 0 268
  • 序言:老撾萬榮一對情侶失蹤赞哗,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后辆雾,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體肪笋,經(jīng)...
    沈念sama閱讀 44,299評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,612評論 2 327
  • 正文 我和宋清朗相戀三年度迂,在試婚紗的時候發(fā)現(xiàn)自己被綠了藤乙。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,747評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡惭墓,死狀恐怖坛梁,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情腊凶,我是刑警寧澤划咐,帶...
    沈念sama閱讀 34,441評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站钧萍,受9級特大地震影響褐缠,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜风瘦,卻給世界環(huán)境...
    茶點故事閱讀 40,072評論 3 317
  • 文/蒙蒙 一队魏、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧万搔,春花似錦胡桨、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,828評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至挖炬,卻和暖如春揽浙,著一層夾襖步出監(jiān)牢的瞬間状婶,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,069評論 1 267
  • 我被黑心中介騙來泰國打工馅巷, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留膛虫,地道東北人。 一個月前我還...
    沈念sama閱讀 46,545評論 2 362
  • 正文 我出身青樓钓猬,卻偏偏與公主長得像稍刀,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子敞曹,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,658評論 2 350

推薦閱讀更多精彩內(nèi)容