復(fù)用代碼煎谍,是一種節(jié)省重復(fù)代碼編譯的手法,不僅可以提高開發(fā)效率龙屉,也為代碼的維護(hù)提供了更加高效呐粘,實(shí)用的途徑。
在C#中,有很多方式可以復(fù)用我們已經(jīng)寫好的代碼事哭。
最常見的“引用”,在一段代碼最開始的地方寫上的using語句瓜富,將已經(jīng)寫好的類庫與正在編寫的代碼聯(lián)系在了一起鳍咱。但在這里,我并不希望從這個角度去理解復(fù)用与柑。作為開發(fā)人員谤辜,我們應(yīng)該看到的是,抽象帶來的代碼復(fù)用方面的價值价捧。
抽象丑念,最重要的意義是為事物歸類,最后的產(chǎn)品就是類结蟋。多個類形成類庫或者包脯倚,通過公共接口,被反復(fù)使用嵌屎。只要寫過代碼的人都清楚這種復(fù)用方式帶來的價值——一個新手推正,不需要自己做底層的工作,也可以讓編譯器完成想要完成的事情宝惰。
目光轉(zhuǎn)向單個項(xiàng)目植榕。做好了歸類,或許在你的設(shè)計圖紙上就已經(jīng)有了很直接尼夺,清晰有序的類圖尊残。接下來為行為做抽象,形成不同的接口淤堵。
如果想要完成某個簡單的動作(比如將某種類型轉(zhuǎn)換成另一種類型的顯式方法調(diào)用)寝衫,卻不知道什么方法可以完成,是不是需要去翻閱成噸的文檔粘勒,查看在哪個類型下面有對應(yīng)的方法呢竞端?答案是不一定。如果我們在設(shè)計最初庙睡,就把眾多類型中(或者理解成不同類中)完成相同任務(wù)的方法抽象成一個接口(或者說讓他們實(shí)現(xiàn)同一個接口)事富,那么工作變得簡單了。
我們只需要把包含這個接口的類庫引用進(jìn)來乘陪,然后直接調(diào)用實(shí)現(xiàn)接口的方法就行了统台。這是一種非常有序的代碼復(fù)用的辦法。
在C#中有一種非常實(shí)用的特性——泛型
泛型的出現(xiàn)提供了另一種代碼復(fù)用的方案:將對不同類型啡邑,相同的操作的被操作類型用泛型替代贱勃。泛型就像我們上學(xué)的時候經(jīng)常用到的X和Y,用于指代“某個數(shù)”,或者理解成某個“數(shù)學(xué)元素”贵扰。在C#當(dāng)中仇穗,泛型可以用來指代某個“編程元素”。
如果采用泛型戚绕,代碼將變得像數(shù)學(xué)公式一樣纹坐,具有強(qiáng)大的通用性。在擁有泛型的底層上開發(fā)舞丛,將變得隨心所欲耘子,甚至不需要考慮當(dāng)前是對什么樣的數(shù)據(jù)在做處理。結(jié)合合理的數(shù)據(jù)類型轉(zhuǎn)換球切,我們甚至可以完成對不同類型數(shù)據(jù)的統(tǒng)一處理(其實(shí)這只是我的一個想法谷誓,有待實(shí)施)。
總結(jié)一下吨凑,方法調(diào)用捍歪,類型引用是兩種非常機(jī)械,也很容易理解的代碼復(fù)用(就像從同桌那借來一塊橡皮一樣)鸵钝,接口和泛型是C#語言特性中為開發(fā)者節(jié)省開發(fā)成本的手段费封,但是需要底層做非常多的工作,好在IDE(集成開發(fā)環(huán)境)都幫我們搞定了弓摘。后面兩種需要長時間的練習(xí)才能掌握,這練習(xí)的結(jié)果锤窑,將是得到一種非常靈活的開發(fā)體驗(yàn)。