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

正文內(nèi)容

類庫開發(fā)的設(shè)計(jì)準(zhǔn)則結(jié)構(gòu)設(shè)計(jì)(編輯修改稿)

2025-07-24 05:45 本頁面
 

【文章內(nèi)容簡(jiǎn)介】 盡管有一些小的兼容風(fēng)險(xiǎn),還是請(qǐng)考慮向枚舉添加值。此準(zhǔn)則適于在提供多個(gè)庫版本時(shí)使用。若要使用最少的代碼向現(xiàn)有枚舉添加值,可實(shí)現(xiàn)返回值全集的新成員,并使用 ObsoleteAttribute 屬性標(biāo)記現(xiàn)有成員(返回原始值集的成員)。如果不希望進(jìn)行重大更改,則可以定義一個(gè)新枚舉,以及新枚舉的關(guān)聯(lián)成員,并將現(xiàn)有的成員和枚舉標(biāo)記為已過時(shí)。 嵌套類型嵌套類型是作為某其他類型的成員的類型。嵌套類型應(yīng)與其聲明類型緊密關(guān)聯(lián),并且不得用作通用類型。有些開發(fā)人員會(huì)將嵌套類型弄混淆,因此嵌套類型不應(yīng)是公開可見的,除非不得不這樣做。在設(shè)計(jì)完善的庫中,開發(fā)人員幾乎不需要使用嵌套類型實(shí)例化對(duì)象或聲明變量。在聲明類型使用和創(chuàng)建嵌套類型實(shí)例時(shí),嵌套類型很有用,但不在公共成員中公開嵌套類型的使用。 如果嵌套類型和其外部類型之間的關(guān)系需要成員可訪問性語義,則要使用嵌套類型。由于嵌套類型被視為是聲明類型的成員,因此嵌套類型可以訪問聲明類型中的所有其他成員。 如果可能在聲明類型的外部引用類型,則不要使用嵌套類型。在常見方案中,不應(yīng)要求對(duì)嵌套類型進(jìn)行變量聲明和對(duì)象實(shí)例化。例如,處理在某一類上定義的事件的事件處理程序委托不應(yīng)嵌套在該類中。 如果需要由客戶端代碼實(shí)例化類型,則不要使用嵌套類型。如果某種類型具有公共構(gòu)造函數(shù),就可能不應(yīng)進(jìn)行嵌套。理想情況下,嵌套類型僅由它的聲明類型進(jìn)行實(shí)例化和使用。如果嵌套類型具有公共構(gòu)造函數(shù),則表示該類型不單由其聲明類型使用。通常情況下,嵌套類型不應(yīng)針對(duì)其聲明類型以外的類型執(zhí)行任務(wù)。如某種類型具有更廣泛的用途,就很可能不應(yīng)進(jìn)行嵌套。 不要將嵌套類型定義為接口的成員。許多語言不支持這樣的構(gòu)造。 3 成員設(shè)計(jì)準(zhǔn)則類型和接口可以包含以下任何成員:方法屬性構(gòu)造函數(shù)事件字段 成員重載成員的簽名包含成員的名稱和參數(shù)列表。每個(gè)成員簽名在類型中必須是唯一的。只要成員的參數(shù)列表不同,成員的名稱可以相同。如果類型的兩個(gè)或多個(gè)成員是同類成員(方法、屬性、構(gòu)造函數(shù)等),它們具有相同的名稱和不同的參數(shù)列表,則稱該同類成員進(jìn)行了重載。例如,Array 類包含兩個(gè) CopyTo 方法。第一個(gè)方法采用一個(gè)數(shù)組和一個(gè) Int32 值,第二個(gè)方法采用一個(gè)數(shù)組和一個(gè) Int64 值。重載成員在同一功能上應(yīng)有所不同。例如,某個(gè)類型具有兩個(gè) CopyTo 成員,其中第一個(gè)成員向數(shù)組復(fù)制數(shù)據(jù),第二個(gè)成員向文件復(fù)制數(shù)據(jù),這樣是不正確的。對(duì)成員進(jìn)行重載通常是為了提供帶少量參數(shù)或不帶參數(shù)且易于使用的重載。這些成員調(diào)用功能更強(qiáng)大、要求經(jīng)驗(yàn)豐富才能正確使用的重載。易于使用的重載通過向復(fù)雜重載傳遞默認(rèn)值,支持常見的方案。例如,F(xiàn)ile 類提供 Open 方法的重載。簡(jiǎn)單重載 Open 采用文件路徑和文件模式作為參數(shù)。它調(diào)用具有路徑、文件模式、文件訪問和文件共享參數(shù)的 Open 重載,并為文件訪問和文件共享參數(shù)提供常用的默認(rèn)值。如果開發(fā)人員不需要復(fù)雜重載所具有的靈活性,則不必了解文件訪問和共享模型就可以打開文件。為了便于維護(hù)和版本控制,簡(jiǎn)單重載應(yīng)使用復(fù)雜重載來執(zhí)行操作;基礎(chǔ)功能不應(yīng)在多個(gè)位置實(shí)現(xiàn)。 盡量使用描述性參數(shù)名稱指示簡(jiǎn)單重載所使用的默認(rèn)值。此準(zhǔn)則尤其適用于 Boolean 參數(shù)。復(fù)雜重載的參數(shù)名稱應(yīng)通過描述相反的狀態(tài)或操作來指示簡(jiǎn)單重載所提供的默認(rèn)值。例如,String 類提的Compare的重載,第二個(gè)重載提供一個(gè)名為 ignoreCase 的 Boolean 參數(shù)。即簡(jiǎn)單重載區(qū)分大小寫,僅當(dāng)要忽略大小寫時(shí),才需要使用復(fù)雜重載。默認(rèn)值通常應(yīng)為 false。 避免隨意更改重載中的參數(shù)名稱。如果某重載中的一個(gè)參數(shù)與另一重載的一個(gè)參數(shù)表示相同的輸入,則這兩個(gè)參數(shù)應(yīng)具有同一名稱。 保持重載成員中參數(shù)順序的一致性。在所有重載中,同名參數(shù)的位置應(yīng)該相同。此準(zhǔn)則有兩項(xiàng)約束:如果重載采用變量參數(shù)列表,則該列表必須是最后一個(gè)參數(shù)。如果重載采用 out 參數(shù),按照約定,這類參數(shù)應(yīng)作為最后的參數(shù)。 如果需要具有擴(kuò)展性,則僅將最長(zhǎng)的重載設(shè)為 virtual(在 Visual Basic 中為 Overridable)。較短的重載只是調(diào)用較長(zhǎng)的重載。 不要對(duì)重載成員使用 ref 或 out 修飾符。 允許為可選參數(shù)傳遞 null(在 Visual Basic 中為 Nothing)。如果方法帶有引用類型的可選參數(shù),則允許傳遞 null 以指示應(yīng)使用默認(rèn)值。這樣可不必在調(diào)用成員前檢查 null。 使用成員重載而不要用默認(rèn)參數(shù)定義成員。默認(rèn)參數(shù)不符合 CLS,不能在某些語言中使用。 顯式實(shí)現(xiàn)接口成員接口是支持一些功能的協(xié)定。實(shí)現(xiàn)接口的類必須為接口中指定的成員提供實(shí)現(xiàn)細(xì)節(jié)。例如,IEnumerator 接口定義成員簽名,必須實(shí)現(xiàn)成員簽名才能支持對(duì)一組對(duì)象(如集合)進(jìn)行枚舉。若要實(shí)現(xiàn) IEnumerator,類必須實(shí)現(xiàn) Current、MoveNext 和 Reset 成員。當(dāng)接口成員由類顯式實(shí)現(xiàn)時(shí),只能通過使用對(duì)接口的引用來訪問該成員。這將導(dǎo)致隱藏接口成員。顯式實(shí)現(xiàn)接口成員的常見原因不僅是為了符合接口的協(xié)定,而且也是為了以某種方式改進(jìn)它(例如,提供應(yīng)用來代替接口的弱類型方法的強(qiáng)類型方法)。顯式實(shí)現(xiàn)接口成員的另一個(gè)常見原因是存在不應(yīng)由開發(fā)人員調(diào)用顯式接口成員的時(shí)候。例如,GetObjectData 成員是最常顯式實(shí)現(xiàn)的,因?yàn)樗尚蛄谢A(chǔ)結(jié)構(gòu)調(diào)用而不用于從代碼調(diào)用。下列設(shè)計(jì)準(zhǔn)則有助于確保您的庫設(shè)計(jì)僅在需要時(shí)使用顯式接口實(shí)現(xiàn)。 如果沒有充分理由,應(yīng)避免顯式實(shí)現(xiàn)接口成員。要理解顯式實(shí)現(xiàn)需要具備很高深的專業(yè)知識(shí)。例如,很多開發(fā)人員不知道顯式實(shí)現(xiàn)的成員是可以公共調(diào)用的,即使其簽名是私有的也一樣。由于這個(gè)原因,顯式實(shí)現(xiàn)的成員不顯示在公共可見的成員列表中。顯式實(shí)現(xiàn)成員還會(huì)導(dǎo)致對(duì)值類型的不必要裝箱。 如果成員只應(yīng)通過接口調(diào)用,則考慮顯式實(shí)現(xiàn)接口成員。這主要包括支持 .NET Framework 基礎(chǔ)結(jié)構(gòu)(如數(shù)據(jù)綁定或序列化)的成員。例如,IsReadOnly 屬性只應(yīng)由數(shù)據(jù)綁定基礎(chǔ)結(jié)構(gòu)通過使用對(duì) ICollection(Of (T)) 接口的引用來訪問。由于滿足此準(zhǔn)則,List(Of (T)) 類顯式實(shí)現(xiàn)該屬性。 考慮顯式實(shí)現(xiàn)接口成員以模擬變體(即,更改重寫成員中的參數(shù)或返回類型)。為了提供接口成員的強(qiáng)類型版本,通常會(huì)這么做。 考慮顯式實(shí)現(xiàn)接口成員以隱藏一個(gè)成員并添加一個(gè)具有更好名稱的等效成員。這樣可以有效地重命名成員。例如,Stream 顯式實(shí)現(xiàn) Dispose 并在相應(yīng)的位置提供 Close 方法。 不要將顯式成員用作安全邊界。顯式實(shí)現(xiàn)成員不提供任何安全性。通過使用對(duì)接口的引用,這些成員都是可以公共調(diào)用的。 如果顯式實(shí)現(xiàn)的成員的功能意在由派生類特殊化,則一定要提供具有相同功能的受保護(hù)虛擬成員。不能重寫顯式實(shí)現(xiàn)的成員。如果在派生類中重新定義成員,則派生類不能調(diào)用基類實(shí)現(xiàn)。應(yīng)通過使用與顯式接口成員相同的名稱或?qū)?Core 附加到接口成員名稱來命名受保護(hù)成員。 在屬性和方法之間選擇通常,方法代表操作而屬性代表數(shù)據(jù)。屬性應(yīng)像字段一樣使用,這意味著屬性不應(yīng)進(jìn)行復(fù)雜的計(jì)算,也不應(yīng)產(chǎn)生副作用。在不違反下列準(zhǔn)則的情況下,應(yīng)考慮使用屬性而不是方法,因?yàn)閷傩詫?duì)于經(jīng)驗(yàn)較少的開發(fā)人員更易于使用。 如果成員表示類型的邏輯屬性 (Attribute),請(qǐng)考慮使用屬性 (Property)。例如,BorderStyle 是一個(gè)屬性 (Property),因?yàn)檫吙驑邮绞?ListView 的屬性 (Attribute)。 如果屬性值存儲(chǔ)在進(jìn)程內(nèi)存中并且該屬性只是用于提供對(duì)值的訪問,則要使用屬性而不是方法。 在下列情況下要使用方法而不是屬性。操作比字段集慢數(shù)個(gè)數(shù)量級(jí)。即使考慮提供異步版本的操作來避免阻止線程,該操作也很可能因開銷太大而不能使用屬性。特別是,訪問網(wǎng)絡(luò)或文件系統(tǒng)(一次性初始化除外)的操作最可能是方法,而不是屬性。操作是轉(zhuǎn)換,如 method。操作在每次調(diào)用時(shí)都返回不同的結(jié)果,即使參數(shù)不發(fā)生更改也是如此。例如,NewGuid 方法在每次調(diào)用時(shí)都返回不同的值。操作具有很大的顯而易見的副作用。注意,一般不將填充內(nèi)部緩存視為是顯而易見的副作用。 操作返回內(nèi)部狀態(tài)的副本(這不包括在堆棧上返回的值類型對(duì)象的副本)。 操作返回一個(gè)數(shù)組。如果操作返回一個(gè)數(shù)組,應(yīng)使用方法,原因是:要保留內(nèi)部數(shù)組,必須返回?cái)?shù)組的深層副本而不是對(duì)屬性所使用的數(shù)組的引用。這一事實(shí)加之開發(fā)人員將屬性視同字段一樣使用的事實(shí),可能會(huì)導(dǎo)致代碼效率十分低下。 屬性設(shè)計(jì)通常,方法代表操作而屬性代表數(shù)據(jù)。屬性像字段一樣使用,這意味著屬性不應(yīng)進(jìn)行復(fù)雜的計(jì)算,也不應(yīng)產(chǎn)生副作用。有關(guān)屬性設(shè)計(jì)的更多信息,請(qǐng)參見索引屬性設(shè)計(jì)和屬性更改通知事件。下列準(zhǔn)則可幫助確保正確地設(shè)計(jì)屬性。 如果調(diào)用方不應(yīng)當(dāng)更改屬性值,則要?jiǎng)?chuàng)建只讀屬性。注意,屬性類型的可變性會(huì)影響最終用戶可以更改的內(nèi)容。例如,如果定義一個(gè)返回讀/寫集合的只讀屬性,則最終用戶不能向該屬性分配其他集合,但可以修改該集合中的元素。 不要提供僅支持 Set 操作的屬性。如果無法提供屬性 getter,可以改用一個(gè)方法來實(shí)現(xiàn)該功能。方法名稱應(yīng)以 Set 開頭,并按原樣后跟屬性名。例如,AppDomain 使用一個(gè)名為 SetCachePath 的方法,而不是名為 CachePath 的僅支持 Set 操作的屬性。 避免從屬性 getter 中引發(fā)異常。屬性 getter 應(yīng)是沒有任何前提條件的簡(jiǎn)單操作。如果 getter 可能會(huì)引發(fā)異常,請(qǐng)考慮將該屬性重新設(shè)計(jì)為方法。此項(xiàng)建議不適用于索引器。索引可以因參數(shù)無效而引發(fā)異常。在屬性 setter 中引發(fā)異常是有效并可以接受的。 索引屬性設(shè)計(jì)索引屬性允許像訪問數(shù)組一樣對(duì)一組項(xiàng)(例如字符串中的字符,或 BitArray 中的位)進(jìn)行訪問。索引屬性(稱為索引器或默認(rèn)屬性)與常規(guī)屬性不同,因?yàn)樗饕龑傩越邮軈?shù),參數(shù)指示要訪問組中的哪個(gè)元素。索引屬性的實(shí)現(xiàn)應(yīng)盡可能簡(jiǎn)單,因?yàn)樗饕鹘?jīng)常在循環(huán)中使用。下面的準(zhǔn)則幫助確保您的類型在適當(dāng)情況下包含設(shè)計(jì)良好的索引。 避免使用具有多個(gè)參數(shù)的索引屬性。如果一個(gè)索引器需要多個(gè)參數(shù),請(qǐng)重新評(píng)估該屬性是否確實(shí)表示對(duì)邏輯集合的訪問。如果不是,則改用方法,并考慮選擇以 Get 或 Set 開頭的方法名。 避免為索引器設(shè)置除 、枚舉或泛型類型參數(shù)之外的其他參數(shù)類型。如果設(shè)計(jì)需要其他類型的參數(shù),應(yīng)該仔細(xì)重新評(píng)估該成員是否確實(shí)表示對(duì)邏輯集合的訪問。如果不是,則改用方法,并考慮選擇以 Get 或 Set 開頭的方法名。 將“Item”名稱用于索引屬性,除非明顯有更好的名稱(有關(guān)示例,請(qǐng)參見 () 屬性)。使用 IndexerNameAttribute 屬性可自定義索引器的名稱。 不要同時(shí)提供在語義上等效的索引器和方法。 不要在一個(gè)類型中提供一組以上的重載索引器。一些編譯器(如 C 編譯器)會(huì)強(qiáng)制實(shí)施此準(zhǔn)則。有些語言不支持多組索引器。如果使用了多組索引器,有些開發(fā)人員將無法訪問這些成員。 不要使用非默認(rèn)索引屬性。一些編譯器(如 C 編譯器)會(huì)強(qiáng)制實(shí)施此準(zhǔn)則。并不是所有編程語言都支持非默認(rèn)索引屬性。如果使用了非默認(rèn)索引屬性,有些開發(fā)人員將無法訪問這些成員。 屬性更改通知事件屬性更改通知事件用于在屬性值因內(nèi)部或外部活動(dòng)發(fā)生更改時(shí)向代碼發(fā)出通知。這使得代碼可以根據(jù)需要更新相關(guān)狀態(tài)(例如,改變用戶界面中控件的外觀)。 當(dāng)修改高級(jí) API(通常是設(shè)計(jì)器組件)中的屬性值時(shí),應(yīng)考慮引發(fā)更改通知事件。這項(xiàng)準(zhǔn)則適用于那些可通過更改通知將重要值添加到庫的高級(jí)成員。例如,提供用戶界面或與之交互的對(duì)象使用更改通知使相關(guān)用戶界面對(duì)象相應(yīng)地得到更新。當(dāng)不向庫添加值或通知會(huì)頻繁地執(zhí)行以致對(duì)性能造成嚴(yán)重影響的情況下,不應(yīng)使用更改通知事件。例如,在每次向常規(guī)集合添加元素或?qū)⒃貜闹袆h除時(shí)就引發(fā)更改通知事件是不正確的。若要避免給常用類型增加不必要的復(fù)雜性,在需要這一功能時(shí)應(yīng)使用一個(gè)專用集合。.NET Framework 版的庫提供了 Collection(Of (T)),該集合用作常規(guī)集合。Framework 還為需要通知的集合提供了 BindingList(Of (T))。 當(dāng)屬性值由于外部因素發(fā)生更改時(shí),應(yīng)考慮引發(fā)更改通知事件。如果屬性值由于某種外部因素(如用戶輸出)發(fā)生更改,則應(yīng)在更改永久生效之前使用更改通知事件指示該值即將更改。在更改永久生效后,可使用另一事件指示該值已進(jìn)行了更改。例如,Control 類提供了 Validating 和 Validated 事件來向代碼發(fā)出驗(yàn)證控件的通知。 構(gòu)造函數(shù)設(shè)計(jì)構(gòu)造函數(shù)是一類特殊的方法,用于初始化類型和創(chuàng)建類型的實(shí)例。類型構(gòu)造函數(shù)用于初始化類型中的靜態(tài)數(shù)據(jù)。類型構(gòu)造函數(shù)由公共語言運(yùn)行庫 (CLR) 在創(chuàng)建類型的任何實(shí)例之前調(diào)用。類型構(gòu)造函數(shù)是 static(在 Visual Basic 中為 Shared)方法,不能帶任何參數(shù)。實(shí)例構(gòu)造函數(shù)用于創(chuàng)建類型的實(shí)例。實(shí)例構(gòu)造函數(shù)可以帶參數(shù),也可以不帶參數(shù)。不帶任何參數(shù)的實(shí)例構(gòu)造函數(shù)稱為默認(rèn)構(gòu)造函數(shù)。下列準(zhǔn)則描述了創(chuàng)建構(gòu)造函數(shù)的最佳做法。 將構(gòu)造函數(shù)參數(shù)用作設(shè)置主要屬性的快捷方式。通過使用構(gòu)造函數(shù)設(shè)置屬性應(yīng)與直接設(shè)置屬性相同。 如果構(gòu)造函數(shù)參數(shù)只用于設(shè)置一個(gè)屬性,請(qǐng)務(wù)必為構(gòu)造函數(shù)參數(shù)和該屬性使用相同的名稱。這類參數(shù)和屬性之間的唯一差異應(yīng)是大小寫不同。前面的示例已對(duì)此準(zhǔn)則進(jìn)行了演示。 根據(jù)需要,可在實(shí)例構(gòu)造函數(shù)中引發(fā)異常。構(gòu)造函數(shù)與其他方法一樣,應(yīng)引發(fā)并處理異常。具體地說,構(gòu)造函數(shù)不應(yīng)捕捉和隱藏它無法處理的任何異常。有關(guān)異常的更多信息,請(qǐng)參見異常設(shè)計(jì)準(zhǔn)則。 如果需要公共默認(rèn)構(gòu)造函數(shù),請(qǐng)?jiān)陬愔羞M(jìn)行顯式聲明。如果類支持默認(rèn)構(gòu)造函數(shù),則顯式定義默認(rèn)構(gòu)造函數(shù)是最佳做法。盡管某些編譯器會(huì)自動(dòng)向類中添加默認(rèn)構(gòu)造函數(shù),但顯式添加默認(rèn)構(gòu)造函數(shù)會(huì)使代碼更易于維護(hù)。即使由于您添加了帶參數(shù)的構(gòu)造函數(shù),導(dǎo)致編譯器停止發(fā)
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1