C#編碼規(guī)范#(精選.)_第1頁(yè)
C#編碼規(guī)范#(精選.)_第2頁(yè)
C#編碼規(guī)范#(精選.)_第3頁(yè)
C#編碼規(guī)范#(精選.)_第4頁(yè)
C#編碼規(guī)范#(精選.)_第5頁(yè)
已閱讀5頁(yè),還剩24頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、中國(guó)人壽保險(xiǎn)股份有限公司版權(quán)所有,不得侵犯中國(guó)人壽保險(xiǎn)股份有限公司標(biāo)準(zhǔn)C#編碼規(guī)范(2011 版)中國(guó)人壽保險(xiǎn)股份有限公司信息技術(shù)部 發(fā)布文檔信息制度名稱C#編碼規(guī)范密級(jí)分類三類公司制度C類信息技術(shù)制度密級(jí)分類三類公司制度C類信息技術(shù)制度實(shí)施目標(biāo)規(guī)范C#語(yǔ)言開發(fā)的編碼習(xí)慣和風(fēng)格主題詞C#編碼規(guī)范版本控制版本日期人員更新說(shuō)明2011 版2011年5月傅紀(jì)東新增文檔審核審核人職務(wù)審核日期3 / 24word.1 概述1.1 目的C#編碼規(guī)范作為使用C#語(yǔ)言進(jìn)行程序開發(fā)的規(guī)范,詳細(xì)描述了C#語(yǔ)言開發(fā)中命名、聲明、語(yǔ)句、注釋、排版等的規(guī)范,并對(duì)編程 慣例進(jìn)行約束,用于指導(dǎo)使用C#語(yǔ)言進(jìn)行開發(fā)的項(xiàng)目進(jìn)行

2、代碼規(guī)范 和檢查。同時(shí)還為安全性規(guī)范和單元測(cè)試提供指導(dǎo)。1.2 適用范圍本規(guī)范適用于公司全系統(tǒng)。1.3 術(shù)語(yǔ)定義C#:是由Microsoft 公司推由的C#程序設(shè)計(jì)語(yǔ)言,是.NET平臺(tái) 中主要的開發(fā)語(yǔ)言之一。2 編碼規(guī)范2.1 排版規(guī)范1 )縮進(jìn)、換行、空行程序塊要采用縮進(jìn)風(fēng)格編寫,縮進(jìn)的空格數(shù)為4 個(gè)。2 函數(shù)或過(guò)程的開始、結(jié)構(gòu)的定義代碼采用縮進(jìn)風(fēng)格。switch 、80 個(gè)2循環(huán)和判斷語(yǔ)句(if、 for 、 foreach 、 do 、 whilecase 等)中的代碼采用縮進(jìn)風(fēng)格。3一行代碼的長(zhǎng)度不能超過(guò)屏幕顯示范圍(一般控制在字符以內(nèi))。4長(zhǎng)的語(yǔ)句要分成多行書寫。5長(zhǎng)表達(dá)式要在低優(yōu)先

3、級(jí)操作符處劃分新行。6函數(shù)或過(guò)程中的參數(shù)較長(zhǎng)時(shí),要分成多行書寫。7多行書寫時(shí),串連運(yùn)算符要放在新行之首。8相對(duì)獨(dú)立的程序段、變量之后要加空行。29 / 24word.10 在兩個(gè)以上的關(guān)鍵字、變量、常量進(jìn)行對(duì)等操作時(shí),它們之間的操作符之前、之后或者前后要加空格;進(jìn)行非對(duì)等操作時(shí),如果是關(guān)系密切的立即操作符,后不應(yīng)加空格。2 )排版結(jié)構(gòu)1 不允許把多個(gè)短語(yǔ)句寫在一行中,即一行只寫一條語(yǔ)句。但if、 for 、 foreach 、 while 等語(yǔ)句后的不單獨(dú)占用一行,可以使行數(shù)減少,讓一個(gè)窗口視圖可以看到更多的邏輯。2 不同類型的操作符混合使用時(shí),即使實(shí)現(xiàn)優(yōu)先級(jí)與實(shí)際需要相符,最好也使用括號(hào)隔離

