《Effective C#》快速筆記(三)- 使用 C# 表達設(shè)計

萬碼學(xué)堂,電腦培訓(xùn),計算機培訓(xùn),Java培訓(xùn),JavaEE開發(fā)培訓(xùn),青島軟件培訓(xùn),軟件工程師培訓(xùn)

 

 目錄

  • 二十一、限制類型的可見性

  • 二十二、通過定義并實現(xiàn)接口替代繼承

  • 二十三、理解接口方法和虛方法的區(qū)別

  • 二十四、用委托實現(xiàn)回調(diào)

  • 二十五、用事件模式實現(xiàn)通知

  • 二十六、避免返回對內(nèi)部類對象的引用

  • 二十七、讓類型支持序列化

  • 二十八、提供組粒度的因特網(wǎng)服務(wù) API

  • 二十九、支持泛型協(xié)變和逆變

 

二十一、限制類型的可見性

  1.在保證類型可以完成工作的前提下,應(yīng)該盡可能地給類型分配最小的可見性。

  2.我們經(jīng)常下意識的創(chuàng)建公有類型。可見性越低,以后升級或更改時所需要的變化就越小,因為能訪問你功能模塊的代碼越少。

  3.創(chuàng)建內(nèi)部類是一種常被忽略限制類型作用域的做法,我們經(jīng)常習(xí)慣不假思索地創(chuàng)建公有類。你應(yīng)該仔細(xì)思考這個一個類型的作用范圍,即它是將被所有的客戶使用,還是僅用在這個程序集的內(nèi)部。

  4.更少的公有類型可以減少單元測試的數(shù)量。

  5.以公有形式暴露給外界的類和接口將成為你的組件的契約。接口越冗余,日后的修改就越受限。暴露的公有類型越少,以后更新擴展的時候周旋的余地就會越大。

 

二十二、通過定義并實現(xiàn)接口替代繼承

  1.抽象基類為類的繼承體系提供了一個共用的祖先,接口描述了一組原子性的功能。接口是一種契約,抽象基類則為一組相關(guān)的類型提供了一個共用的抽象。基類描述了對象是什么,接口描述了對象如何表現(xiàn)它的行為。

  2.我們可以將可重用的行為提取出來,定義在接口中。由于不相關(guān)的類型均可以實現(xiàn)一個接口,這表示代碼的重用率將大大增加。

  3.如果向基類中添加一個方法,所有派生類都將自動包含該方法。也就是說,隨著時間的推移,仍可以有效擴展多個類型功能的途徑。通過向基類添加并實現(xiàn)某種功能,所有的派生類都將立即擁有該功能。而向接口中添加一個成員,會破壞所有實現(xiàn)該接口的類。因為這些類不包含新方法,每一個實現(xiàn)都需要進行更新,然后重新編譯。

  4.在抽象基類和接口之間做選擇,實際上就表示了對日后可能發(fā)生變化的不同處理態(tài)度。接口是固定的:我們將一組功能