




免費(fèi)預(yù)覽已結(jié)束,剩余34頁(yè)可下載查看
下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
C#編碼指南說(shuō)明文檔中信泰富工程技術(shù)(上海)有限公司自動(dòng)化二部MES系統(tǒng)C#編碼指南說(shuō)明文檔中信泰富工程技術(shù)(上海)有限公司2009年03月文檔履歷版本時(shí)間更改部分設(shè)計(jì)人備注1.02009-03-06最初版本初始版本目錄一 引言4(一)概述4術(shù)語(yǔ)和定義4二 基本原則5三 文件結(jié)構(gòu)6(一)基本格式6(二)對(duì)齊10(三)空行空格11(四)斷行13四 注釋17五 命名規(guī)則21六 聲明31七 表達(dá)式與語(yǔ)句32八 類和接口35九 框架要求37一 引言(一)概述編寫(xiě)本標(biāo)準(zhǔn)的目的是為了統(tǒng)一日常工作中的編程風(fēng)格,提高代碼的可讀性、可靠性和可重用性,提高軟件源程序的質(zhì)量和可維護(hù)性,減少軟件維護(hù)成本,最終提高工作生產(chǎn)力。本規(guī)范是針對(duì)C#語(yǔ)言的編程規(guī)范,本規(guī)范主要適用于公司系統(tǒng)開(kāi)發(fā)標(biāo)準(zhǔn),同時(shí)也可作為公司其它項(xiàng)目的特定編碼規(guī)范參考。本規(guī)范分成規(guī)則性和建議性兩種:對(duì)于規(guī)則性規(guī)范,要求所有軟件開(kāi)發(fā)人員嚴(yán)格執(zhí)行,對(duì)于建議性規(guī)范,各項(xiàng)目編程人員可以根據(jù)實(shí)際情況選擇執(zhí)行。本規(guī)范起草部門:自動(dòng)化二部術(shù)語(yǔ)和定義下列術(shù)語(yǔ)和定義適用于本標(biāo)準(zhǔn)規(guī)范 原則編程時(shí)應(yīng)該堅(jiān)持的指導(dǎo)思想。 規(guī)則編程時(shí)應(yīng)該遵守的約定, 說(shuō)明對(duì)此規(guī)則或建議的必要的解釋。 正例對(duì)此規(guī)則或建議給出的正確例, 反例對(duì)此規(guī)則或建議給出的反面例子。 執(zhí)行標(biāo)準(zhǔn)編程時(shí)候?qū)Υ思s定的遵守程度,一般分為強(qiáng)制,建議,參考三種情形。強(qiáng)制,表示在編程時(shí)候必須嚴(yán)格遵守的約定。建議,對(duì)編程過(guò)程中,為了統(tǒng)一風(fēng)格,建議遵守的約束,不會(huì)嚴(yán)格作為代碼的考核標(biāo)準(zhǔn)。參考,針對(duì)編程工程中,一些資源提出了比較符合規(guī)范的資料和信息??勺鳛榫幊踢^(guò)程中的參考。二 基本原則【原則 1-1】 首先是為人編寫(xiě)程序,其次才是計(jì)算機(jī)。 說(shuō)明:這是軟件開(kāi)發(fā)的基本要點(diǎn),軟件的生命周期貫穿產(chǎn)品的開(kāi)發(fā)、測(cè)試、生產(chǎn)、用戶使用、版本升級(jí)和后期維護(hù)等長(zhǎng)期過(guò)程,只有易讀、易維護(hù)的軟件代碼才具有生命力?!驹瓌t1-2】保持代碼的簡(jiǎn)明清晰,避免過(guò)分的編程技巧。說(shuō)明:簡(jiǎn)單是最美。保持代碼的簡(jiǎn)單化是軟件工程化的基本要求。不要過(guò)分追求技巧,否則會(huì)降低程序的可讀性?!驹瓌t1-3】所有代碼盡量遵循Microsoft MSDN中C#語(yǔ)言規(guī)范說(shuō)明:所有代碼應(yīng)盡量遵循MSDN中對(duì)C#語(yǔ)言定義的標(biāo)準(zhǔn)和規(guī)范,盡可能不使用其它文檔對(duì)C#語(yǔ)言的定義或者自己的特殊習(xí)慣。 引用地址 【原則1-4】編程時(shí)首先達(dá)到正確性,其次考慮效率。說(shuō)明:編程首先考慮的是滿足正確性、健壯性、可維護(hù)性、可移植性等質(zhì)量因素,最后才考慮程序的效率和資源占用?!驹瓌t1-5】避免或少用全局變量。說(shuō)明:過(guò)多地使用全局變量,會(huì)導(dǎo)致模塊間的緊耦合,違反模塊化的要求?!驹瓌t1-6】盡可能重用、修正老的代碼。說(shuō)明:盡量選擇可借用的代碼,對(duì)其修改優(yōu)化達(dá)到自身的要求。【原則1-7】 盡量減少同樣的錯(cuò)誤出現(xiàn)的次數(shù)。說(shuō)明:事實(shí)上,我們無(wú)法做到完全消除錯(cuò)誤,但通過(guò)不懈的努力和細(xì)心的工作,可以減少同樣的錯(cuò)誤出現(xiàn)的次數(shù)。三 文件結(jié)構(gòu) 程序布局的目的是顯示出程序良好的邏輯結(jié)構(gòu),提高程序的準(zhǔn)確性、連續(xù)性、可讀性、可維護(hù)性。更重要的是,統(tǒng)一的程序布局和編程風(fēng)格,有助于提高整個(gè)項(xiàng)目的開(kāi)發(fā)質(zhì)量,提高開(kāi)發(fā)效率,降低開(kāi)發(fā)成本。同時(shí),對(duì)于普通程序員來(lái)說(shuō),養(yǎng)成良好的編程習(xí)慣有助于提高自己的編程水平,提高編程效率。因此,統(tǒng)一的、良好的程序布局和編程風(fēng)格不僅僅是個(gè)人主觀美學(xué)上的或是形式上的問(wèn)題,而且涉及到產(chǎn)品質(zhì)量,涉及到個(gè)人編程能力的提高,必須引起大家重視。(一)基本格式【規(guī)則1-1-1】源代碼文件(.cs)的布局順序是:注釋、using指令、namespace、類。 執(zhí)行標(biāo)準(zhǔn):強(qiáng)制正例: /* / 文件名稱: 題目名稱 / 文件描述: 本類描述 / 版權(quán)所有: 版權(quán)所有(C)2009-2015 / 公 司: 中信泰富工程技術(shù)(上海)有限公司 / 內(nèi)容摘要: 簡(jiǎn)要描述本文件的內(nèi)容,包括主要模塊、函數(shù)及其功能的說(shuō)明 / 其他說(shuō)明: 其它內(nèi)容的說(shuō)明 / 完成日期:輸入完成日期,例:2009年02月25日 / 修改記錄1: 修改歷史記錄,包括修改日期、修改者及修改內(nèi)容 / / 修改日期: / 版 本 號(hào): / 修 改 人: / 修改內(nèi)容: / / version 1.0 / author 作者姓名 / Email 作者信箱或MSN /* using System;using System.Data; namespace SinoLink.XXX.BaseClass / / 對(duì)ClassName的描述 / public class ClassName 【規(guī)則1-1-2】遵循統(tǒng)一的布局順序來(lái)書(shū)寫(xiě)using指令,不同類別的using指令之間用空行分隔。無(wú)用的using要?jiǎng)h除。 說(shuō)明:using語(yǔ)句排列順序?yàn)?Net Framework定義的命名空間在最前面,接下來(lái)為引用外部或者第三方的命名空間,最后是程序自身內(nèi)部引用的命名空間,而且按照字母順序排序。using指令后可跟namespace語(yǔ)句,與namespace語(yǔ)句間隔一個(gè)空行。 執(zhí)行標(biāo)準(zhǔn):建議 正例: using System;using System.Data; /.Net Framework自身定義的命名空間using Com.Other.Data; /引用的第三方命名空間using SinoLink.XXX.Access; /程序自身引用的內(nèi)部命名空間 【規(guī)則1-1-3】程序中一行的代碼和注釋不能超過(guò)120列。說(shuō)明:包括空格在內(nèi)不能超過(guò)120列。執(zhí)行標(biāo)準(zhǔn):建議【規(guī)則1-1-4】源程序中關(guān)系較為緊密的代碼應(yīng)盡可能相鄰。增加代碼段分割標(biāo)志,分割標(biāo)志必須使用#region和#endregion指令,方便代碼段的分割,各種不同功能的代碼放到相應(yīng)的代碼段中。段落之間空行只要空一行?,F(xiàn)在包括的代碼段包括:常量定義、變量定義、構(gòu)造方法、公共方法、內(nèi)部方法、界面事件響應(yīng)方法、調(diào)試方法等,一般的代碼段順序也應(yīng)和上面一致。說(shuō)明:程序中,表示不同功能的代碼應(yīng)放在各自不同的代碼段中,以方便閱讀和在編輯器中折疊代碼段,使代碼段落清晰簡(jiǎn)潔。執(zhí)行標(biāo)準(zhǔn):建議正例: #region 屬性定義 #endregion / 空一行#region 方法定義 #region 對(duì)用戶信息操作的方法 #endregion #region 對(duì)帳戶信息操作的方法 #endregion #endregion【規(guī)則1-1-5】if、else、else if、for、while、do等語(yǔ)句獨(dú)占一行,執(zhí)行語(yǔ)句不得緊跟其后。不論執(zhí)行語(yǔ)句有多少都要加 。說(shuō)明:這樣可以防止書(shū)寫(xiě)失誤,也易于閱讀。執(zhí)行標(biāo)準(zhǔn):強(qiáng)制正例:if (varible1 varible2) varible1 = varible2;反例:下面的代碼執(zhí)行語(yǔ)句緊跟if的條件之后,而且沒(méi)有加,違反規(guī)則。if (varible1 varible2) varible1 = varible2; (二)對(duì)齊 【規(guī)則1-2-1】一般禁止使用制表符,必須使用空格進(jìn)行縮排。縮進(jìn)為4個(gè)空格。 說(shuō)明:若使用Visual Studio編輯器,一般默認(rèn)的縮進(jìn)為4個(gè)空格,若使用其它編輯器必須保證此縮進(jìn)格式。 執(zhí)行標(biāo)準(zhǔn):建議【規(guī)則1-2-2】程序的分界符和應(yīng)獨(dú)占一行,同時(shí)與引用它們的語(yǔ)句左對(duì)齊。 之內(nèi)的代碼塊使用縮進(jìn)規(guī)則對(duì)齊。 說(shuō)明:這樣使代碼便于閱讀,并且方便注釋。 執(zhí)行標(biāo)準(zhǔn):建議 正例:void function(int var) while (condition)doSomething();/ 與 縮進(jìn)4格/與引用它們的模塊左對(duì)齊反例:void function(int var)while (condition)doSomething();(三)空行空格【規(guī)則1-3-1】不同邏輯程序塊之間要使用空行分隔。 說(shuō)明:空行起著分隔程序段落的作用。適當(dāng)?shù)目招锌梢允钩绦虻牟季指忧逦?執(zhí)行標(biāo)準(zhǔn):建議 正例:void doSomething()/doSomething實(shí)現(xiàn)代碼/ 空一行void doOtherThing()doOtherThing實(shí)現(xiàn)代碼反例:void doSomething() doSomething實(shí)現(xiàn)代碼void doOtherThing()doOtherThing實(shí)現(xiàn)代碼/ 兩個(gè)函數(shù)的實(shí)現(xiàn)是兩個(gè)邏輯程序塊,應(yīng)該用空行加以分隔?!疽?guī)則1-3-2】一元操作符如“+”、“-”、“!”、“”、(類型)等前后不加空格?!啊薄?”這類操作符前后不加空格。 執(zhí)行標(biāo)準(zhǔn):強(qiáng)制正例:!valuevalue+countnumberi = 5;box.getWidth(); 【規(guī)則1-3-3】多元運(yùn)算符和它們的操作數(shù)之間至少需要一個(gè)空格。說(shuō)明:空格的多少根據(jù)上下文調(diào)整。執(zhí)行標(biāo)準(zhǔn):建議 正例:value = oldValue;total + valuenumber += 2; 【規(guī)則1-3-4】方法名之后不要留空格。說(shuō)明:方法名后緊跟左括號(hào)(。執(zhí)行標(biāo)準(zhǔn):建議【規(guī)則1-3-5】(向后緊跟,)、, 、;向前緊跟,緊跟處不留空格。,之后要留空格。;不是行結(jié)束符號(hào)時(shí)其后要留空格。執(zhí)行標(biāo)準(zhǔn):建議正例:例子中的 凵 代表空格。 for (i凵=凵0;凵i凵凵MAX_BSC_NUM;凵i+)doSomething(width,凵height);【規(guī)則1-3-6】注釋符與注釋內(nèi)容之間要用一個(gè)空格進(jìn)行分隔。執(zhí)行標(biāo)準(zhǔn):建議正例:/* 注釋內(nèi)容 */ 注釋內(nèi)容反例: /*注釋內(nèi)容*/注釋內(nèi)容(四)斷行【規(guī)則1-4-1】長(zhǎng)表達(dá)式(超過(guò)120列)要在低優(yōu)先級(jí)操作符處拆分成新行,操作符放在新行之首(以便突出操作符)。拆分出的新行要進(jìn)行適當(dāng)?shù)目s進(jìn),使排版整齊。執(zhí)行標(biāo)準(zhǔn):建議說(shuō)明:斷行方法:1. 在逗號(hào)后斷行2. 在操作符前斷行3. 較高級(jí)別斷行優(yōu)于較低級(jí)別的斷行對(duì)齊方法:1. 將新行與同一級(jí)別的先前行的表達(dá)式的起始端對(duì)齊。2. 條件表達(dá)式的續(xù)行在第一個(gè)條件處對(duì)齊。3. for循環(huán)語(yǔ)句的續(xù)行在初始化條件語(yǔ)句處對(duì)齊。4. 函數(shù)調(diào)用和函數(shù)聲明的續(xù)行在第一個(gè)參數(shù)處對(duì)齊。5. 賦值語(yǔ)句的續(xù)行應(yīng)在賦值號(hào)處對(duì)齊。6. 如果上述規(guī)則導(dǎo)致代碼排列混亂或代碼左邊界少于兩個(gè)縮進(jìn),可用兩倍縮進(jìn)替 代。下面是一些斷行方法調(diào)用的示例:正例: someMethod(longExpression1, longExpression2, longExpression3, longExpression4, longExpression5); var = someMethod1(longExpression1, someMethod2(longExpression2, longExpression3);下面是兩個(gè)斷行算術(shù)表達(dá)式例子,第一個(gè)是優(yōu)選方法,因?yàn)閿嘈谐霈F(xiàn)在括號(hào)表達(dá)式之外,屬于較高級(jí)別的斷行。正例: longName1 = longName2 * (longName3 + longName4 - longName5) + 4 * longname6; /允許的斷行方法反例: longName1 = longName2 * (longName3 + longName4-longName5) + 4 * longname6; /應(yīng)該避免的斷行方法下面是兩個(gè)縮排方法的例子,第一個(gè)是傳統(tǒng)的方式,第二個(gè)例子中如果采用傳統(tǒng)方式縮排將導(dǎo)致第二行和第三行右邊出現(xiàn)太多空白,因此,采用8個(gè)空格符替代。/傳統(tǒng)的縮排方法,第二行與第一行的括號(hào)對(duì)齊。正例: someMethod(int anArg, Object anotherArg, String yetAnotherArg, Object andStillAnother) ./你代碼的位置/由8個(gè)空格符來(lái)替代與括號(hào)對(duì)齊的方法,以避免第二行、第三行出現(xiàn)太多的空格符正例: private static synchronized horkingLongMethodName(int anArg, Object anotherArg, String yetAnotherArg, Object andStillAnother) ./你代碼的位置對(duì)于if語(yǔ)句的行封裝通常使用8空格規(guī)則,因?yàn)閭鹘y(tǒng)的4空格縮排方式使得有些語(yǔ)句容易被忽略掉,使if語(yǔ)句體難以理解。例如:反例: /不允許使用下面的縮進(jìn)方法if (condition1 & condition2) | (condition3 & condition4) | !(condition5 & condition6) /不好的縮進(jìn) doSomethingAboutIt(); /這樣對(duì)齊的縮進(jìn)方式很容易讓閱讀的人忽略掉這一行正例: /宜采用下面的縮進(jìn)方法(分成三行的情況)if (condition1 & condition2) | (condition3 & condition4) | !(condition5 & condition6) doSomethingAboutIt();/或使用下面的縮進(jìn)方法(分成二行的情況)正例: if (condition1 & condition2) | (condition3 & condition4) | !(condition5 & condition6) doSomethingAboutIt();對(duì)于三重表達(dá)式,有三種方式可以對(duì)它進(jìn)行換行縮排:正例: /單行的情況 alpha = (aLongBooleanExpression) ? beta : gamma;/分成兩行的情況,第二行的冒號(hào)與第一行的問(wèn)號(hào)對(duì)齊。 alpha = (aLongBooleanExpression) ? beta : gamma;/分成三行的情況,第二行的問(wèn)號(hào)和第三行的冒號(hào)都與第一行的括號(hào)對(duì)齊 alpha = (aLongBooleanExpression) ? beta : gamma;【規(guī)則1-4-2】方法聲明時(shí),修飾符、類型與名稱不允許分行書(shū)寫(xiě)。執(zhí)行標(biāo)準(zhǔn):強(qiáng)制正例:public static double calculateArea(double width, double height);反例:public static double calculateArea(double width, double height);四 注釋 注釋有助于理解代碼,有效的注釋是指在代碼的功能、意圖層次上進(jìn)行注釋,提供有用、額外的信息,而不是代碼表面意義的簡(jiǎn)單重復(fù)。C#注釋的方式有:行注釋:“/ 注釋內(nèi)容”和“/* 注釋內(nèi)容 */”兩種注釋形式。XML標(biāo)記注釋:“/ 注釋內(nèi)容” 分成多行書(shū)寫(xiě)的形式.一般類私有變量的聲明采用行注釋。類、接口、構(gòu)造函數(shù)、方法、屬性、公共變量等的聲明采用XML標(biāo)記注釋【規(guī)則2-1】注釋使用中文注釋。與XML標(biāo)記有關(guān)的標(biāo)準(zhǔn)英文單詞標(biāo)簽保留。 說(shuō)明:在 C# 中,可以將使用 XML 編寫(xiě)的代碼文檔化。C# 是 Visual Studio.NET 中唯一具有此項(xiàng)功能的編程語(yǔ)言。XML注釋標(biāo)記可查看主要注釋標(biāo)簽: : 標(biāo)記應(yīng)當(dāng)用于描述類型或類型成員。 標(biāo)記應(yīng)當(dāng)用于方法聲明的注釋中,以描述方法的一個(gè)參數(shù)。 標(biāo)記用于添加有關(guān)某個(gè)類型的信息,從而補(bǔ)充由 所指定的信息。 標(biāo)記應(yīng)當(dāng)用于方法聲明的注釋,以描述返回值。 標(biāo)記可以指定使用方法或其他庫(kù)成員的示例。/zh-cn/library/b2s063f7(VS.80).aspx 執(zhí)行標(biāo)準(zhǔn):強(qiáng)制【規(guī)則2-3】公共方法前面應(yīng)進(jìn)行XML標(biāo)記注釋,列出:函數(shù)的目的/功能、輸入?yún)?shù)、返回值等。執(zhí)行標(biāo)準(zhǔn):強(qiáng)制說(shuō)明:注釋必須列出:功能描述、輸入?yún)?shù)、返回值等,對(duì)于成員屬性的get/set操作可以不加注釋。正例:下面是公共方法頭部的注釋: / / 添加列/ / 列名/ 值public void AddColumn(string column,string value)AddColumn(column,value,DbType.String);【規(guī)則2-4】保證代碼和注釋的一致性。修改代碼的同時(shí)修改相應(yīng)的注釋,不再有用的注釋要?jiǎng)h除。 執(zhí)行標(biāo)準(zhǔn):強(qiáng)制【規(guī)則2-5】注釋?xiě)?yīng)與其描述的代碼相近,對(duì)代碼的注釋?xiě)?yīng)放在其上方(需與其上面的代碼用空行隔開(kāi))或右方(對(duì)單條語(yǔ)句的注釋)相鄰位置,不可放在下面。說(shuō)明:在使用縮寫(xiě)時(shí)或之前,應(yīng)對(duì)縮寫(xiě)進(jìn)行必要的說(shuō)明。執(zhí)行標(biāo)準(zhǔn):強(qiáng)制正例: 如下書(shū)寫(xiě)結(jié)構(gòu)比較清晰/ 獲得子系統(tǒng)索引 subSysIndex = data.getSysIndex;/ 代碼段1注釋 代碼段1 /* 代碼段2注釋 */ 代碼段2 反例1: 如下例子注釋與描述的代碼相隔太遠(yuǎn)。/* 獲得子系統(tǒng)索引 */subSysIndex = subSys.getSysIndex();反例2:如下例子注釋不應(yīng)放在所描述的代碼下面。subSysIndex = subSys.getSysIndex();/* 獲得子系統(tǒng)索引 */反例3:如下例子,顯得代碼與注釋過(guò)于緊湊。/* 代碼段1注釋 */ 代碼段1 /* 代碼段2注釋 */ 代碼段2 【規(guī)則2-6】注釋與所描述內(nèi)容進(jìn)行同樣的縮進(jìn)。執(zhí)行標(biāo)準(zhǔn):建議說(shuō)明:這樣可使程序排版整齊,并方便注釋的閱讀與理解。正例: 如下注釋結(jié)構(gòu)比較清晰int doSomething()/* 代碼段1注釋 */ 代碼段1 /* 代碼段2注釋 */ 代碼段2 反例:如下例子,排版不整齊,閱讀不方便;int doSomething()/* 代碼段1注釋 */ 代碼段1 /* 代碼段2注釋 */ 代碼段2 【規(guī)則2-7】if-else中注釋的位置采用右邊的方式,可以避免條件過(guò)長(zhǎng)的時(shí)候,注釋太靠后,也可以避免和代碼塊中的注釋混在一起。執(zhí)行標(biāo)準(zhǔn):建議正例:if() /分支條件描述else if() /分支條件描述else /分支條件描述(如無(wú)特別情況,可以不寫(xiě))五 命名規(guī)則 好的命名規(guī)則能極大地增加可讀性和可維護(hù)性。同時(shí),對(duì)于一個(gè)有上百個(gè)人共同完成的大項(xiàng)目來(lái)說(shuō),統(tǒng)一命名約定也是一項(xiàng)必不可少的內(nèi)容。本章對(duì)程序中的所有標(biāo)識(shí)符(包括包、變量名、常量名、方法名、類名等)的命名做出約定。對(duì)同一個(gè)項(xiàng)目?jī)?nèi)應(yīng)使用統(tǒng)一的詞匯表?!疽?guī)則3-1】遵循統(tǒng)一的規(guī)范來(lái)書(shū)寫(xiě)命名空間的聲明,必須以SinoLink.XXX開(kāi)頭。 說(shuō)明:對(duì)于命名空間的聲明,要遵循統(tǒng)一的命名規(guī)范來(lái)對(duì)命名空間進(jìn)行定義,所有的程序命名空間都應(yīng)以SinoLink.XXX開(kāi)頭,SinoLink代表公司的名稱,XXX代表平臺(tái)的名稱,后面可根據(jù)項(xiàng)目或者模塊名稱定義新的命名空間 執(zhí)行標(biāo)準(zhǔn):強(qiáng)制 正例:namespace SinoLink.XXX.Data;【規(guī)則3-2】命名空間的名稱若是由兩個(gè)或者更少字母組成的則所有的字母為大寫(xiě),若是由三字符或更多字符組成則首字母和后面連接的每個(gè)單詞的首字母都大寫(xiě)。 執(zhí)行標(biāo)準(zhǔn):強(qiáng)制正例: namespace SinoLink.XXX.DataModel; namespace SinoLink.XXX.UI;【規(guī)則3-3】類名采用大小寫(xiě)結(jié)合的方法,構(gòu)成類名的每個(gè)單詞的首字母也必須大寫(xiě)。在構(gòu)成類名的單詞之間不用下劃線。有特殊情況需要說(shuō)明。說(shuō)明: 使用名詞或名詞短語(yǔ)命名類。 少用縮寫(xiě)。 不要使用類型前綴,如在類名稱上對(duì)類使用 C 前綴。例如,使用類名稱 FileStream,而不是 CFileStream。 不要使用下劃線字符 (_)。 有時(shí)候需要提供以字母 I 開(kāi)始的類名稱,雖然該類不是接口。只要 I 是作為類名稱組成部分的整個(gè)單詞的第一個(gè)字母,這便是適當(dāng)?shù)?。例如,類名稱 IdentityStore 就是適當(dāng)?shù)摹?在適當(dāng)?shù)牡胤?,使用?fù)合單詞命名派生的類。派生類名稱的第二個(gè)部分應(yīng)當(dāng)是基類的名稱。例如,ApplicationException 對(duì)于從名為 Exception 的類派生的類是適當(dāng)?shù)拿Q,原因是 ApplicationException 是一種 Exception。請(qǐng)?jiān)趹?yīng)用該規(guī)則時(shí)進(jìn)行合理的判斷。例如,Button 對(duì)于從 Control 派生的類是適當(dāng)?shù)拿Q。盡管按鈕是一種控件,但是將 Control 作為類名稱的一部分將使名稱不必要地加長(zhǎng)。 執(zhí)行標(biāo)準(zhǔn):強(qiáng)制正例:public class FileStreampublic class Buttonpublic class String【規(guī)則3-4】接口命名統(tǒng)一以I開(kāi)頭。 說(shuō)明: 用名詞或名詞短語(yǔ),或者描述行為的形容詞命名接口。例如,接口名稱 IComponent 使用描述性名詞。接口名稱 ICustomAttributeProvider 使用名詞短語(yǔ)。名稱 IPersistable 使用形容詞。 少用縮寫(xiě)。 給接口名稱加上字母 I 前綴,以指示該類型為接口。 在定義類/接口對(duì)(其中類是接口的標(biāo)準(zhǔn)實(shí)現(xiàn))時(shí)使用相似的名稱。兩個(gè)名稱 的區(qū)別應(yīng)該只是接口名稱上有字母 I 前綴。 不要使用下劃線字符 (_)。 執(zhí)行標(biāo)準(zhǔn):強(qiáng)制正例:public interface IServiceProviderpublic interface IFormatable【規(guī)則3-5】變量標(biāo)識(shí)符只能由26個(gè)英文字母,10個(gè)數(shù)字及下劃線的一個(gè)子集來(lái)組成,并嚴(yán)格禁止使用連續(xù)的下劃線,必須用一個(gè)小寫(xiě)字母開(kāi)頭。后面的單詞用大寫(xiě)字母開(kāi)頭。建議用戶定義的標(biāo)識(shí)符下劃線不能出現(xiàn)在標(biāo)識(shí)符的頭尾。說(shuō)明:這樣做的目的是為了使程序易讀。因?yàn)?variable_name 和 variable_name 很難區(qū)分。執(zhí)行標(biāo)準(zhǔn):強(qiáng)制正例:NetSegDlg netSegDlg = null;【規(guī)則3-6】變量標(biāo)識(shí)符應(yīng)當(dāng)使用完整的英文描述,標(biāo)識(shí)符的命名應(yīng)當(dāng)符合“min-length & max-information”原則,謹(jǐn)慎使用縮寫(xiě)。說(shuō)明:對(duì)于標(biāo)識(shí)符應(yīng)當(dāng)使用完整的英文進(jìn)行描述,對(duì)于整個(gè)描述較長(zhǎng)的,可對(duì)單詞進(jìn)行縮略。較短的單詞可通過(guò)去掉“元音”形成縮寫(xiě),較長(zhǎng)的單詞可取單詞的頭幾個(gè)字母形成縮寫(xiě),一些單詞有大家公認(rèn)的縮寫(xiě),常用單詞的縮寫(xiě)必須統(tǒng)一。協(xié)議中的單詞的縮寫(xiě)與協(xié)議保持一致。對(duì)于某個(gè)系統(tǒng)使用的專用縮寫(xiě)應(yīng)該在某處做統(tǒng)一說(shuō)明。設(shè)計(jì)命名中應(yīng)該慎用縮寫(xiě)命名。如要采用,則應(yīng)采用統(tǒng)一的縮略規(guī)則,并且在代碼的相應(yīng)部分統(tǒng)一采用縮寫(xiě)。例如,采用num作為number的縮寫(xiě),那么在整個(gè)代碼中應(yīng)該始終使用該縮寫(xiě)。執(zhí)行標(biāo)準(zhǔn):參考正例:如下單詞的縮寫(xiě)能夠被大家認(rèn)可: temp 可縮寫(xiě)為 tmp ; flag 可縮寫(xiě)為 flg ; statistic 可縮寫(xiě)為 stat ; increment 可縮寫(xiě)為 inc ; message 可縮寫(xiě)為 msg ;以下是一些常用縮寫(xiě): 常用詞縮寫(xiě)argumentargbufferbufclearclrclockclkcomparecmpconfigurationcfgcontextctxdelaydlydevicedevdisabledisdisplaydispenableenerrorerrfunctionfncthexadecimalhexinitializeinitmailboxmboxmanagermgrmaximummaxmessagemsgminimumminmultiplexmuxoperating systemOSparameterparampreviousprevpriorityprioreadrdreadyrdyregisterregscheduleschedsemaphoresemstackstksynchronizesynctimertmrtriggertrigwritewr【規(guī)則3-7】程序中不要出現(xiàn)僅靠大小寫(xiě)區(qū)分的相似的標(biāo)識(shí)符。 說(shuō)明:命名時(shí)應(yīng)避免采用幾乎相同的名稱。例如,anSqlDatabase和anSQLDatabase也不應(yīng)同時(shí)使用。 執(zhí)行標(biāo)準(zhǔn):強(qiáng)制 【規(guī)則3-8】一般變量名不得取單個(gè)字符(如i、j、k等)作為變量名,局部循環(huán)變量除外。說(shuō)明:變量,尤其是局部變量,如果用單個(gè)字符表示,很容易出錯(cuò)(如l誤寫(xiě)成1),而編譯時(shí)又檢查不出,則有可能增加排錯(cuò)時(shí)間。變量的命名應(yīng)當(dāng)選擇精煉、意義明確的名字,才能簡(jiǎn)化程序語(yǔ)句,改善對(duì)程序功能的理解。執(zhí)行標(biāo)準(zhǔn):強(qiáng)制【規(guī)則3-9】常量名都要使用大寫(xiě)字母, 用下劃線 _ 分割單詞。 正例:public const int MIN_WIDTH = 4; 執(zhí)行標(biāo)準(zhǔn):強(qiáng)制【規(guī)則3-10】控件命名應(yīng)采用完整的英文描述符命名,名字的前綴是控件類型名。 說(shuō)明:這樣容易區(qū)分一個(gè)控件的目的和它的類型,容易在一個(gè)表里找到各個(gè)控件。執(zhí)行標(biāo)準(zhǔn):強(qiáng)制正例:btnOklistCustomer 【規(guī)則3-11】方法名應(yīng)當(dāng)能體現(xiàn)方法的作用,必須用大寫(xiě)字母開(kāi)頭的單詞組合而成,且應(yīng)當(dāng)使用“動(dòng)詞”或者“動(dòng)詞名詞”(動(dòng)賓詞組)。說(shuō)明:方法名力求清晰、明了,通過(guò)方法名就能夠判斷方法的主要功能。多個(gè)單詞組合而成的方法名中,單詞采用大小寫(xiě)字母結(jié)合的形式(首字母大寫(xiě)),但專有名詞不受限制。單詞間不用下劃線連接。執(zhí)行標(biāo)準(zhǔn):建議正例:public void SetIpType(int ipType) this.ipType = ipType;【規(guī)則3-12】獲取性方法的命名有兩類,一種是判斷性的操作(獲取屬性的狀態(tài),返回值為boolean),如判斷某些控件的狀態(tài)等,對(duì)于這些操作,應(yīng)當(dāng)是以Is為方法聲明的開(kāi)頭。另外一種是獲取返回值的操作,對(duì)一這種操作,應(yīng)當(dāng)以Get開(kāi)頭。執(zhí)行標(biāo)準(zhǔn):建議正例:GetFirstName()GetAccountNumber()IsPersistent()IsAtEnd()【規(guī)則3-13】屬性名與方法名命名規(guī)范一致。屬性名應(yīng)考慮用與屬性的基礎(chǔ)類型相同的名稱創(chuàng)建屬性。例如,如果聲明名為 Color 的屬性,則屬性的類型同樣應(yīng)該是 Color。執(zhí)行標(biāo)準(zhǔn):建議 正例: public Color BackColor / Code for Get and Set accessors goes here. 反例: public int BackColor /BackColor屬性為Integer類型 / Code for Get and Set accessors goes here. 【規(guī)則3-14】參數(shù)的命名和變量的命名規(guī)范一致。使用有意義的參數(shù)命名,而不要使用描述參數(shù)的類型的名稱。對(duì)于對(duì)數(shù)據(jù)類的屬性的賦值方法用和要賦值的字段一樣的名字。執(zhí)行標(biāo)準(zhǔn):建議正例:public void SetIpType(int ipType) this.ipType = ipType;【規(guī)則3-15】事件的名稱必須用大寫(xiě)字母開(kāi)頭的單詞組合而成。并使用EventHandler后綴,指定兩個(gè)名為sender和e的參數(shù),同時(shí)考慮使用動(dòng)詞命名事件。說(shuō)明:事件名力求能表現(xiàn)該事件的真實(shí)含義。事件的兩個(gè)參數(shù),sender 參數(shù)表示引發(fā)事件的對(duì)象。sender 參數(shù)始終是 object 類型的,即使在可以使用更為特定的類型時(shí)也如此。與事件相關(guān)聯(lián)的狀態(tài)封裝在名為 e 的事件類的實(shí)例中。對(duì) e 參數(shù)類型使用適當(dāng)而特定的事件類,并用 EventArgs 后綴命名事件參數(shù)類。使用動(dòng)名詞(動(dòng)詞的“ing”形式)創(chuàng)建表示事件前的概念的事件名稱,用過(guò)去式表示事件后。例如,可以取消的 Close 事件應(yīng)當(dāng)具有 Closing 事件和 Closed 事件。不要使用 BeforeXxx/AfterXxx 命名模式。不要在類型的事件聲明上使用前綴或者后綴。例如,使用 Close,而不要使用 OnClose。 執(zhí)行標(biāo)準(zhǔn):強(qiáng)制正例:public delegate void MouseEventHandler(object sender, MouseEventArgs e);【規(guī)則3-16】用正確的反義詞組命名具有互斥意義的變量或相反動(dòng)作的函數(shù)等。執(zhí)行標(biāo)準(zhǔn):參考說(shuō)明:下面是一些在軟件中常用的反義詞組。 add / remove ; begin / end ; create / destroy ; insert / delete ; first / last ; get / set ; increment / decrement ; put / get ; add / delete ; lock / unlock ;open / close ; min / max ; old / new ; start / stop ;next / previous ;source / target ; show / hide ; send / receive ;source / destination ;cut / paste ; up / down【規(guī)則3-17】控件變量命名,按照規(guī)范,如控件的縮寫(xiě),詳見(jiàn)“常用控件前綴縮寫(xiě)說(shuō)明”,變量首字母小寫(xiě)。執(zhí)行標(biāo)準(zhǔn):參考控件說(shuō)明前綴正例Button按鈕btnbtnNewCheckBox選擇框chkchkClearAllCheckListBox選擇列表框chklistchklistUserLabel標(biāo)簽框lablabNameListBox列表框list(or listbox)listboxUserTextBox文本框texttextUserComobox下拉框cmbcmbUserDataGrid數(shù)據(jù)表gridgridMainData六 聲明【規(guī)則4-1】一行只聲明一個(gè)變量。執(zhí)行標(biāo)準(zhǔn):建議正例: int level; int size;反例: int level, size;【規(guī)則4-2】一個(gè)變量有且只有一個(gè)功能,不能把一個(gè)變量用于多種用途。執(zhí)行標(biāo)準(zhǔn):強(qiáng)制反例: void myMethod() boolean myFlag = false; myFlag = isVisible(myView)/作為可見(jiàn)性判斷標(biāo)志 /使用myFlag做其它操作 myFlag = isEnable(myComponent)/作為可用性判斷標(biāo)志 七 表達(dá)式與語(yǔ)句表達(dá)式是語(yǔ)句的一部分,它們是不可分割的。表達(dá)式和語(yǔ)句雖然看起來(lái)比較簡(jiǎn)單,但使用時(shí)隱患比較多。本章歸納了正確使用表達(dá)式和if、for、while、switch等基本語(yǔ)句的一些規(guī)則與建議。【規(guī)則5-1】每一行應(yīng)該只包括一個(gè)語(yǔ)句。說(shuō)明:復(fù)雜的語(yǔ)句閱讀起來(lái)難于理解,并容易隱含錯(cuò)誤。執(zhí)行標(biāo)準(zhǔn):強(qiáng)制正例:argv+; 反例:argv+; argc-;if(s4 = null) s4 = “Joy”;【規(guī)則5-2】在表達(dá)式中使用括號(hào),使表達(dá)式的運(yùn)算順序更清晰。說(shuō)明:由于將運(yùn)算符的優(yōu)先級(jí)與結(jié)合律熟記是比較困難的,為了防止產(chǎn)生歧義并提高可讀性,即使不加括號(hào)時(shí)運(yùn)算順序不會(huì)改變,也應(yīng)當(dāng)用括號(hào)確定表達(dá)式的操作順序。執(zhí)行標(biāo)準(zhǔn):建議正例:if (iYear % 4 = 0) & (iYear % 100 != 0) | (iYear % 400 = 0)反例:if (iYear % 4 = 0 & iYear % 100 != 0 | iYear % 400 = 0)【規(guī)則5-3】當(dāng)復(fù)合語(yǔ)句作為控制流程的一部分時(shí),應(yīng)該用 把所有的復(fù)合語(yǔ)句括起來(lái),即使只有一句簡(jiǎn)單語(yǔ)句。說(shuō)明:這樣可以更方便地加入語(yǔ)句而不會(huì)由于忘掉加括號(hào)而引起的偶然性的錯(cuò)誤。執(zhí)行標(biāo)準(zhǔn):強(qiáng)制正例:int count;.myMethod() if (condition) count = 1; 【規(guī)則5-4】在switch語(yǔ)句中,每一個(gè)case分支必須使用break結(jié)尾,最后一個(gè)分支必須是default分支。說(shuō)明:避免漏掉break語(yǔ)句造成程序錯(cuò)誤。有時(shí)編程邏輯需要,可以幾個(gè)case語(yǔ)句共用一個(gè)語(yǔ)句塊,對(duì)這種情況必須加注釋進(jìn)行說(shuō)明。有return語(yǔ)句的特殊情況除外。 執(zhí)行標(biāo)準(zhǔn):強(qiáng)制正例: switch (iMessage)case SPAN_ON: 處理語(yǔ)句 break; case SPAN_OFF: 處理語(yǔ)句 break; default: 處理語(yǔ)句break;【規(guī)則5-5】不要使用過(guò)多的if/else if分支,建議3個(gè)以上的判斷使用switch語(yǔ)句 說(shuō)明:過(guò)多的if /else if分支會(huì)增加程序閱讀困難,程序邏輯錯(cuò)誤的可能。執(zhí)行標(biāo)準(zhǔn):建議反例:
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中金匯通信技術(shù)有限公司甘肅分公司招聘60人筆試參考題庫(kù)附帶答案詳解
- 計(jì)劃你的2024年紡織品檢驗(yàn)員考試試題及答案
- 紡織品質(zhì)量控制方法試題及答案
- 耳鼻喉科英文試題及答案
- 環(huán)??萍际痉秷@建設(shè)項(xiàng)目可行性研究報(bào)告分析
- 解除《租賃合同》協(xié)議書(shū)
- 瓷粉施工合同協(xié)議書(shū)
- 建筑施工合同合同協(xié)議書(shū)
- 禮品供貨合同協(xié)議書(shū)范本
- 擬定合同協(xié)議書(shū)
- 《甲烷吸附儲(chǔ)存技術(shù)》課件
- 2025物業(yè)管理服務(wù)承包合同范本
- 企業(yè)所得稅課件
- 2025年高考政治核心知識(shí)總結(jié)
- 工程款抵房協(xié)議合同模板
- 初中數(shù)學(xué)問(wèn)題解決策略 特殊化教案2024-2025學(xué)年北師大版(2024)七年級(jí)數(shù)學(xué)下冊(cè)
- 托管中心晚輔老師培訓(xùn)
- 兼職顧問(wèn)服務(wù)合同范本
- 人教版(新教材)高中物理選擇性必修2教學(xué)設(shè)計(jì)2:2 2 法拉第電磁感應(yīng)定律教案
- 2024-2025學(xué)年人教版數(shù)學(xué)八年級(jí)下冊(cè)期中押題重難點(diǎn)檢測(cè)卷(含答案)
- 基建科室面試題及答案
評(píng)論
0/150
提交評(píng)論