4、,以便代碼更加清晰。2.2 變量規(guī)范1 ) 變量的使用1 定義并明確變量的含義、作用、取值范圍及變量間的關(guān)系。2變量訪問(wèn)之前一定要初始化。3 C#中沒(méi)有全局變量和全局函數(shù)。全局操作是通過(guò)靜態(tài)變量和 靜態(tài)函數(shù)來(lái)實(shí)現(xiàn)的。4 readonly( 只讀)修飾符,僅在類的數(shù)據(jù)成員中使用,只能在構(gòu)造函數(shù)或者直接初始化時(shí)賦值一次。與 const 數(shù)據(jù)成員不同的是, const 要求在聲明中初始化,而readonly 可以先定義,后賦值(僅一次)。2 )數(shù)據(jù)類型數(shù)據(jù)結(jié)構(gòu)1 使用嚴(yán)格形式定義的、可移植的數(shù)據(jù)類型,盡量不要使用與具體硬件或軟件環(huán)境關(guān)系密切的變量。2不要設(shè)計(jì)面面俱到、非常靈活的數(shù)據(jù)結(jié)構(gòu)。不同結(jié)構(gòu)間的

5、關(guān)系不要過(guò)于復(fù)雜。結(jié)構(gòu)中元素的個(gè)數(shù)應(yīng)適中。3若結(jié)構(gòu)中元素個(gè)數(shù)過(guò)多,可考慮依據(jù)某種原則把元素組成不同的子結(jié)構(gòu)。4認(rèn)真設(shè)計(jì)結(jié)構(gòu)中元素的布局與排列順序,使結(jié)構(gòu)容易理解,以減少誤用現(xiàn)象。5 注意具體語(yǔ)言及編譯器處理不同數(shù)據(jù)類型的原則及有關(guān)細(xì)節(jié)。編程時(shí),要注意數(shù)據(jù)類型的強(qiáng)制轉(zhuǎn)換。對(duì)編譯系統(tǒng)默認(rèn)的數(shù)據(jù)類型轉(zhuǎn)換,也要有充分的認(rèn)識(shí)。6盡量減少?zèng)]有必要的數(shù)據(jù)類型默認(rèn)轉(zhuǎn)換與強(qiáng)制轉(zhuǎn)換。對(duì)自定義數(shù)據(jù)類型進(jìn)行恰當(dāng)命名,使它成為自描述性的,以提高代碼可讀性。注意其命名方式在同一產(chǎn)品中的統(tǒng)一。7 用戶定義的類型可以包括:類類型 ( class) , 結(jié)構(gòu)類型 ( struct ) ,接口類型(interface )。根據(jù)類

6、型的內(nèi)存分配形式的不同又分成值類型(value types ),引用類型(reference types )。8在對(duì)較長(zhǎng)字符串操作的時(shí)候,避免使用String 類,而用效率比較高的StringBuilder 類,可以提高操作的便利性,減少額外開銷和垃圾回收的壓力。2.3 命名規(guī)范1 )變量、方法函數(shù)的命名1 變量名必須以字母開頭2變量名只能由字母、數(shù)字和下滑線組成,而不能包含空格、標(biāo)點(diǎn)符號(hào)、運(yùn)算符等其他符號(hào)。3.變量名不能與 C#中的關(guān)鍵字、庫(kù)函數(shù)名稱相同。4關(guān)于變量命名類型,形式可參考如下。類型命名形式特征BoolbFlagtrue;falseCharcName數(shù)字,英文,表達(dá)式符號(hào)Sbyt

7、esbCount有符號(hào)8 位整數(shù)bytebCount無(wú)符號(hào)8 位整數(shù)shortsCount有符號(hào)16 位整數(shù)ushortusCount無(wú)符號(hào)16 位整數(shù)intnCount有符號(hào)32 位整數(shù)uintniCount無(wú)符號(hào)32 位整數(shù)longlCount有符號(hào)64 位整數(shù)ulongulCount無(wú)符號(hào)64 位整數(shù)floatfCount單精度7 位數(shù)decimaldCount雙精度15 到 16 位數(shù)stringsName字符串5命名要清晰、明了,有明確含義,同時(shí)使用完整的單詞或大家基本可以理解的縮寫,避免讓人產(chǎn)生誤解。而且完整的單詞之間的第一個(gè)字母需用大寫來(lái)區(qū)別。6關(guān)于變量的級(jí)別區(qū)分。私有成員變量:

