日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > asp.net >内容正文

asp.net

.NET 设计规范--.NET约定、惯用法与模式--6.为扩展性而设计

發(fā)布時(shí)間:2025/5/22 asp.net 59 豆豆
生活随笔 收集整理的這篇文章主要介紹了 .NET 设计规范--.NET约定、惯用法与模式--6.为扩展性而设计 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

6.1 擴(kuò)展機(jī)制

  6.1.1 非密封類

  密封類即無(wú)法派生子類,也無(wú)法擴(kuò)展。與此相反,非密封類可以派生子類進(jìn)行擴(kuò)展

  ?//string cannot be inherited from

  public sealed class String{}

  //TraceSource can be inherited from

  public class TraceSource{}

  正因?yàn)槿绱?#xff0c;如果需要既簡(jiǎn)單有開銷不大的擴(kuò)展方法,那么沒有聲明任何虛成員或保護(hù)成員的非密封類時(shí)不錯(cuò)的選擇。

  考慮用不包含任何虛成員或保護(hù)成員的非密封類來為框架提供擴(kuò)展性,這種方法的開銷不高,用戶也喜歡。

  6.1.2 保護(hù)成員

  保護(hù)成員本身并不能提供任何的擴(kuò)展性,但它們能夠加強(qiáng)派生子類這一擴(kuò)展機(jī)制。

  考慮將保護(hù)成員用于高級(jí)定制

  要在對(duì)安全性。文檔及兼容性進(jìn)行分析時(shí),把非密封類中保護(hù)成員作為公有成員來對(duì)待

  6.1.3 事件與回調(diào)函數(shù)

  回調(diào)函數(shù)是一種擴(kuò)展機(jī)制,它使框架能夠通過委托來調(diào)用用戶代碼,這些委托通常是作為方法的參數(shù)傳遞給框架的。

  事件是一種特殊的回調(diào)函數(shù),它為用戶提供了一致的語(yǔ)法,使用戶能夠非常方便的把委托提供給框架

  考慮使用回調(diào)函數(shù)來讓框架能夠執(zhí)行用戶提供的代碼

  考慮用事件來讓用戶定制框架的行為,這樣就不需要用用戶對(duì)面向?qū)ο笤O(shè)計(jì)有深入了解。

  要游戲使用事件,而不是簡(jiǎn)單的回調(diào)函數(shù),其原因在于廣大開發(fā)人員更熟悉事件,而且事件與Visual Studio的statement completion特性集成在一起。

  避免在對(duì)性能要求很高的API中使用回調(diào)函數(shù)。

  要理解在調(diào)用委托時(shí)可以執(zhí)行任何代碼,這可能會(huì)引起安全性,正確行及兼容性的問題。

6.1.4 虛成員

  與回調(diào)函數(shù)相比,虛成員的主要的缺點(diǎn)在于它的行為只能靜態(tài)修改(在編譯時(shí)修改),而回調(diào)函數(shù)的行為則可以動(dòng)態(tài)修改(在運(yùn)行時(shí)修改)。

  不要使用虛成員,除非有合適的理由,同時(shí)你對(duì)設(shè)計(jì)、測(cè)試及維護(hù)虛成員的開銷有清楚的認(rèn)識(shí)。

  在以擴(kuò)展性為 名義做決定前,請(qǐng)確保你完全理解了自己對(duì)擴(kuò)展的需求。

  考慮只有在絕對(duì)必須的時(shí)候才用虛成員提供擴(kuò)展性,并使用Template Method模式。

  要優(yōu)先使用受保護(hù)的虛成員,而不是公有虛成員。公有虛成員應(yīng)該通過調(diào)用受保護(hù)的虛成員的方式來提供擴(kuò)展性。

  類的公有成員應(yīng)該為類的直接使用者提供正確的功能集。虛成員的設(shè)計(jì)目的是為了讓子類覆蓋。而受保護(hù)的訪問權(quán)限是一種很好的方法,可以對(duì)其使用范圍加以限制。

  6.1.5 抽象(抽象類型與抽象接口)

  抽象就是描述一個(gè)協(xié)定但是并不為該協(xié)定提供完整實(shí)現(xiàn)的類型。抽象通常實(shí)現(xiàn)為抽象類或接口,并帶有一些參考文檔,來描述實(shí)現(xiàn)該協(xié)定類型必須具備的那些語(yǔ)義。

  不要提供抽象,除非為該抽象開發(fā)出具體實(shí)現(xiàn)并用到該抽象的API隊(duì)其進(jìn)行過實(shí)際測(cè)試。

  要在設(shè)計(jì)抽象時(shí)謹(jǐn)慎地選擇抽象類或是抽象接口

  考慮為抽象的具體實(shí)現(xiàn)提供參考測(cè)試。這類測(cè)試應(yīng)該告訴用于,他們是否正確實(shí)現(xiàn)餓了協(xié)定。

6.2 基類

?  我們把基類限定為這樣的類:其設(shè)計(jì)目的不是為了直接使用或提供常用的抽象,而是為了讓其他類通過繼承類重用它的默認(rèn)實(shí)現(xiàn)。

  考慮使用基類為抽象類,即使他們并不包含任何抽象成員。這能夠清楚地告訴用戶,設(shè)計(jì)這些類的目的的完全是為了讓用戶從他們派生自己的子類。

  考慮把基類與用于主要場(chǎng)景的類型分開,放到單獨(dú)的名字空間中。根據(jù)定義,基類是為了高級(jí)擴(kuò)展而設(shè)計(jì)的,因此大多數(shù)用戶對(duì)它們并不感興趣。

  避免在命名基類時(shí)使用“Base”后綴,如果該類會(huì)用于公用API。

6.3 密封

  密封是一種阻止擴(kuò)展的有效機(jī)制。開發(fā)人員既可以密封整個(gè)類,也可以密封類中的單個(gè)成員。密封整個(gè)類使用戶不能自該類繼承,而密封一個(gè)成員則使用戶不能覆蓋該成員。

  不要把類密封起來,除非有恰當(dāng)?shù)睦碛伞?/p>

  把類密封起來的恰當(dāng)理由包括:

    類為靜態(tài)類

    類的保護(hù)成員保存了需要高度保密的機(jī)密信息

    類繼承了許多虛成員,把這些成員一個(gè)一個(gè)都密封起來的代價(jià)太高,還不如把整個(gè)類都密封起來。

    類時(shí)attribute,需要能再運(yùn)行的時(shí)候快速查找

    不要在密封類中聲明保護(hù)成員或虛成員

    考慮在覆蓋成員時(shí)將其密封

    

?

  

轉(zhuǎn)載于:https://www.cnblogs.com/lufangtao/archive/2012/04/10/2441276.html

總結(jié)

以上是生活随笔為你收集整理的.NET 设计规范--.NET约定、惯用法与模式--6.为扩展性而设计的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。