




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、.NET程序編碼規(guī)范運(yùn)行管理系統(tǒng)項(xiàng)目.NET程序編碼規(guī)范OICS-01-02-NET程序編碼規(guī)范v1.00微軟(中國(guó))有限公司顧問(wèn)咨詢部2022年6月修改日期修改人修改內(nèi)容2007-7-31戴輝江V1.00發(fā)布目錄1.概述52.命名規(guī)范52.1大寫(xiě)風(fēng)格52.1.1Pascal風(fēng)格52.1.2Camel風(fēng)格52.1.3大寫(xiě)風(fēng)格52.1.4大寫(xiě)小結(jié)62.2單詞選擇62.2.1縮寫(xiě)72.3命名空間72.4類和類成員82.4.1類的命名指南82.4.2Attribute命名指南82.4.3枚舉命名指南92.4.4靜態(tài)類屬性名92.4.5參數(shù)名92.4.6方法命名指南92.4.7屬性命名指南92.4.8
2、事件命名指南102.5大小寫(xiě)敏感103.程序注釋規(guī)范113.1模塊注釋113.2類的注釋123.3類成員方法的注釋133.4類成員屬性、常量、變量的注釋143.5程序注釋144.類成員使用規(guī)范144.1屬性使用指南144.1.1只讀和只寫(xiě)的屬性174.2事件使用指南174.3方法使用指南184.3.1方法重載指南184.4構(gòu)建函數(shù)使用指南194.5類的成員變量使用指南194.6參數(shù)名稱指南215.類型使用指南215.1類使用指南225.1.1基類使用指南225.2值類型使用指南225.2.1結(jié)構(gòu)使用指南225.2.2枚舉使用指南235.3程序代理使用指南245.4程序?qū)傩?Attribute)
3、的使用246.異常的產(chǎn)生和處理256.1標(biāo)準(zhǔn)異常類型276.2異常的包裝Wrapping Exceptions287.數(shù)組使用指南297.1數(shù)組vs. 集合297.1.1集合297.1.2集合中可索引的屬性297.1.3數(shù)組值屬性297.2返回空數(shù)組298.日志和跟蹤使用指南308.1日志(Log)使用指南308.2跟蹤(Tracing)使用指南301. 概述 在建設(shè)過(guò)程中,將涉及到在新的Visual Studio.NET以及.NET Framework平臺(tái)上的開(kāi)發(fā)工作。同時(shí),設(shè)計(jì)人員、開(kāi)發(fā)人員和測(cè)試人員較多。為了使應(yīng)用程序的結(jié)構(gòu)和編碼風(fēng)格標(biāo)準(zhǔn)化,便于閱讀和理解編碼,以提高開(kāi)發(fā)效率和產(chǎn)品的標(biāo)準(zhǔn)
4、化,制訂一套開(kāi)發(fā)規(guī)范和標(biāo)準(zhǔn)勢(shì)在必行。此外,好的編碼約定可使源代碼嚴(yán)謹(jǐn)、可讀性強(qiáng)且意義清楚,與其它語(yǔ)言約定相一致,并且盡可能的直觀。希望開(kāi)發(fā)人員嚴(yán)格遵守此套開(kāi)發(fā)規(guī)范和標(biāo)準(zhǔn),并落實(shí)到自己的程序中。一組通用目的的編碼約定應(yīng)該定義完成上述目的所必需的、能讓程序員自由地創(chuàng)建程序邏輯和功能流程的最小的要求。最小編碼約定的目的是使程序易于閱讀和理解,從而指導(dǎo)程序員更好地完成開(kāi)發(fā)任務(wù)。本規(guī)范主要針對(duì)使用Visual Studio.NET以及.NET Framework開(kāi)發(fā)的基于Web的應(yīng)用系統(tǒng)。2. 命名規(guī)范 在命名指南中要注意三個(gè)要素、 大小寫(xiě): 使用正確的大小寫(xiě)風(fēng)格.、 技巧: 使用名詞來(lái)命名類,動(dòng)詞來(lái)命
5、名方法等等.、 選擇詞匯: 在庫(kù)中使用一致的短語(yǔ)以下章節(jié)描述了大小寫(xiě)技巧和一些詞匯選擇的原則. 2.1 大寫(xiě)風(fēng)格以下章節(jié)描述了不同方式的大寫(xiě)方式.這些術(shù)語(yǔ)將在通篇文檔中被經(jīng)常引用.2.1.1 Pascal風(fēng)格 這種風(fēng)格大寫(xiě)每個(gè)單詞的首字母 BackColor應(yīng)在所有由多單詞組成的公共描述符中使用這種方式.舉例而言,使用TextColor就比 Textcolor或Text_color更好.注意不要大寫(xiě) “連接詞”(一個(gè)單詞中包含了幾個(gè)單詞,但這個(gè)單詞本身有自己的意思,如Checkbook)每個(gè)組合單詞的首字母。應(yīng)該將這個(gè)單詞作為一個(gè)單詞來(lái)考慮,而非幾個(gè)單詞的組合。使用詞典決定一個(gè)組合詞是不是應(yīng)該
6、作為一個(gè)單詞來(lái)使用。2.1.2 Camel風(fēng)格這種風(fēng)格除了第一個(gè)單詞的首字母,其他單詞都應(yīng)大寫(xiě)首字母,如下所示backColor在局部變量參數(shù)名或私有類屬性名稱上使用camel風(fēng)格。 2.1.3 大寫(xiě)風(fēng)格只在少于兩個(gè)字母的縮寫(xiě)中使用大寫(xiě)。三個(gè)以上字母的縮寫(xiě)都應(yīng)該使用PASCAL風(fēng)格。舉例而言 System.IO System.Web.UI System.CodeDom一個(gè)另外的情形是和原有的未管理的標(biāo)志兼容,而原來(lái)常用大寫(xiě)來(lái)表示枚舉和常量。通常這些標(biāo)志符不應(yīng)該暴露給外部。2.1.4 大寫(xiě)小結(jié)下表描述了不同類型的描述符該怎么使用大小寫(xiě)類型風(fēng)格備注ClassPascal風(fēng)格
7、Enumeration valuePascal風(fēng)格 Enumeration typePascal風(fēng)格 EventPascal風(fēng)格 Exception classPascal風(fēng)格用后綴Exception.Read-only static fieldPascal風(fēng)格 InterfacePascal風(fēng)格用前綴 I.MethodPascal風(fēng)格 NamespacePascal風(fēng)格 PropertyPascal風(fēng)格 Public instance fieldPas
8、cal風(fēng)格很少使用,更多使用properties. Protected instance fieldcamel風(fēng)格很少使用,更多使用properties. Parametercamel風(fēng)格 2.2 單詞選擇、 不要使用常用的命名空間的名字做類名,舉例而言不要使用以下任何單詞做類名System Collections Forms UI、 不要使用和以下關(guān)鍵字沖突的識(shí)別符,舉例而言,避免這樣使用:AddHandlerAddressOfAliasAndAnsiAsAssemblyAutoBaseBooleanByRefByteByValCallCaseCatchCBoolCBy
9、teCCharCDateCDecCDblCharCIntClassCLngCObjConstCShortCSngCStrCTypeDateDecimalDeclareDefaultDelegateDimDoDoubleEachElseElseIfEndEnumEraseErrorEventExitExternalSourceFalse FinalizeFinally FloatForFriendFunctionGetGetTypeGoto HandlesIfImplementsImportsInInheritsIntegerInterfaceIsLetLibLikeLongLoopMeModM
10、oduleMustInheritMustOverrideMyBaseMyClassNamespaceNewNextNotNothingNotInheritableNotOverridableObjectOnOptionOptionalOrOverloadsOverridableOverridesParamArrayPreservePrivatePropertyProtectedPublicRaiseEventReadOnlyReDimRegionREMRemoveHandlerResumeReturnSelectSetShadowsSharedShortSingleStaticStepStop
11、StringStructureSubSyncLockThenThrowToTrueTryTypeOfUnicodeUntilvolatileWhenWhileWithWithEventsWriteOnlyXorevalextendsinstanceofpackagevar2.2.1 縮寫(xiě)、 請(qǐng)不要砍掉或抽取識(shí)別符的部分來(lái)作為名稱使用。如使用GetWindow比GetWin更好.· 請(qǐng)不要使用使用不被廣泛認(rèn)可的縮寫(xiě)。 · 只有絕對(duì)需要時(shí)再使用廣為人知的縮寫(xiě)。可以使用UI來(lái)表示User Interface,用OLAP來(lái)表示On-line Analytical Processin
12、g.· 當(dāng)使用縮寫(xiě)時(shí),請(qǐng)使用Pascal風(fēng)格或camel風(fēng)格來(lái)表示超過(guò)兩個(gè)或以上單詞縮寫(xiě)的構(gòu)成。如用HtmlButton 而非HTMLButton,但不要用System.Io來(lái)取代System.IO 2.3 命名空間以下模板舉例說(shuō)明了命名空間的命名規(guī)則。<Company>.<Technology>.<Feature>.Design因此我們希望看到這樣如下命名空間:Microsoft.MediaMicrosoft.Media.DesignPowerSoft.PowerBuilder.Math 、 避免兩個(gè)PUBLISED的NAMESPACES名稱一樣
13、的可能。使用公司名稱或者一個(gè)正式分支的名稱如用Microsoft.Office來(lái)表示Microsoft提供的Office Automation Classes。、 使用一個(gè)穩(wěn)定的被廣泛認(rèn)可的技術(shù)名稱作為第二層名稱、 不要使用組織的結(jié)構(gòu)層次作為命名空間的層次依據(jù). 、 請(qǐng)?jiān)贒ESIGN-TIME命名空間前加上.Design前綴以表示基礎(chǔ)命名空間DESIGN-TIME特性。如System.Windows.Forms.Design 包含了用來(lái)設(shè)計(jì)System.Windows.Forms 應(yīng)用程序的的設(shè)計(jì)器和相關(guān)設(shè)計(jì)類。、 使用PASCAL風(fēng)格,把每個(gè)邏輯部件用分隔號(hào)分開(kāi)(如Microsoft.Off
14、ice.PowerPoint _)如果你的品牌采用了非傳統(tǒng)方式的命名,那么就延續(xù)的你的品牌的命名方式,就算他和通常的命名空間法則不同。如(NeXT.WebObjects, and ee.cummings)、 在適當(dāng)?shù)牡胤绞褂脧?fù)數(shù)命名。例如采用System.Collections 而非System.Collection。對(duì)此例外的是品牌名和縮寫(xiě)。如用System.IO 而非System.IOs。、 不要讓命名空間和類都使用同樣的名字。如,當(dāng)有個(gè)類叫Debug時(shí)就不要使用Debug來(lái)作為命名空間的名字。命名空間結(jié)構(gòu)不需和配件名稱結(jié)構(gòu)并行。如,當(dāng)你決定使用給配件取名叫MyCompany.MyTech
15、nology.dll 時(shí),這并不需要你得讓配件中包含一個(gè)叫MyCompany.MyTechnology的命名空間。2.4 類和類成員2.4.1 類的命名指南、 使用名詞或名詞短語(yǔ)命名類。、 使用Pascal風(fēng)格.、 謹(jǐn)慎使用縮寫(xiě)命名類。.、 不要使用任何類前綴(如C).、 不要使用強(qiáng)調(diào)符號(hào)。、 偶爾可能會(huì)出現(xiàn)已I作為類名開(kāi)頭的情況,而這個(gè)類又不是一個(gè)接口類。這種情況下只要第二個(gè)字母是小寫(xiě)就可以接受。如IdentityStore.、 建議使用組合詞來(lái)命名派生類。在此情況下,你應(yīng)該考慮使用基類名稱作為派生類名稱的結(jié)尾。舉例而言,在英語(yǔ)中的”Coffee Cup”是說(shuō)的一種杯子,而不是一種咖啡。又如
16、ApplicationException表示一種例外,而B(niǎo)ooleanSwicth表示一種Switch,SerializableAtrribute是一種屬性。但對(duì)此應(yīng)該合理的判斷,如Button是一種Control雖然Control并沒(méi)有出現(xiàn)在名字中。以下是一些正確的命名的例子public class FileStream public class Button public class String 2.4.2 Attribute命名指南 、 在自定義屬性類的后邊應(yīng)該加上Attribute作為后綴。public class ObsoleteAttribute : Attribute 2.4.
17、3 枚舉命名指南、 使用Pascal風(fēng)格來(lái)命名枚舉類型.、 使用Pascal風(fēng)格命名枚舉值. 、 不要使用簡(jiǎn)寫(xiě)來(lái)命名枚舉值.· 不要在枚舉前加前綴(如 adXXX 來(lái)命名 ADO enums, rtfXXX 來(lái)命名 rich text enums, 等.). · 不要使用在枚舉上加后綴· 使用單數(shù)來(lái)命名枚舉,除非它是一個(gè)BIT類屬性.· 使用復(fù)數(shù)來(lái)命名BIT類屬性。 2.4.4 靜態(tài)類屬性名、 使用名詞,名詞短語(yǔ)或簡(jiǎn)寫(xiě)來(lái)命名靜態(tài)類屬性、 使用PASCAL風(fēng)格來(lái)命名靜態(tài)類屬性、 不要使用匈牙利命名法來(lái)命名靜態(tài)類屬性名稱2.4.5 參數(shù)名、 使用有意義的參數(shù)
18、名.在所有場(chǎng)合,參數(shù)名稱和類型應(yīng)該清楚地描述以決定其反映的意義.、 使用camel風(fēng)格來(lái)命名參數(shù)、 使用名稱來(lái)表現(xiàn)其作用而非表現(xiàn)其類型.我們期望開(kāi)發(fā)工具能提供有效的方式來(lái)提供類型信息.因此參數(shù)名可被更好的用來(lái)表現(xiàn)其作用而非類型.偶爾使用基于類型的參數(shù)名是完全適當(dāng)?shù)?、 不要使用reserved參數(shù)。在下個(gè)版本中需要更多的數(shù)據(jù)那么就使用重載。.、 請(qǐng)不要使用匈牙利命名法來(lái)在名稱前加前綴Type GetType (string typeName)string Format (string format, object args)2.4.6 方法命名指南、 使用動(dòng)詞或動(dòng)詞短語(yǔ)來(lái)命名方法。、 使用Pa
19、scal風(fēng)格來(lái)命名方法.如RemoveAll()GetCharArray()Invoke()2.4.7 屬性命名指南、 使用名詞或名詞短語(yǔ)來(lái)命名屬性、 使用Pascal來(lái)命名屬性.可以考慮把屬性命名和其類型一樣。當(dāng)屬性名和一個(gè)類型名一樣時(shí),那么一定要讓這個(gè)屬性就是這個(gè)類型。雖然這聽(tīng)起來(lái)有點(diǎn)多余,但這是正確的。以下例子說(shuō)明了正確的屬性命名方法.public enum Color .public class Control public Color Color get . set . 以下是錯(cuò)誤的命名public enum Color .public class Control public in
20、t Color get . set . 在錯(cuò)誤的例子中,Color枚舉的成員不可能被引用到,因?yàn)镃olor.xxx的COLOR將被解釋為Color(Int)屬性,系統(tǒng)將會(huì)到System.Int32中的實(shí)例中去訪問(wèn)成員。.2.4.8 事件命名指南、 使用事件EventHandler 來(lái)命名HANDLER(代理類型)。如 public delegate void MouseEventHandler(object sender, MouseEventArgs e);、 兩個(gè)參數(shù)取名叫sender和e. sender 參數(shù)表示觸發(fā)時(shí)間的對(duì)象。sender都是object 類型,就算是它可以是更明確的類
21、型。與事件關(guān)聯(lián)的狀態(tài)被封裝到一個(gè)事件類的實(shí)例中e中.對(duì)它應(yīng)該使用適當(dāng)明確的事件類型。如public delegate void MouseEventHandler(object sender, MouseEvent e);、 使用EventArgs后綴來(lái)命名事件的參數(shù),如 public class MouseEventArgs : EventArgs int x; int y; public MouseEventArgs(int x, int y) this.x = x; this.y = y; public int X get return x; public int Y get retur
22、n y; 、 使用現(xiàn)在時(shí)態(tài)和過(guò)去時(shí)態(tài)來(lái)命名有“前”、“后”概念的事件。(不要使用BeforeXxxAfterXxx).如,一個(gè)可以取消的關(guān)閉事件可以表示為Closing 和Closed event.、 考慮使用動(dòng)詞來(lái)命名事件2.5 大小寫(xiě)敏感、 不要出現(xiàn)必須要大小寫(xiě)敏感支持的名字.組件應(yīng)該在無(wú)論大小寫(xiě)敏感或不敏感的語(yǔ)言中都能使用。因?yàn)?需要大小寫(xiě)敏感的語(yǔ)言不能識(shí)別兩個(gè)相同內(nèi)容但用大小寫(xiě)區(qū)分的名字,所以組件必須避免這種情況、 不要出現(xiàn)兩個(gè)只用大小寫(xiě)區(qū)分的命名空間,如namespace ee.cummings;namespace Ee.Cummings;、 不要出現(xiàn)兩個(gè)只用大小寫(xiě)區(qū)分的參數(shù)如.vo
23、id foo(string a, string A)、 不要出現(xiàn)只用大小寫(xiě)區(qū)分的同一命名空間的類型System.WinForms.Point p;System.WinForms.POINT pp;、 不要出現(xiàn)只用大小寫(xiě)區(qū)分的同一類型屬性。int Foo get, set;int FOO get, set、 不要出現(xiàn)兩個(gè)只用大小寫(xiě)區(qū)分的方法void foo();void Foo();3. 程序注釋規(guī)范要使程序易于理解,注釋十分重要。在此,提供基本的注釋編寫(xiě)規(guī)范。3.1 模塊注釋在一個(gè)程序模塊的開(kāi)始,應(yīng)用注釋說(shuō)明模塊的名字、功能、開(kāi)發(fā)者和日期和版本變更歷史,如下所示:/-/Name:ChargeU
24、ser/Function:Charge credits from the user account and save it to the user¯s account/Author:Author Name/ Date:Aug. 8, 2000/-/Change History:/ DateWhoChanges Made/-/2000-5-1Author1Initial creation/2000-5-15Author2Add bStatus variable to identify User¯s state/2000-7-3Author3Add CheckBlackList
25、() to check whether user /is in black list/-3.2 類的注釋在定義一個(gè)類之前,應(yīng)用“/”注釋說(shuō)明類的功能、使用方法和特殊的屬性,如下所示:/ <summary> / This class contains the business facade for the order system. / <remarks> / The business facade is used to provide a simplified interface into the / order sub systems. / </remarks&
26、gt; / / <remarks> / This class is marked as MarshalByRefObject to support remoted scenarios. / </remarks> / </summary> public class OrderSystem : MarshalByRefObject 須注意的是,我們要遵從VS.NET對(duì)注釋的約定,使用<summary>標(biāo)記來(lái)指定類總體注釋的開(kāi)始,用</summary>標(biāo)記它的結(jié)束。對(duì)類的一些注解說(shuō)明可以放在<remarks> 和 </re
27、marks>對(duì)中。以后我們可以從這些注解自動(dòng)得到對(duì)代碼的說(shuō)明文檔。如下例所示:Duwamish7.BusinessFacade.OrderSystem ClassThis class contains the business facade for the order system. The business facade is used to provide a simplified interface into the order sub systems. This class is marked as MarshalByRefObject to support remoted sc
28、enarios. Access: PublicBase Classes: MarshalByRefObject MembersDescription GetOrderSummaryFills in the order summary data for an order. The order that is being worked on. Updated OrderData object. This is returned to support the remoted scenario (OrderData is a MarshalByValue o
29、bject). class='System. ApplicationException'> The order is null. AddOrderAdd an order and return the transaction id. The order that is being worked on. The order that has just been added. class='System. ApplicationException'> The order is null. Remarks:T
30、he business facade is used to provide a simplified interface into the order sub systems. This class is marked as MarshalByRefObject to support remoted scenarios. 3.3 類成員方法的注釋在定義類成員方法前,應(yīng)說(shuō)明該過(guò)程/函數(shù)的名字、功能、輸入/輸出和版本變更歷史,如下所示:/ <summary>/ Fills in the order summary data for an order./ <param name=&
31、quot;order">The order that is being worked on.</param>/ <retvalue>Updated OrderData object. / <remarks>/ This is returned to support the remoted scenario (OrderData is a / MarshalByValue object)./ </remarks>/ </retvalue>/ </summary>/-/ Change History:/Date
32、WhoChanges Made/ 2000-5-1Author1Initial creation/ 2000-5-15Author2Add bStatus variable to identify User¯s state/-public OrderData GetOrderSummary(OrderData order)在這里“<param name="<參數(shù)名>">” 和“</param>”指明方法的參數(shù)的描述信息;“<retvalue>” 和“</retvalue>”對(duì)說(shuō)明了方法返回值的特性。由這些
33、注解自動(dòng)得到的說(shuō)明文檔如下所示:Duwamish7.BusinessFacade.OrderSystem.GetOrderSummary FunctionFills in the order summary data for an order. The order that is being worked on. Updated OrderData object. This is returned to support the remoted scenario (OrderData is a MarshalByValue object). Public OrderData GetOrderSu
34、mmary (OrderData) TypeNameDescription OrderDataorderThe order that is being worked on. ReturnDescription OrderData Remarks:This is returned to support the remoted scenario (OrderData is a MarshalByValue object). 3.4 類成員屬性、常量、變量的注釋在定義類成員屬性前
35、,應(yīng)描述該屬性,如:/ <summary>/ 檔案編號(hào)/ </summary>publicStringDonorID;對(duì)于模塊級(jí)的常量、變量應(yīng)該象類成員屬性一樣寫(xiě)注釋。3.5 程序注釋在代碼實(shí)現(xiàn)時(shí),應(yīng)對(duì)其目的和實(shí)現(xiàn)的功能進(jìn)行說(shuō)明,其要點(diǎn)是:(1) 采用了特殊的語(yǔ)法需要對(duì)語(yǔ)法注釋;(2) 為實(shí)現(xiàn)部分功能需要注釋;(3) 不能通過(guò)上下文立即明白其功能需要注釋。如下例所示:public OrderData GetOrderSummary(OrderData order)/ Check preconditions/ApplicationAssert.CheckCondition
36、(order != null, "Order is required", ApplicationAssert.LineNumber);/ Calculate subTotal/Decimal subTotal = 0;4. 類成員使用規(guī)范4.1 屬性使用指南、 使用Pascal風(fēng)格來(lái)命名屬性public class Foo public Color BackColor 、 不要使用匈牙利命名法. 、 建議不要使用相同的類的屬性名字和類型名字. 將一個(gè)類的屬性名定義成與某個(gè)類型(Type)的名字相同會(huì)在某些編程語(yǔ)言中引起二義性. 最好避免這種二義性除非由非常正當(dāng)?shù)睦碛扇ミ@么做
37、。 例如: System.Windows.Forms 類有一個(gè) Icon 屬性, 雖然也有一個(gè) Icon 類 但由于 Form.Icon 這個(gè)名字比 Form.FormIcon 或 Form.DisplayIcon 這樣的類屬性名更容易理解,所以我們?nèi)圆捎肐con 屬性名. 但是在 System.WinForms. UI.Control 類中有一個(gè)顏色屬性. 由于已經(jīng)有了一個(gè)Color 類, 這個(gè)類的顏色屬性就被命名為 BackgroundColor. 這是一個(gè)更有意義的命名且與已經(jīng)存在的類的名字不沖突. 、 當(dāng)對(duì)一個(gè)類中屬性作賦值操作時(shí)發(fā)生了異常(Exception)時(shí),一定要保證這個(gè)屬性中
38、還保留著以前保存的屬性值。避免這個(gè)屬性的內(nèi)容處于不確定狀態(tài). 、 必須允許類的屬性可以以任意的順序賦值. 屬性與其他屬性間應(yīng)該是沒(méi)有狀態(tài)關(guān)系的.通常情況下只有當(dāng)程序?qū)σ唤M屬性作了賦值之后,這個(gè)對(duì)象的某個(gè)功能才會(huì)被激活,或者只有當(dāng)這個(gè)對(duì)象在一些正確的狀態(tài)下, 這個(gè)功能才會(huì)起作用. 而且當(dāng)對(duì)象進(jìn)入此狀態(tài)時(shí), 這個(gè)功能會(huì)被自動(dòng)激活而無(wú)需任何其他的顯示(Implicit)調(diào)用.例如一個(gè)TextBox 有兩個(gè)相關(guān)的屬性: DataSource 和 DataField. DataSource 指明了數(shù)據(jù)表名, 而 DataField 指明了相應(yīng)的類屬性名. 一旦這兩個(gè)屬性被指明后, 這個(gè)控件就會(huì)把數(shù)據(jù)表中
39、相應(yīng)的數(shù)據(jù)取出賦給這個(gè)控件的Text 屬性. 下面的例子演示了我們可以以任意的順序設(shè)置控件的屬性.TextBox t = new TextBox();t.DataSource = "Publishers"t.DataField = "AuthorID"/ The data binding feature is now active.上面的代碼是與下面的程序等效的.TextBox t = new TextBox();t.DataField = "AuthorID"t.DataSource = "Publishers"
40、/ The data binding feature is now active.此外, 程序員可以將一個(gè)屬性設(shè)為null, 指明這個(gè)屬性是未賦值的.TextBox t = new TextBox();t.DataField = "AuthorID"t.DataSource = "Publishers"/ The data binding feature now active t.DataSource = null;/ The data binding feature is now inactive下面的例子演示了如何做到對(duì)屬性的賦值順序復(fù)關(guān),并檢查數(shù)據(jù)
41、綁定的狀態(tài)并在適當(dāng)?shù)臅r(shí)候自動(dòng)激活相應(yīng)的功能. public class TextBox string dataSource; string dataField; boolean active; public string DataSource get return dataSource; set if (value != dataSource) / Update active state. SetActive(value!= null && dataField != null); dataSource = value; public string DataField get r
42、eturn dataField; set if (value != dataField) / Update active state. SetActive(dataSource != null && dataField != null); dataField = value; void SetActive(boolean value) if (value != active) if (value) Activate(); Text = dataBase.Value(dataField); else Deactivate(); Text = "" active
43、 = value; / set active only if success void Activate() / open database void Deactivate() / close database 4.1.1 只讀和只寫(xiě)的屬性、 當(dāng)在邏輯上要求用戶不能改變類的屬性時(shí),需要使用只讀屬性.、 禁止使用只寫(xiě)屬性.4.2 事件使用指南、 使用Pascal風(fēng)格來(lái)命名事件.、 不要使用匈牙利命名法. 、 應(yīng)該使用"raise”(“產(chǎn)生”)術(shù)語(yǔ)來(lái)表示產(chǎn)生事件而不是使用"fire" 或 “trigger”. 當(dāng)在文檔中描述事件時(shí), 應(yīng)該使用"an even
44、t was raised" 而不是 "an event was fired" 或 “an event was triggered.”、 應(yīng)考慮用動(dòng)詞來(lái)命名一個(gè)事件.、 事件處理程序應(yīng)返回void值. 例如:public delegate void MouseEventHandler(object sender, MouseEventArgs e);、 因該從System.EventArgs 類中派生出事件處理數(shù)據(jù)類。例如:public class MouseEventArgs : EventArgs 、 應(yīng)該假設(shè)在事件處理過(guò)程中會(huì)發(fā)生任何事情(要注意異常處理).
45、類應(yīng)該準(zhǔn)備事件處理過(guò)程會(huì)修改任何的事物, 而且需要保證在事件被生成時(shí)所有的對(duì)象都處于一個(gè)合法的狀態(tài). 應(yīng)該考慮使用try/finally 程序塊在事件產(chǎn)生的地方. 由于程序員調(diào)用了call back函數(shù)在這個(gè)對(duì)象上執(zhí)行操作, 就不應(yīng)該在程序控制返回后對(duì)程序狀態(tài)做任何假設(shè). 例如:public class Button ButtonClickHandler onClickHandler; protected void DoClick() PaintDown(); / paint button in depressed state try OnClick(); / call event handl
46、er finally / window may be deleted in event handler if (windowHandle != null) PaintUp(); / paint button in normal state protected virtual void OnClick(ClickEvent e) if (onClickHandler != null) onClickHandler(this, e); 4.3 方法使用指南、 使用Pascal風(fēng)格來(lái)命名事件.、 不要使用匈牙利命名法. 、 缺省使用非虛函數(shù)的方法.4.3.1 方法重載指南當(dāng)一個(gè)類中有兩個(gè)同名的方法可
47、以使用,只不過(guò)他們有不同的調(diào)用參數(shù)時(shí),我們需要方法重載.、 當(dāng)你要在類中提供兩個(gè)不同的方法而他們的語(yǔ)意相同時(shí),應(yīng)該使用方法重載.、 用重載來(lái)實(shí)現(xiàn)方法的缺省參數(shù)。(缺省參數(shù)這種方法無(wú)法很好地翻譯,因此在通用語(yǔ)言規(guī)范CLS中是不允許的).int String.IndexOf (String name);int String.IndexOf (String name, int startIndex);、 當(dāng)參數(shù)個(gè)數(shù)是變化的時(shí)候應(yīng)該使用方法重載. 當(dāng)一個(gè)方法接受的參數(shù)個(gè)數(shù)必須是可變的時(shí)候,我們可以通過(guò)重載定義N個(gè)參數(shù)個(gè)數(shù)漸長(zhǎng)的方法來(lái)解決, 同時(shí)還提供一個(gè)重載的方法跟隨一個(gè)數(shù)組參數(shù)(為參數(shù)個(gè)數(shù)大于N的客
48、戶). N=3 or N=4 是一個(gè)比較適合的方法. 例如:public class Foo public void Bar(string a) Bar(new string a); public void Bar(string a, string b) Bar(new string a, b); public void Bar(string a, string b, string c) Bar(new string a, b, c); public virtual void Bar(string args) / core implementation here 可變長(zhǎng)度參數(shù)你
49、可以希望提供一個(gè)方法可以接受不定個(gè)數(shù)的參數(shù) (比如像C語(yǔ)言的 printf 函數(shù)). 對(duì)于受管理的代碼, 我們可以用 ParamsAttribute 模式來(lái)構(gòu)造這種結(jié)構(gòu). 例如, 你可以用下面的代碼來(lái)代替多個(gè)重載的方法.void Format (string formatString, params object args)你不能使用 VarArgs 式的調(diào)用規(guī)范 () 來(lái)實(shí)現(xiàn)不定個(gè)數(shù)的參數(shù),這是應(yīng)為通用語(yǔ)言規(guī)范(CLS)不支持它.4.4 構(gòu)建函數(shù)使用指南、 只有當(dāng)一個(gè)類中僅有靜態(tài)的方法和屬性時(shí),我們才能使用私有的構(gòu)造方法.public sealed class Enviroment private Enviroment(); / Prevents the class from being created. /、 在構(gòu)造函數(shù)中盡量做最少的工作.多余的功能應(yīng)該留到后續(xù)的代碼中,當(dāng)客戶代碼調(diào)用這個(gè)功能時(shí)在座相應(yīng)的工作。、 建議不要在“struct” (value types)中定義一個(gè)空的構(gòu)造函數(shù).如果一個(gè)結(jié)構(gòu)沒(méi)有構(gòu)造函數(shù), CLR運(yùn)行時(shí)就會(huì)自
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 三年級(jí)下冊(cè)數(shù)學(xué)教案-長(zhǎng)方形的面積-北師大版
- 公司與公司借款合同(2025年版)
- 二年級(jí)上冊(cè)數(shù)學(xué)教案-7.6 動(dòng)物樂(lè)園|北師大版
- (高清版)DB45∕T 203-2022 綠色食品 茶葉生產(chǎn)技術(shù)規(guī)程
- 人教版數(shù)學(xué)三年級(jí)上冊(cè)單元練習(xí)卷(易錯(cuò)題)-第六單元-多位數(shù)乘一位數(shù)(含答案)
- 模擬試卷五(原卷版+解析版)-三年級(jí)語(yǔ)文上學(xué)期期末全真模擬卷(部編版五四制)
- 第三課 表格的修飾(教學(xué)設(shè)計(jì))2023-2024學(xué)年四年級(jí)下冊(cè)信息技術(shù)龍教版
- 2025年甘肅財(cái)貿(mào)職業(yè)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫(kù)學(xué)生專用
- 2025年度實(shí)習(xí)生實(shí)習(xí)基地共建實(shí)習(xí)勞動(dòng)協(xié)議書(shū)
- 2025年度新能源產(chǎn)業(yè)研發(fā)人員招聘與技術(shù)支持協(xié)議
- 2025年02月黃石市殘聯(lián)專門協(xié)會(huì)公開(kāi)招聘工作人員5人筆試歷年典型考題(歷年真題考點(diǎn))解題思路附帶答案詳解
- 2024-2025學(xué)年第二學(xué)期開(kāi)學(xué)典禮-開(kāi)學(xué)典禮校長(zhǎng)致辭
- 蚌埠介紹-蚌埠簡(jiǎn)介課件(經(jīng)典版)
- GB/T 15561-2024數(shù)字指示軌道衡
- 探究煙花爆竹知識(shí)產(chǎn)權(quán)-洞察分析
- 網(wǎng)絡(luò)保險(xiǎn)風(fēng)險(xiǎn)評(píng)估-洞察分析
- 《汽車專業(yè)英語(yǔ)》2024年課程標(biāo)準(zhǔn)(含課程思政設(shè)計(jì))
- 部編四年級(jí)道德與法治下冊(cè)全冊(cè)教案(含反思)
- 煙草栽培(二級(jí))鑒定理論考試復(fù)習(xí)題庫(kù)-上(單選題匯總)
- 中國(guó)傳統(tǒng)二十四節(jié)氣立春節(jié)氣介紹PPT模板課件
- 物品出入庫(kù)明細(xì)表格
評(píng)論
0/150
提交評(píng)論