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

正文內容

類庫開發(fā)的設計準則結構設計(編輯修改稿)

2025-07-24 05:45 本頁面
 

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