8、變量前綴”m_ ”;靜態(tài)成員:變量前綴”s_”。7 i、 j、 k 作局部循環(huán)變量是允許的,x,y 經(jīng)常被作為坐標(biāo)變量。8方法函數(shù)的命名要避免使用容易被主觀解釋的難懂的名稱,使用動(dòng)詞-名詞的方法來(lái)命名來(lái)給定。9 區(qū)分變量和方法函數(shù),方法函數(shù)名要使用Pascal 大小寫處理( CalculateInvoiceTotal) , 其中每一個(gè)單詞的第一字母都是大寫;變量名要使用camel 大小寫處理( documentFormatType ),其中除了第一個(gè)單詞以外每個(gè)單詞的第一個(gè)字母都是大寫的方式來(lái)處理。2 ) 常量、宏定義命名1 常量和宏定義必須要有一定的實(shí)際意義。2常量和宏定義在函數(shù)定義之前。3

9、常量和宏定義必須全部以大寫字母來(lái)命名,中間可以根據(jù)意義連續(xù)性用下劃線連接。而且在右邊必須要有注釋來(lái)說(shuō)明其意義和作用。3 )類、委托、接口、名空間的命名1 以 Class 聲明的類,必須以能夠標(biāo)識(shí)事物特性的名詞或者名詞短語(yǔ)命名,每個(gè)單詞的第一個(gè)字母必須大寫。2根據(jù)類的特性(命名+ 特性標(biāo)識(shí))來(lái)命名,參考如下。特性標(biāo)識(shí)AttributeAttributeException Exception只需要一個(gè)對(duì)象實(shí)例(全局對(duì)象)Class只作為其他類的基類Base類是窗體Form類是 Web 窗體 Page3委托類型以描述動(dòng)作的名詞命名,以體現(xiàn)委托類型實(shí)例的功4.接口的命名以大寫字母“ I”加上有意義的單

10、詞來(lái)命名,每個(gè)單詞的第一個(gè)字母必須大寫。接口以外的命名,一定要避免使用“ I ”作為單個(gè)單詞首寫的命名。5名字空間的命名,參照類命名。4 )控件、資源名稱命名1 Web 控件的命名以“Web 控件大寫前綴+ _+ 變量名稱“來(lái)規(guī)范??丶笮懬熬YFrameFrmLabelLblTextBoxTxtCheckBoxChkButtonBtnListBox LstDropDownList DrpImageImgPicPictureGridGrdComBox Cob2 WindowsForm 的控件命名以“ Windows 控件小寫前綴 _+ 變量名稱“來(lái)規(guī)范??丶懬熬YFramfrmLabellb

11、lTextBoxtxtCheckBox chkButtonbtnListBox lstDropDownList drpImageimgPicturepicGridgrdcobComBox3 .資源名稱命名以“資源大寫前綴 +'_'+變量名稱“來(lái)規(guī)范??丶髮懬熬Y菜單IDM位圖IDB對(duì)話框IDD字符串IDS2.4注釋規(guī)范* )模塊(類)注釋文件開始注釋內(nèi)容包括:公司名稱、版權(quán)、作者姓名、時(shí)間、模塊用途、背景介紹等,復(fù)雜的算法需要加上流程說(shuō)明。/* *文件(類)名:* * Copyright (c) 2003-2004 * 公司* *創(chuàng)建人:* *日期:* *修改人:* *日期:*

12、 *描述:* *版本:*/*2)函數(shù)注釋函數(shù)注釋包括:輸入、輸由、函數(shù)描述、流程處理、調(diào)用樣例等,復(fù)雜的函數(shù)需要加上變量用途說(shuō)明/* *函數(shù)名:* * 輸入:a,b,c*c-*輸出:x-*/3)代碼注釋1 .變量、常量的注釋。包括:簡(jiǎn)潔準(zhǔn)確的注釋。2 .程序中的功能塊,包括:修改時(shí)間和作者、方便理解的注釋等3 .邊寫代碼邊注釋,修改代碼同時(shí)修改相應(yīng)的注釋,以保證注 釋與代碼的一致性。4 .不再有用的注釋要?jiǎng)h除。注釋的內(nèi)容要清楚、明了、含義準(zhǔn) 確,防止注釋二義性。5 .避免在注釋中使用縮寫,特別是非常用縮寫注釋應(yīng)與其描述 的代碼相近,對(duì)代碼的注釋應(yīng)放在其上方或右方(對(duì)單條語(yǔ)句的 注釋)相鄰位置,

