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

正文內(nèi)容

類庫開發(fā)的設(shè)計(jì)準(zhǔn)則結(jié)構(gòu)設(shè)計(jì)-在線瀏覽

2024-08-07 05:45本頁面
  

【正文】 保留以下領(lǐng)域名稱Infrastructure:表示架構(gòu)Dictionary:表示字典Package:包名稱,如:Common(通用),Resources(物資)等Database:數(shù)據(jù)庫名稱。應(yīng)將在同一方案中使用的類型盡可能放在同一命名空間中。 避免將設(shè)計(jì)用于高級(jí)方案的類型與設(shè)計(jì)用于常見編程任務(wù)的類型放入同一命名空間中。例如,與 XML 序列化相關(guān)的常用類型位于 命名空間中,而高級(jí)類型則位于 命名空間中。未指定命名空間的類型放在全局命名空間中。此外,全局命名空間中的名稱沖突問題也無法解決。 標(biāo)準(zhǔn)子命名空間子命名空間是命名空間中的命名空間。下列準(zhǔn)則可幫助將某些特殊類型組織到主要功能命名空間下的已知命名空間中。例如,與 Windows 窗體組件的設(shè)計(jì)時(shí)配置和行為相關(guān)的類型位于 命名空間中。.Interop 子命名空間中的類型允許軟件與 Microsoft 組件對(duì)象模型 (COM) 對(duì)象等舊版代碼進(jìn)行交互。有關(guān)主互操作程序集的更多信息,請(qǐng)參見主互操作程序集。引用類型在堆中分配,內(nèi)存管理由垃圾回收器處理。通常,值類型的分配和釋放開銷更小。有關(guān)更多信息,請(qǐng)參見裝箱和取消裝箱(C 編程指南)。 不要定義結(jié)構(gòu),除非該類型具備以下所有特征:它在邏輯上表示單個(gè)值,與基元類型(整型、雙精度型等)類似。它是不可變的。 如果這些條件中的一個(gè)或多個(gè)沒有滿足,則創(chuàng)建引用類型而不是結(jié)構(gòu)。 在類和接口之間選擇接口定義實(shí)施者必須提供的一組成員的簽名。例如,ICollection 接口定義與使用集合相關(guān)的成員。類可以實(shí)現(xiàn)多個(gè)接口。Abstract(在 Visual Basic 中為 MustInherit)類的行為在某方面與接口或普通類相同,即可以定義成員,可以提供實(shí)現(xiàn)細(xì)節(jié),但并不要求一定這樣做。 雖然抽象類和接口都支持將協(xié)定與實(shí)現(xiàn)分離開來,但接口不能指定以后版本中的新成員,而抽象類可以根據(jù)需要添加成員以支持更多功能。在庫的以后版本中,可以安全地向類添加新成員;而對(duì)于接口,則只有修改現(xiàn)有代碼才能添加成員。值類型必須從 ValueType 繼承,并且只能從 ValueType 繼承,因此值類型不能使用類來分離協(xié)定和實(shí)現(xiàn)。 請(qǐng)考慮定義接口來達(dá)到類似于多重繼承的效果。例如,IDisposable 是由許多不同情況下使用的類型實(shí)現(xiàn)的。MemoryStream 等應(yīng)從其父類繼承基于流的協(xié)定的類,不可能還是可處置的。確保抽象類功能的正確性和擴(kuò)展性也很重要。 不要在抽象類型中定義公共的或受保護(hù)的內(nèi)部(在 Visual Basic 中為 Protected Friend)構(gòu)造函數(shù)。任何情況下抽象類型都不能實(shí)例化。如果在抽象類中定義一個(gè)受保護(hù)構(gòu)造函數(shù),則在創(chuàng)建派生類的實(shí)例時(shí),基類可執(zhí)行初始化任務(wù)。 對(duì)于您提供的每個(gè)抽象類,至少應(yīng)提供一個(gè)具體的繼承類型。同時(shí)意味著開發(fā)人員在進(jìn)行高級(jí)別開發(fā)時(shí),即使不了解抽象類和繼承,也可以使用具體類而不必學(xué)習(xí)這些概念。Framework 提供了 HttpWebRequest 和 HttpWebResponse 類,分別作為這兩個(gè)抽象類的幾個(gè)具體實(shí)現(xiàn)之一,它們是相應(yīng)抽象類的 HTTP 特定的實(shí)現(xiàn)。下面的準(zhǔn)則有助于確保正確設(shè)計(jì)靜態(tài)類。Environment 類使用靜態(tài)類的方式值得學(xué)習(xí)。 不要聲明或重寫靜態(tài)類中的實(shí)例成員。 如果編程語言沒有對(duì)靜態(tài)類的內(nèi)置支持,則應(yīng)將靜態(tài)類聲明為密封的和抽象的,并添加一個(gè)私有實(shí)例構(gòu)造函數(shù)。接口不能提供成員的實(shí)現(xiàn)細(xì)節(jié)。實(shí)現(xiàn)該接口的每個(gè)具體類都必須提供這些成員的實(shí)現(xiàn)細(xì)節(jié)。下面的準(zhǔn)則有助于確保正確設(shè)計(jì)接口。值類型必須從 ValueType 繼承。 避免使用標(biāo)記接口(沒有成員的接口)。有關(guān)自定義屬性的更多信息,請(qǐng)參見編寫自定義屬性。如果需要進(jìn)行編譯時(shí)檢查,則不能使用此準(zhǔn)則。這樣有助于確保正確設(shè)計(jì)和順利實(shí)現(xiàn)接口。 對(duì)于定義的每個(gè)接口,請(qǐng)?zhí)峁┲辽僖粋€(gè)使用該接口的成員(例如,采用該接口作為參數(shù)的方法,或類型化為接口的屬性)。 不要向以前提供的接口添加成員。這就是為什么在可能的情況下,通常首選使用類而不是接口的主要原因之一。如果接口的交付定義要求更多成員,則可以實(shí)現(xiàn)新的接口和使用該接口的適當(dāng)成員。結(jié)構(gòu)是在堆棧上或以內(nèi)聯(lián)方式分配的,當(dāng)結(jié)構(gòu)超出范圍時(shí)將被釋放。有關(guān)更多信息,請(qǐng)參見裝箱和取消裝箱(C 編程指南)。 不要為結(jié)構(gòu)提供默認(rèn)的構(gòu)造函數(shù)。有些編譯器(如 C 編譯器)不允許結(jié)構(gòu)擁有默認(rèn)構(gòu)造函數(shù)。在確定兩個(gè)值類型是否相等時(shí),IEquatable(Of (T)) 要優(yōu)于 Equals。 確保所有實(shí)例數(shù)據(jù)均設(shè)置為零、false 或 null(根據(jù)需要)的狀態(tài)是無效的。例如,下面的結(jié)構(gòu)的設(shè)計(jì)是錯(cuò)誤的。這意味著實(shí)例字段 label 初始化為 null(在 Visual Basic 中為 Nothing),這對(duì)于此結(jié)構(gòu)的 ToString 實(shí)現(xiàn)是無效的。有些編譯器不允許擴(kuò)展 ValueType。枚舉分為簡單枚舉和標(biāo)志枚舉兩種。標(biāo)志枚舉應(yīng)使用按位 OR 操作進(jìn)行組合。下列指南介紹了枚舉設(shè)計(jì)的最佳做法。 不要對(duì)開放集(如操作系統(tǒng)版本)使用枚舉。有時(shí)可以接受這種做法,但不應(yīng)在可能出現(xiàn)這種情況的場合設(shè)計(jì)枚舉。某些情況下,您可能認(rèn)為為了向提供的枚舉添加值,值得冒可能中斷現(xiàn)有代碼的風(fēng)險(xiǎn)。 一定不要將 sentinel 值包括在枚舉中。通常,sentinel 值用于范圍檢查,它不是一個(gè)有效的數(shù)據(jù)值。如果可能,將此值命名為 None。 考慮將 (大多數(shù)編程語言的默認(rèn)數(shù)據(jù)類型)用作枚舉的基礎(chǔ)數(shù)據(jù)類型,除非出現(xiàn)以下任何一種情況:枚舉是標(biāo)志枚舉,且您有 32 個(gè)以上的標(biāo)志或者期望在將來有更多的標(biāo)志。較小的基礎(chǔ)類型可以節(jié)省大量空間。如果出現(xiàn)下面的情況,大小節(jié)省可能會(huì)很重要:期望枚舉被用作非常頻繁地實(shí)例化的結(jié)構(gòu)或類中的字段。 預(yù)計(jì)要序列化大量枚舉實(shí)例。一些編譯器不允許擴(kuò)展 Enum,除非間接地使用生成枚舉的語言特定的關(guān)鍵字來進(jìn)行擴(kuò)展。在可以同時(shí)指定多個(gè)枚舉值的情況下,它們是可使用的正確設(shè)計(jì)。 對(duì)標(biāo)志枚舉值使用 2 的冪,以便這些值可以使用按位“或”運(yùn)算自由組合。組合標(biāo)志枚舉值是一種中級(jí)技能,對(duì)于實(shí)現(xiàn)常見方案的開發(fā)人員來說不是必需的。這向開發(fā)人員表明他們可以打開共享文件進(jìn)行讀寫,并且他們無需了解如何將枚舉值組合指定為單個(gè)值。此問題通常表明該枚舉的含義不夠精確。 避免將標(biāo)志枚舉值設(shè)置為零,除非該值用于指示所有標(biāo)志都被清除。注意,此項(xiàng)準(zhǔn)則只適用于標(biāo)志枚舉。 將標(biāo)志的零值命名為 None。 向枚舉添加值下面的準(zhǔn)則討論如何為庫用戶引入可能影響重大的更改。 盡管有一些小的兼容風(fēng)險(xiǎn),還是請(qǐng)考慮向枚舉添加值。若要使用最少的代碼向現(xiàn)有枚舉添加值,可實(shí)現(xiàn)返回值全集的新成員,并使用 ObsoleteAttribute 屬性標(biāo)記現(xiàn)有成員(返回原始值集的成員)。 嵌套類型嵌套類型是作為某其他類型的成員的類型。有些開發(fā)人員會(huì)將嵌套類型弄混淆,因此嵌套類型不應(yīng)是公開可見的,除非不得不這樣做。在聲明類型使用和創(chuàng)建嵌套類型實(shí)例時(shí),嵌套類型很有用,但不在公共成員中公開嵌套類型的使用。由于嵌套類型被視為是聲明類型的成員,因此嵌套類型可以訪問聲明類型中的所有其他成員。在常見方案中,不應(yīng)要求對(duì)嵌套類型進(jìn)行變量聲明和對(duì)象實(shí)例化。 如果需要由客戶端代碼實(shí)例化類型,則不要使用嵌套類型。理想情況下,嵌套類型僅由它的聲明類型進(jìn)行實(shí)例化和使用。通常情況下,嵌套類型不應(yīng)針對(duì)其聲明類型以外的類型執(zhí)行任務(wù)。 不要將嵌套類型定義為接口的成員。 3 成員設(shè)計(jì)準(zhǔn)則類型和接口可以包含以下任何成員:方法屬性構(gòu)造函數(shù)事件字段 成員重載成員的簽名包含成員的名稱和參數(shù)列表。只要成員的參數(shù)列表不同,成員的名稱可以相同。例如,Array 類包含兩個(gè) CopyTo 方法。重載成員在同一功能上應(yīng)有所不同。對(duì)成員進(jìn)行重載通常是為了提供帶少量參數(shù)或不帶參數(shù)且易于使用的重載。易于使用的重載通過向復(fù)雜重載傳遞默認(rèn)值,支持常見的方案。簡單重載 Open 采用文件路徑和文件模式作為參數(shù)。如果開發(fā)人員不需要復(fù)雜重載所具有的靈活性,則不必了解文件訪問和共享模型就可以打開文件。 盡量使用描述性參數(shù)名稱指示簡單重載所使用的默認(rèn)值。復(fù)雜重載的參數(shù)名稱應(yīng)通過描述相反的狀態(tài)或操作來指示簡單重載所提供的默認(rèn)值。即簡單重載區(qū)分大小寫,僅當(dāng)要忽略大小寫時(shí),才需要使用復(fù)雜重載。 避免隨意更改重載中的參數(shù)名稱。 保持重載成員中參數(shù)順序的一致性。此準(zhǔn)則有兩項(xiàng)約束:如果重載采用變量參數(shù)列表,則該列表必須是最后一個(gè)參數(shù)。 如果需要具有擴(kuò)展性,則僅將最長的重載設(shè)為 virtual(在 Visual Basic 中為 Overridable)。 不要對(duì)重載成員使用 ref 或 out 修飾符。如果方法帶有引用類型的可選參數(shù),則允許傳遞 null 以指示應(yīng)使用默認(rèn)值。 使用成員重載而不要用默認(rèn)參數(shù)定義成員。 顯式實(shí)現(xiàn)接口成員接口是支持一些功能的協(xié)定。例如,IEnumerator 接口定義成員簽名,必須實(shí)現(xiàn)成員簽名才能支持對(duì)一組對(duì)象(如集合)進(jìn)行枚舉。當(dāng)接口成員由類顯式實(shí)現(xiàn)時(shí),只能通過使用對(duì)接口的引用來訪問該成員。顯式實(shí)現(xiàn)接口成員的常見原因不僅是為了符合接口的協(xié)定,而且也是為了以某種方式改進(jìn)它(例如,提供應(yīng)用來代替接口的弱類型方法的強(qiáng)類型方法)。例如,GetObjectData 成員是最常顯式實(shí)現(xiàn)的,因?yàn)樗尚蛄谢A(chǔ)結(jié)構(gòu)調(diào)用而不用于從代碼調(diào)用。 如果沒有充分理由,應(yīng)避免顯式實(shí)現(xiàn)接口成員。例如,很多開發(fā)人員不知道顯式實(shí)現(xiàn)的成員是可以公共調(diào)用的,即使其簽名是私有的也一樣。顯式實(shí)現(xiàn)成員還會(huì)導(dǎo)致對(duì)值類型的不必要裝箱。這主要包括支持 .NET Framework 基礎(chǔ)結(jié)構(gòu)(如數(shù)據(jù)綁定或序列化)的成員。由于滿足此準(zhǔn)則,List(Of (T)) 類顯式實(shí)現(xiàn)該屬性。為了提供接口成員的強(qiáng)類型版本,通常會(huì)這么做。這樣可以有效地重命名成員。 不要將顯式成員用作安全邊界。通過使用對(duì)接口的引用,這些成員都是可以公共調(diào)用的。不能重寫顯式實(shí)現(xiàn)的成員。應(yīng)通過使用與顯式接口成員相同的名稱或?qū)?Core 附加到接口成員名稱來命名受保護(hù)成員。屬性應(yīng)像字段一樣使用,這意味著屬性不應(yīng)進(jìn)行復(fù)雜的計(jì)算,也不應(yīng)產(chǎn)生副作用。 如果成員表示類型的邏輯屬性 (Attribute),請(qǐng)考慮使用屬性 (Property)。 如果屬性值存儲(chǔ)在進(jìn)程內(nèi)存中并且該屬性只是用于提供對(duì)值的訪問,則要使用屬性而不是方法。操作比字段集慢數(shù)個(gè)數(shù)量級(jí)。特別是,訪問網(wǎng)絡(luò)或文件系統(tǒng)(一次性初始化除外)的操作最可能是方法,而不是屬性。操作在每次調(diào)用時(shí)都返回不同的結(jié)果,即使參數(shù)不發(fā)生更改也是如此。操作具有很大的顯而易見的副作用。 操作返回內(nèi)部狀態(tài)的副本(這不包括在堆棧上返回的值類型對(duì)象的副本)。如果操作返回一個(gè)數(shù)組,應(yīng)使用方法,原因是:要保留內(nèi)部數(shù)組,必須返回?cái)?shù)組的深層副本而不是對(duì)屬性所使用的數(shù)組的引用。 屬性設(shè)計(jì)通常,方法代表操作而屬性代表數(shù)據(jù)。有關(guān)屬性設(shè)計(jì)的更多信息,請(qǐng)參見索引屬性設(shè)計(jì)和屬性更改通知事件。 如果調(diào)用方不應(yīng)當(dāng)更改屬性值,則要?jiǎng)?chuàng)建只讀屬性。例如,如果定義一個(gè)返回讀/寫集合的只讀屬性,則最終用戶不能向該屬性分配其他集合,但可以修改該集合中的元素。如果無法提供屬性 getter,可以改用一個(gè)方法來實(shí)現(xiàn)該功能。例如,AppDomain 使用一個(gè)名為 SetCachePath 的方法,而不是名為 CachePath 的僅支持 Set 操作的屬性。屬性 getter 應(yīng)是沒有任何前提條件的簡單操作。此項(xiàng)建議不適用于索引器。在屬性 setter 中引發(fā)異常是有效并可以接受的。索引屬性(稱為索引器或默認(rèn)屬性)與常規(guī)屬性不同,因?yàn)樗饕龑傩越邮軈?shù),參數(shù)指示要訪問組中的哪個(gè)元素。下面的準(zhǔn)則幫助確保您的類型在適當(dāng)情況下包含設(shè)計(jì)良好的索引。如果一個(gè)索引器需要多個(gè)參數(shù),請(qǐng)重新評(píng)估該屬性是否確實(shí)表示對(duì)邏輯集合的訪問。 避免為索引器設(shè)置除 、枚舉或泛型類型參數(shù)之外的其他參數(shù)類型。如果不是,則改用方法,并考慮選擇以 Get 或 Set 開頭的方法名。使用 IndexerNameAttribute 屬性可自定義索引器的名稱。 不要在一個(gè)類型中提供一組以上的重載索引器。有些語言不支持多組索引器。 不要使用非默認(rèn)索引屬性。并不是所有編程語言都支持非默認(rèn)索引屬性。 屬性更改通知事件屬性更改通知事件用于在屬性值因內(nèi)部或外部活動(dòng)發(fā)生更改時(shí)向代碼發(fā)出通知。 當(dāng)修改高級(jí) API(通常是設(shè)計(jì)器組件)中的屬性值時(shí),應(yīng)考慮引發(fā)更改通知事件。例如,提供用戶界面或與之交互的對(duì)象使用更改通知使相關(guān)用戶界面對(duì)象相應(yīng)地得到更新。例如,在每次向常規(guī)集合添加元素或?qū)⒃貜闹袆h除時(shí)就引發(fā)更改通知事件是不正確的。.NET Framework 版的庫提供了 Collection(Of (T)),該集合用作常規(guī)集合。 當(dāng)屬性值由于外部因素發(fā)生更改時(shí),應(yīng)考慮引發(fā)更改通知事件。在更改永久生效后,可使用另一事件指示該值已進(jìn)行了更改。 構(gòu)造函數(shù)設(shè)計(jì)構(gòu)造函數(shù)是一類特殊的方法,用于初始化類型和創(chuàng)建類型的實(shí)例。類型構(gòu)造函數(shù)由公共語言運(yùn)行庫 (CLR) 在創(chuàng)建類型的任何實(shí)例之前調(diào)用。實(shí)例構(gòu)造函數(shù)用于創(chuàng)建類型的實(shí)例。不帶任何參數(shù)的實(shí)例構(gòu)造函數(shù)稱為默認(rèn)構(gòu)造函數(shù)。 將構(gòu)造函數(shù)參數(shù)用作設(shè)置主要屬性的快捷方式。 如果構(gòu)造函數(shù)參數(shù)只用于設(shè)置一個(gè)屬性,請(qǐng)務(wù)必為構(gòu)造函數(shù)參數(shù)和該屬性使用相同的名稱。前面的示例已對(duì)此準(zhǔn)則進(jìn)行了演示。構(gòu)造函數(shù)與其他方法一樣,應(yīng)引發(fā)并處理異常。有關(guān)異常的更多信息,請(qǐng)參見異常設(shè)計(jì)準(zhǔn)則。如果類支持默認(rèn)構(gòu)造函數(shù),則顯式定義默認(rèn)構(gòu)造函數(shù)是最佳做法。即使由于您添加了帶參數(shù)的構(gòu)造函數(shù),導(dǎo)致編譯器停止發(fā)出默認(rèn)構(gòu)造函數(shù),這樣也可確保定義默認(rèn)構(gòu)造函數(shù)。許多編譯器(包括 C 編譯器)不支持在結(jié)構(gòu)中使用無參數(shù)構(gòu)造函數(shù)。無論是否調(diào)用了定義派生程度最高的重寫的類型的構(gòu)造函數(shù),調(diào)用虛成員都會(huì)導(dǎo)致調(diào)用派生程度最高的重寫?;?
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1