之前一次公司培訓的時候,將它記錄下來,https://www.cnblogs.com/AlvinLee/p/10180536.html這個博客上面比較全面。 1、擴展方法 擴展方法時一種特殊的靜態方法,可以像該類的實例方法一樣使用,能夠在不添加新的派生類,重新編譯的秦光霞,向現有類添加功能 註意事項 ...
之前一次公司培訓的時候,將它記錄下來,https://www.cnblogs.com/AlvinLee/p/10180536.html這個博客上面比較全面。
1、擴展方法
擴展方法時一種特殊的靜態方法,可以像該類的實例方法一樣使用,能夠在不添加新的派生類,重新編譯的秦光霞,向現有類添加功能
註意事項:
a、必須定義在非泛型靜態類中
b、必須是public的靜態方法,並且第一個方法必須使用this關鍵字修飾
c、使用using關鍵字顯示導入擴展方法命名空間後才能使用
d、實例方法優先於擴展方法執行
e、可以在空引用上調用擴展方法
f、擴展方法可以被繼承
2、partial
partial關鍵字拆分一個類、結構、介面、方法的定義至多個文件中,每個源文件中包含類型或方法定義的一部分,在編譯時被組合成一個完整的類。
使用場景:
a、一個類分佈於多個獨立文件中跨域讓多位程式員同事對該類進行處理
b、當使用自動生成文件的源文件時,將自動生成的代碼與手動添加的代碼分佈在不同文件
註意事項:
a、不分類的哥哥不分必須具有相同的可訪問性
b、如果將任意不分聲明為抽象類
c、如果任意部分聲明瞭其基類型,則整個類繼承該類
d、部分類的各個部分都必須在同一程式集和同一模塊(.exe 或 .dll 文件)中進行定義。
e、部分方法必須以partial開頭,不能包含out參數,不能為virtual方法,返回值必須為void
f、可以為已定義並實現的分部方法生成委托,但不能為已經定義但未實現的分部方法生成委托
3、繼承
a、面向對象的三大特征之一
b、通過繼承可以重用、擴展、修改積累中的行為
c、基類具有傳遞性
Struct結構是否支持繼承?
如何防止類被進一步派生?
如何在派生類中隱藏類成員?
繼承缺點:
a、類只支持單繼承
b、破壞封裝,子類與父類之間緊密耦合,子類依賴於父類的實現,子類缺乏獨立性,基類細節對派生類可見
c、子類不能改變父類的介面
e、不支持動態繼承,在運行時,子類無法選擇不同的父類
4、繼承之模板方法
定義一個操作中的演算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以不改變一個演算法的結構即可沖定義該演算法的某些特定步驟
使用場景:
a、有多個子類共有的方法,且邏輯相同
b、重要的、複雜的方法,可以考慮作為模板方法
優點:
a、封裝不變不分,擴展可變不分
b、提取公共代碼,便於維護
c、行為由父類控制,子類實現
缺點:
每一個不同的實現都需要一個子類來實現,導致類的個數增加,使得系統更加龐大。
5、組合
什麼是組合?
組合是通過對現有的對象進行拼裝(組合)產生新的、更複雜的功能
優點:
a、不破壞封裝,整體類與局部類之間松耦合,彼此相互獨立
b、支持動態組合,在運行時可以設置不同的局部實現
c、整體可以對局部類進行包裝,封裝局部類的介面,提供新的介面
缺點:
a、創建整體類的對象時,需要創建所有局部類的對象
b、設計複雜度增高
6、建造者模式(在後續的文章中,會詳細描述下設計模式)
建造者模式將一個複雜的構建與其表示相分離,是的同樣的構建過程可以創建不同的表示
主要角色:
a、控制者(Director):控制對象的組合過程
b、構建者(Builder):構建者介面,定義構建各部件的方法。
c、實際構建者(ConcreteBuilder):具體構建出各部件對象,獲得構造結構。
d、被創建者(Product):構建者操作的主要對象
使用場景:
a、被創建者對象由很多組件構成,他們之前創建的順序不變,但是組件的創建細節不一致
b、被創建者對象具有複雜的內部結構
c、被創建者對象內部屬性本身相互依賴
優點:
a、建造者獨立,易擴展
b、便於控制細節風險
缺點:
a、產品必須有共同點,範圍有限制
b、內部變化複雜,會有很多的建造類