13、不可放在下面,如放于上方則需與其上面的代 碼用空行隔開。6 .對(duì)于所有物理含義的變量、常量,如果其命名不是充分注釋 的,在聲明時(shí)都必須加以注釋,說(shuō)明其物理含義、變量、常量、 宏的注釋就放在其上方相鄰位置或右方。7數(shù)據(jù)結(jié)構(gòu)聲明(包括數(shù)組、結(jié)構(gòu)、類、枚舉等),如果其命名不是充分注釋的,必須加以注釋。8對(duì)數(shù)據(jù)結(jié)構(gòu)的注釋應(yīng)放在其上方相鄰位置,不可放在下面;對(duì)結(jié)構(gòu)中的每個(gè)域的注釋放在此域的右方。9. 描述內(nèi)容進(jìn)行同樣的縮排。將注釋與其上面的代碼用空行隔開。10. 對(duì)變量的定義和分支語(yǔ)句(條件分支、循環(huán)語(yǔ)句等)必須編寫注釋。2.5 結(jié)構(gòu)化規(guī)范1 )程序結(jié)構(gòu)要求2 程序結(jié)構(gòu)要清晰,簡(jiǎn)單易懂,單個(gè)函數(shù)的程序行

14、不得超過(guò)200行。3 使用 .NET 庫(kù)函數(shù)和公共函數(shù)(無(wú)特殊情況,不要使用外部方法調(diào)用 windows 的核心動(dòng)態(tài)連接庫(kù))。3代碼中垂直對(duì)齊左括號(hào)和右括號(hào)。4在函數(shù)參數(shù)較多的時(shí)候,盡量使用結(jié)構(gòu)類型來(lái)傳遞參數(shù)。2 )可讀性規(guī)范1 要重視程序的可讀性,并在其基礎(chǔ)上考慮效率。2保持代碼和注釋的一致性。3運(yùn)算符兩邊要有空格。4在復(fù)雜的算法前面,必須要有詳細(xì)解釋。5循環(huán)和分層不要超過(guò)5 層。3 )結(jié)構(gòu)化規(guī)范1 禁止GOTO 語(yǔ)句。2 用 IF 語(yǔ)句來(lái)強(qiáng)調(diào)只執(zhí)行兩組語(yǔ)句中的一組。禁止 ELSE GOTO和 ELSE RETURN 的使用。3不提倡使用條件賦值語(yǔ)句。4不要輕易使用條件分支去替換邏輯表達(dá)式。

15、2.6 代碼正確性規(guī)范1 )代碼規(guī)范1 .變量在調(diào)用前,必須初始化。2 .對(duì)所有用戶的輸入,必須做合法性檢查。3 .不要比較浮點(diǎn)數(shù)的相等。4 .程序與環(huán)境或狀態(tài)發(fā)生關(guān)系時(shí),必須主動(dòng)去處理發(fā)生的意外事件。5 .盡量使用規(guī)范的容錯(cuò)語(yǔ)句。try catch finally6 .注意裝箱和拆箱方法的使用。7 .注意隱性類型轉(zhuǎn)換的值的變化。2)可復(fù)用性規(guī)范1 .重復(fù)使用完成相對(duì)獨(dú)立功能的算法或者代碼,應(yīng)抽象為 服務(wù)或類。2 .盡量用OO思想考慮獨(dú)立和封裝性。3 安全性規(guī)范3.1 輸入驗(yàn)證類規(guī)范1 、避免命令注入類攻擊避免從系統(tǒng)目錄獲取外部執(zhí)行程序,通過(guò)cmd 方式執(zhí)行;String home = Sys

16、tem.getProperty("APPHOME");String cmd = home + INITCMD;C#.lang.Runtime.getRuntime().exec(cmd);命令注入攻擊通過(guò)改變應(yīng)用程序執(zhí)行的命令和改變命令執(zhí)行的環(huán)境達(dá)到攻擊目的。攻擊者可以通過(guò)修改系統(tǒng)變量APPHOME ,使其指向一個(gè)包含惡意代碼的路徑,進(jìn)而利用應(yīng)用程序的高級(jí)權(quán)限來(lái)執(zhí)行任意命令。因?yàn)槌绦驔](méi)有對(duì)讀入的環(huán)境變量值進(jìn)行驗(yàn)證,如果攻擊者能夠控制系統(tǒng)的環(huán)境變量值A(chǔ)PPHOME , 那么攻擊者就能欺騙應(yīng)用程序,讓其執(zhí)行惡意代碼,從而控制系統(tǒng)。2、避免跨站腳本攻擊應(yīng)用程序在數(shù)據(jù)庫(kù)或者其它可信

