freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

類庫(kù)開發(fā)的設(shè)計(jì)準(zhǔn)則結(jié)構(gòu)設(shè)計(jì)(參考版)

2025-06-30 05:45本頁(yè)面
  

【正文】 下面的準(zhǔn)則有助于確保僅在適當(dāng)時(shí)正確包裝異常。如果配置文件的格式錯(cuò)誤,則 XML 讀取器可能會(huì)引發(fā)異常,其中包括一條消息和用于 XML 讀取器及其支持類型的調(diào)用堆棧詳細(xì)信息,而這些對(duì)于應(yīng)用程序用戶都沒有意義。例如,考慮一個(gè)為基于 XML 的配置文件提供管理功能的庫(kù)。 包裝異常若要包裝某個(gè)異常,請(qǐng)將該異常指定為某個(gè)新異常的內(nèi)部異常,然后引發(fā)該新異常。 引發(fā)適當(dāng)?shù)淖罹唧w(派生程度最大)的異常。否則,引發(fā)一個(gè)現(xiàn)有異常。有關(guān) .NET Framework 所提供的最常用異常類型的詳細(xì)準(zhǔn)則,請(qǐng)參見捕捉和引發(fā)標(biāo)準(zhǔn)異常類型。 選擇要引發(fā)的正確異常類型下列設(shè)計(jì)準(zhǔn)則可幫助您確保正確地使用現(xiàn)有異常,并在適當(dāng)?shù)臅r(shí)候創(chuàng)建對(duì)您的庫(kù)有價(jià)值的新異常。 避免從 finally 塊中顯式引發(fā)異常。此行為與篩選器顯式執(zhí)行和返回 false 的行為無(wú)法區(qū)分,因此很難調(diào)試。 不要從異常篩選器塊中引發(fā)異常。為了避免代碼膨脹,請(qǐng)使用幫助器方法創(chuàng)建異常并初始化其屬性。 考慮使用異常生成器方法。此項(xiàng)準(zhǔn)則適用于公共可見的成員。 不要包含可以根據(jù)某一選項(xiàng)引發(fā)或不引發(fā)異常的公共成員。例如,可以提供一種在調(diào)用成員之前檢查前提條件的方法,以便用戶可以編寫不引發(fā)異常的代碼。 盡可能不對(duì)正常控制流使用異常。異常是報(bào)告框架中的錯(cuò)誤的主要手段。 下列準(zhǔn)則可幫助確保在適當(dāng)時(shí)引發(fā)異常。這稱為執(zhí)行故障。有關(guān) .NET Framework 中的異常的詳細(xì)介紹,請(qǐng)參見處理和引發(fā)異常。異常還允許程序處理錯(cuò)誤或根據(jù)需要終止運(yùn)行。應(yīng)用程序和庫(kù)不應(yīng)使用返回代碼來(lái)傳遞錯(cuò)誤信息。可以使用這種方式來(lái)確保派生類不會(huì)修改或跳過(guò)當(dāng)前類和所有派生類所需的行為。受保護(hù)成員只能從派生類進(jìn)行訪問,虛成員也只能在派生類中重寫。 不要在密封類型中聲明受保護(hù)成員或虛成員。類是一個(gè)要求使用反射進(jìn)行快速搜索的屬性。類包含帶有安全敏感信息的繼承的受保護(hù)成員。不要因?yàn)轭A(yù)見不到需要擴(kuò)展某個(gè)類的情形,就認(rèn)為將其密封起來(lái)是合適的。如果所作決定不能體現(xiàn)出這一優(yōu)點(diǎn),請(qǐng)仔細(xì)權(quán)衡。密封可防止對(duì)庫(kù)的類型和成員進(jìn)行自定義,也會(huì)影響某些開發(fā)人員對(duì)可用性的認(rèn)識(shí)。如果密封了某個(gè)成員,則派生類不能重寫該成員的實(shí)現(xiàn)。 通過(guò)密封類限制擴(kuò)展性可以使用密封來(lái)限制開發(fā)人員可以擴(kuò)展您的框架的方式。 如果基類設(shè)計(jì)用于公共 API 中,則在命名時(shí)避免為基類使用 Base 后綴。如果某一基類只用于幫助實(shí)現(xiàn)庫(kù),則該基類不應(yīng)是公共可見的。與 Collection(Of (T)) 不同的是,CollectionBase 不能直接使用。CollectionBase 類是 .NET Framework 基類的另一個(gè)示例。這些基類為抽象提供了一些實(shí)現(xiàn)細(xì)節(jié),在某些情況下不用繼承就可以使用它們。例如,對(duì) ICollection(Of (T)) 進(jìn)行的測(cè)試可以驗(yàn)證:在對(duì)實(shí)現(xiàn)該接口的實(shí)例兩次調(diào)用 Add 方法后,Count 屬性是否增加 2。通過(guò)這樣的測(cè)試,用戶應(yīng)可以測(cè)試出抽象的實(shí)現(xiàn)是否正確地履行了協(xié)定。有關(guān)選擇抽象類型還是接口的詳細(xì)討論,請(qǐng)參見在類和接口之間選擇。如果在實(shí)際方案中未對(duì)抽象進(jìn)行測(cè)試就提供了抽象,將很有可能遺漏一些設(shè)計(jì)問題;而且,對(duì)這些問題的修復(fù)很可能甚至必然導(dǎo)致在以后的版本中引入兼容性問題。抽象類型可以選擇提供實(shí)現(xiàn)的詳細(xì)信息;而接口不能提供實(shí)現(xiàn)的任何詳細(xì)信息。 抽象類型和接口抽象類型和接口是用于指定編程抽象的兩種機(jī)制。公共成員應(yīng)通過(guò)調(diào)用受保護(hù)虛成員提供擴(kuò)展性(如果需要)。因此,正確設(shè)計(jì)和徹底測(cè)試虛成員的開銷是很大的。 必要時(shí)才可使用虛成員,還應(yīng)對(duì)設(shè)計(jì)、測(cè)試和維護(hù)虛成員所需的開銷有所了解。FtpWebRequest 類是 WebRequest 的派生類,前者重寫后者的虛方法,以處理向使用文件傳輸協(xié)議 (FTP) 方案的 URI 發(fā)送請(qǐng)求。如果類型的派生類要處理給定的特定情況,通常會(huì)使用虛成員。在檢查代碼和安全性時(shí),要仔細(xì)檢查這些擴(kuò)展點(diǎn)以確定是否存在安全漏洞。 要了解調(diào)用委托將會(huì)執(zhí)行任意代碼,這可能會(huì)造成安全性、正確性和兼容性方面的問題。 避免在對(duì)性能敏感的 API 中使用回調(diào)。有關(guān)事件的更多信息,請(qǐng)參見事件設(shè)計(jì)。事件比回調(diào)易于使用,因?yàn)檎Z(yǔ)言語(yǔ)法和工具為識(shí)別和處理事件提供了統(tǒng)一的編碼做法。 事件是與回調(diào)類似的機(jī)制。例如,某一異步設(shè)計(jì)模式使用 AsyncCallback 委托指定在異步操作完成時(shí)執(zhí)行的代碼。任意代碼都可以通過(guò)創(chuàng)建子類來(lái)訪問受保護(hù)成員。只需通過(guò)定義聲明類型的派生類,即可訪問受保護(hù)的成員。例如,引發(fā)事件的方法通常定義為具有受保護(hù)的可見性,以允許派生類在引發(fā)該事件之前或之后提供其他處理。開發(fā)人員還可以添加一些方法重載,用于傳遞方案特定的默認(rèn)值。這樣,開發(fā)人員才能根據(jù)他們的特定情況來(lái)自定義類。 考慮一種很好的方式,即采用不具有虛成員或受保護(hù)成員的未密封類,向框架提供資源開銷少的適用擴(kuò)展性。這些附加機(jī)制為添加或自定義類型的功能提供了功能強(qiáng)大的方式,但需要大量開銷。 未密封的類其他類可以從未密封類繼承??梢允褂煤芏喾N不同的機(jī)制使庫(kù)成為可擴(kuò)展庫(kù)。例如,成員不需要將起始索引作為參數(shù),因?yàn)榭梢允褂煤?jiǎn)單的指針?biāo)惴▉?lái)提供指針地址,該指針地址作為添加到相應(yīng)起始索引位置的指針基地址。您通常應(yīng)該檢查參數(shù);但是,對(duì)于對(duì)性能敏感的成員,參數(shù)檢查的開銷通常是不值得的。下面的準(zhǔn)則有助于確保您的庫(kù)設(shè)計(jì)可有效使用指針。 指針參數(shù)指針是一項(xiàng)高級(jí)編程功能,只應(yīng)該在十分注重性能的情況下使用。因?yàn)?varargs 調(diào)用約定不符合 CLS,所以不應(yīng)在公共成員中使用。在處理 null 數(shù)組之前,成員應(yīng)對(duì)其進(jìn)行檢查。參數(shù)名稱應(yīng)為數(shù)組參數(shù)的單數(shù)形式,后跟一個(gè)數(shù)字后綴。 考慮在性能極為敏感的 API 中為使用少量參數(shù)的調(diào)用提供特殊重載和代碼路徑。 盡量對(duì)參數(shù)進(jìn)行排序,以使它能夠使用 params 關(guān)鍵字。 考慮在簡(jiǎn)單重載中使用 params 關(guān)鍵字,即使更復(fù)雜的重載不能使用它。公共語(yǔ)言運(yùn)行庫(kù) (CLR) 可能已創(chuàng)建了一個(gè)臨時(shí)數(shù)組對(duì)象。通常,將 params 關(guān)鍵字添加到字節(jié)數(shù)組參數(shù)不能解決問題,因?yàn)殚_發(fā)人員通常不使用還未存儲(chǔ)到字節(jié)數(shù)組中的單個(gè)字節(jié)。 如果調(diào)用方幾乎總要將輸入放入數(shù)組,則不要使用 params 數(shù)組。 如果需要最終用戶傳遞少量元素,則考慮向數(shù)組參數(shù)添加 params 關(guān)鍵字。該參數(shù)必須是一維數(shù)組。對(duì)于不提供關(guān)鍵字的語(yǔ)言,ParamArrayAttribute 屬性可提供此功能。 參數(shù)數(shù)目可變的成員數(shù)組用于將數(shù)目可變的參數(shù)傳遞給成員。在大多數(shù)情況下,方法應(yīng)使用提供的對(duì)象,而不應(yīng)將其替換。 不要通過(guò)引用傳遞引用類型。 避免使用輸出參數(shù)或引用參數(shù)。使用引用參數(shù)時(shí),方法可以使用數(shù)據(jù)的初始狀態(tài)。此數(shù)據(jù)與調(diào)用方共享。通過(guò)值傳遞參數(shù)時(shí),方法獲取調(diào)用方數(shù)據(jù)的副本,但不能改變調(diào)用方的數(shù)據(jù)副本。不需要復(fù)制不可變數(shù)據(jù)(如 Uri 對(duì)象)。如果成員是安全敏感的,則制作可變對(duì)象的私有副本并使用該副本進(jìn)行驗(yàn)證和處理。檢查輸入是否在程序可支持的值范圍中,如果不在,則引發(fā)一個(gè)異常。較高版本的庫(kù)可向提供的枚舉添加值。不能假設(shè)枚舉參數(shù)為在枚舉中定義的值,因?yàn)楣舱Z(yǔ)言運(yùn)行庫(kù) (CLR) 支持將任何整數(shù)值強(qiáng)制轉(zhuǎn)換為枚舉值,而不論該值是否在枚舉中定義。將參數(shù)傳遞給處理驗(yàn)證的內(nèi)部方法是可以接受的。如果驗(yàn)證失敗,則引發(fā) 或其派生類之一。 驗(yàn)證參數(shù)下列準(zhǔn)則有助于確保正確驗(yàn)證參數(shù)。 除非完全確定永不需要多于兩個(gè)的值,否則不要使用布爾值。如果調(diào)用使用枚舉值而非多個(gè)布爾值,則閱讀起來(lái)要容易得多。請(qǐng)考慮下面的方法調(diào)用:(, true, false)。 如果成員本來(lái)有兩個(gè)或多個(gè)布爾參數(shù),則要使用枚舉。接口實(shí)現(xiàn)應(yīng)使用接口成員簽名中定義的相同名稱。重寫應(yīng)使用相同的參數(shù)名。這種約定使得方法簽名更易于理解。使用大多數(shù)庫(kù)時(shí)都無(wú)需了解這些高級(jí)功能。庫(kù)的未來(lái)版本可以添加采用其他參數(shù)的新重載。在枚舉和布爾參數(shù)之間選擇 參數(shù)數(shù)目可變的成員 指針參數(shù) 傳遞參數(shù) 驗(yàn)證參數(shù) 使用派生程度最小的參數(shù)類型提供成員所需的功能。 參數(shù)設(shè)計(jì)本主題中的準(zhǔn)則幫助您為成員參數(shù)選擇正確的類型和名稱。隱式強(qiáng)制轉(zhuǎn)換是由系統(tǒng)調(diào)用的;用戶可能不會(huì)覺察發(fā)生了轉(zhuǎn)換,這會(huì)給調(diào)試代碼帶來(lái)困難。對(duì)于有損轉(zhuǎn)換,可以提供顯式轉(zhuǎn)換運(yùn)算符。 如果轉(zhuǎn)換可能丟失信息,則不要提供隱式轉(zhuǎn)換運(yùn)算符。將 Double 類型轉(zhuǎn)換為 DateTime 類型不應(yīng)以轉(zhuǎn)換運(yùn)算符的形式實(shí)現(xiàn)。 不要在類型域之外定義轉(zhuǎn)換運(yùn)算符。理想情況下,應(yīng)存在客戶研究數(shù)據(jù),以支持定義轉(zhuǎn)換運(yùn)算符。顯式轉(zhuǎn)換運(yùn)算符則要求在源代碼中指定類型轉(zhuǎn)換才能執(zhí)行轉(zhuǎn)換。轉(zhuǎn)換運(yùn)算符可以是隱式的也可以是顯式的。And op_LogicalAnd ||Or op_LogicalOr =Assign op_Assign LeftShift op_LeftShift RightShift op_RightShift 未定義LeftShift op_SignedRightShift 未定義RightShift op_UnsignedRightShift ==Equals op_Equality CompareTo op_GreaterThan CompareTo op_LessThan !=Equals op_Inequality =CompareTo op_GreaterThanOrEqual =CompareTo op_LessThanOrEqual *=Multiply op_MultiplicationAssignment =Subtract op_SubtractionAssignment ^=Xor op_ExclusiveOrAssignment =LeftShift op_LeftShiftAssignment %=Mod op_ModulusAssignment +=Add op_AdditionAssignment amp。(二進(jìn)制)BitwiseAnd op_BitwiseAnd |BitwiseOr op_BitwiseOr amp。下表列出了運(yùn)算符符號(hào)、其相應(yīng)的替換方法以及運(yùn)算符名稱。 考慮為每個(gè)重載運(yùn)算符所對(duì)應(yīng)的方法提供友好的名稱。例如,如果重載相等運(yùn)算符,也應(yīng)重載不等運(yùn)算符。C 編譯器強(qiáng)制執(zhí)行這一準(zhǔn)則。例如,String 定義運(yùn)算符 == 和 !=。不應(yīng)使用運(yùn)算符重載為非直觀運(yùn)算提供語(yǔ)法快捷方式。通過(guò)在類型中添加運(yùn)算符重載,開發(fā)人員可以像使用內(nèi)置基元類型一樣使用該類型。對(duì)于保存可變引用類型的字段,只讀修飾符可防止字段值被改寫,但不能防止可變類型被修改。使用可變類型創(chuàng)建的對(duì)象可以在創(chuàng)建后進(jìn)行修改。請(qǐng)參見 MaxValue 和 MinValue。 對(duì)預(yù)定義對(duì)象實(shí)例使用公共靜態(tài)只讀字段。例如,Math 類將 E 和 PI 定義為靜態(tài)常數(shù)。使用私有字段,并通過(guò)屬性公開這些私有字段,而不要使用公共可見字段。 不要提供公共的或受保護(hù)的實(shí)例字段。在大多數(shù)情況下,庫(kù)中的所有非靜態(tài)字段對(duì)開發(fā)人員都應(yīng)是不可見的。 事件處理程序的參數(shù)不能多于兩個(gè)。事件處理程序可以調(diào)用多個(gè)方法,但不能從一個(gè)事件處理程序接收多個(gè)返回值。 自定義事件處理程序設(shè)計(jì)如果不使用泛型 EventHandler(Of (TEventArgs)) 委托,下面的準(zhǔn)則有助于正確設(shè)計(jì)事件處理程序。這僅適用于事前事件??紤]將引發(fā)事件的代碼放置在 trycatch 塊中,以防止由事件處理程序引發(fā)的未處理異常所導(dǎo)致的程序終止。如果沒有事件數(shù)據(jù),則傳遞 Empty,而不要傳遞 null。對(duì)于靜態(tài)事件,sender 參數(shù)應(yīng)該為 null(在 Visual Basic 中是 Nothing)。該參數(shù)應(yīng)命名為 e。例如,名為“TimeChanged”的事件的受保護(hù)的虛方法被命名為“OnTimeChanged”。遵循此準(zhǔn)則可使派生類能夠通過(guò)重寫受保護(hù)的方法來(lái)處理基類事件。 使用受保護(hù)的虛方法來(lái)引發(fā)每個(gè)事件。出于上述原因,建議創(chuàng)建一個(gè)空的 EventArgs 派生類。 考慮使用 的派生類作為事件參數(shù),除非您完全確定事件決不會(huì)需要向事件處理方法傳遞任何數(shù)據(jù)(這種情況下可以直接使用 類型)。如果您是在已經(jīng)使用非泛型事件處理程序的區(qū)域中擴(kuò)展功能,則可以繼續(xù)使用非泛型事件處理程序,以保持設(shè)計(jì)一致。 使用 T,而不要手動(dòng)創(chuàng)建用作事件處理程序的新委托。該方法有且僅有兩個(gè)參數(shù)。第二個(gè)參數(shù)命名為 e,是 EventArgs 類型或 EventArgs 的派生類。第一個(gè)參數(shù)命名為 sender,是 Object 類型。事件處理方法的簽名與事件處理程序委托的簽名是相同的。事件處理程序會(huì)添加到事件中,以便當(dāng)事件引發(fā)時(shí),事件處理程序能夠調(diào)用它的方法。例如,當(dāng)用戶單擊窗口中的按鈕時(shí),將引發(fā)一個(gè)事后事件,以允許執(zhí)行特定于應(yīng)用程序的方法。 事件設(shè)計(jì)事件是操作發(fā)生時(shí)允許執(zhí)行特定于應(yīng)用程序的代碼的機(jī)制。如果類型構(gòu)造函數(shù)引發(fā)異常,則該類型在引發(fā)異常的應(yīng)用程序域中不可用。根據(jù)在構(gòu)造函數(shù)中執(zhí)行的操作的不同,這可能導(dǎo)致意外行為。CLR 在創(chuàng)建類型的第一個(gè)實(shí)例或調(diào)用類型上的任何靜態(tài)成員之前調(diào)用類型構(gòu)造函數(shù)。 一定要將類型構(gòu)造函數(shù)設(shè)為私有。類型構(gòu)造函數(shù)是 static(在 Visual Basic 中為 Shared)方法,不能帶任何參數(shù)。 類型構(gòu)造函數(shù)設(shè)計(jì)類型構(gòu)造函數(shù)用于初始化類型中的靜態(tài)數(shù)據(jù)。下面的代碼示例對(duì)此進(jìn)行了演示。 不要在對(duì)象的構(gòu)造函數(shù)中調(diào)用對(duì)象的虛成員。 避免在結(jié)構(gòu)中使用默認(rèn)構(gòu)造函數(shù)。盡管某些編譯器會(huì)自動(dòng)向類中添加默認(rèn)構(gòu)造函數(shù),但顯式添加默認(rèn)構(gòu)造函數(shù)會(huì)使代碼更易于維護(hù)。 如果需要公共默認(rèn)構(gòu)造函數(shù),請(qǐng)?jiān)陬愔羞M(jìn)行顯式聲明。具體地說(shuō),構(gòu)造函數(shù)不應(yīng)捕捉和隱藏它無(wú)法處理的任何異常。 根據(jù)需要,可在實(shí)例構(gòu)
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1