17、數(shù)據(jù)源中存儲(chǔ)了危險(xiǎn)數(shù)據(jù)。這些危險(xiǎn)數(shù)據(jù)隨后被應(yīng)用程序讀取并包含在動(dòng)態(tài)內(nèi)容中。存儲(chǔ)型XSS 通常是由攻擊者將危險(xiǎn)內(nèi)容注入數(shù)據(jù)存儲(chǔ)中,然后該內(nèi)容被讀出并包含在動(dòng)態(tài)內(nèi)容中。必須在所有數(shù)據(jù)進(jìn)入應(yīng)用程序之前把可能的危險(xiǎn)攔截。針對(duì)非法的 HTML 代碼包括單雙引號(hào)等,編寫函數(shù)對(duì)其進(jìn)行過(guò)濾。3、避免拒絕服務(wù)攻擊涉及到系統(tǒng)資源的外部數(shù)據(jù)應(yīng)該進(jìn)行嚴(yán)格校驗(yàn),防止大數(shù)目或者無(wú)限制的輸入。4、避免路徑操控攻擊應(yīng)用程序應(yīng)該盡量避免用戶直接指定文件系統(tǒng)操作路徑,可以通過(guò)文件選擇框或者文件列表來(lái)讓用戶指定操作路徑,同時(shí)對(duì)用戶指定的路徑進(jìn)行輸入校驗(yàn),對(duì)不符合程序要求的拒絕執(zhí)行。對(duì)于來(lái)自于配置文件等外部資源的路徑輸入,同樣應(yīng)該進(jìn)

18、行輸入校驗(yàn),防止外部輸入路徑非法或者越界5、避免日志偽造應(yīng)用程序應(yīng)該避免將用戶的輸入直接記入日志,可以根據(jù)產(chǎn)生的異常,在程序內(nèi)部生成日志信息記入日志。如果需要將來(lái)自于外部的數(shù)據(jù)記入日志,那么需要對(duì)記入日志的數(shù)據(jù)進(jìn)行校驗(yàn),過(guò)濾非法字符。此外,應(yīng)該對(duì)日志文件進(jìn)行嚴(yán)格的訪問(wèn)控制,杜絕未經(jīng)授權(quán)的用戶訪問(wèn)日志。6、避免 SQL 注入應(yīng)用程序?qū)斎脒M(jìn)行驗(yàn)證,要么只接受白名單中的安全字符,要么鑒別和排除黑名單中的惡意字符。白名單是一種非常有效的方法,雖然它需要執(zhí)行嚴(yán)格的輸入驗(yàn)證規(guī)則,但可以減少對(duì)參數(shù)化 SQL 語(yǔ)句的維護(hù),并能夠提供更高的安全保證。3.2 API 使用規(guī)范1 、避免使用GC.Collect(

19、)直接請(qǐng)求進(jìn)行垃圾回收很有可能導(dǎo)致出現(xiàn)問(wèn)題,尤其是與時(shí)間和狀態(tài)有關(guān)時(shí)。2、檢測(cè)函數(shù)返回值的空值程序要對(duì)函數(shù)的返回值進(jìn)行非Null 校驗(yàn),否則程序有可能會(huì)去解引用一個(gè)空指針。3、遵循對(duì)象模型,定義Equals() 和 GetHashCode()(類重寫 Equals() 方法和 GetHashCode() 方法。 .NET 對(duì)象需要滿足很多與相等有關(guān)的等式,其中一個(gè)等式就是相等的對(duì)象要有相等的hash 值。換句話說(shuō),如果a.Equals(b) = true ,那么a.GetHashCode() = b.GetHashCode() 。 如果該類的對(duì)象被存儲(chǔ)在一個(gè)collection 中,那么不支持上面的這個(gè)等式就會(huì)導(dǎo)致問(wèn)題。如果所說(shuō)的這類對(duì)象被用作hash表的Key ,或者被插入一個(gè)字典中,那么相等的對(duì)象有相等的hash 值這一點(diǎ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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論