《C# 程式設計規範》
技 術 文 件
技術檔名稱:編碼規範_C#
技術檔案編號:
版 本:1.0
擬 制
審 核
會 籤
標準化
批 準
版本變更記錄
版本號 |
擬製/修改日期 |
擬製/修改人 |
修改記錄 |
批准人 |
1.0 |
2017-3-12 |
|
|
|
|
|
|
|
|
|
|
|
|
|
編寫本標準的目的是為了統一軟體程式設計風格,提高軟體源程式的可讀性、可靠性和可重用性,提高軟體源程式的質量和可維護性,減少軟體維護成本,最終提高軟體產品生產力。
本規範分成規則性和建議性兩種:對於規則性規範,要求所有軟體開發人員嚴格執行;對於建議性規範,各專案程式設計人員可以根據實際情況選擇執行。本規範的示例都以C#語言描述。
本規範的內容包括:基本原則、佈局、註釋、命名規則、聲名、表示式與語句、類與介面等。規範最後給出了標準模版供軟體人員參考。
自本標準實施之日起,以後新編寫的和修改的程式碼均應執行本標準。
本標準規定了C#語言的程式設計規範,主要包括基本原則、佈局、註釋、命名規則、宣告、表示式與語句、類與介面等。
本標準適用於使用C#語言編碼的所有軟體。本規範自生效之日起,對以後新編寫的和修改的程式碼有約束力。
下列術語和定義適用於本標準。
程式設計時應該堅持的指導思想。
程式設計時必須遵守的約定。
程式設計時必須加以考慮的約定。
對此規則或建議的必要的解釋。
對此規則或建議給出的正確例子。
對此規則或建議給出的反面例子。
【原則1-1】首先是為人編寫程式,其次才是計算機。 |
說明:這是軟體開發的基本要點,軟體的生命週期貫穿產品的開發、測試、生產、使用者使用、版本升級和後期維護等長期過程,只有易讀、易維護的軟體程式碼才具有生命力。
【原則1-2】保持程式碼的簡明清晰,避免過分的程式設計 |
說明:簡單是最美。保持程式碼的簡單化是軟體工程化的基本要求。不要過分追求技巧,否則會降低程式的可讀性。
【原則1-3】所有的程式碼儘量遵循公共語言規範(CLS)。 |
說明:程式設計時以該規範為準,規範沒有規定的內容參考上面的標準。
【原則1-4】程式設計時首先達到正確性,其次考慮效率。 |
說明:程式設計首先考慮的是滿足正確性、健壯性、可維護性、可移植性等質量因素,最後才考慮程式的效率和資源佔用。
【原則1-5】儘量避免使用GOTO語句。 |
【原則1-6】儘可能重用、修正老的程式碼。 |
說明:儘量選擇可借用的程式碼,對其修改優化以達到自身要求。
【原則1-7】 儘量減少同樣的錯誤出現的次數。 |
說明:事實上,我們無法做到完全消除錯誤,但通過不懈的努力,可以減少同樣的錯誤出現的次數。
程式佈局的目的是顯示出程式良好的邏輯結構,提高程式的準確性、連續性、可讀性、可維護性。更重要的是,統一的程式佈局和程式設計風格,有助於提高整個專案的開發質量,提高開發效率,降低開發成本。同時,對於普通程式設計師來說,養成良好的程式設計習慣有助於提高自己的程式設計水平,提高程式設計效率。因此,統一的、良好的程式佈局和程式設計風格不僅僅是個人主觀美學上的或是形式上的問題,而且會涉及到產品質量,涉及到個人程式設計能力的提高,必須要引起重視。
【規則2-1-1】原始碼檔案(.cs)的佈局順序是:using語句、名稱空間、註釋、類。 |
說明:以下內容如果某些節不需要,可以忽略。但是其它節要保持該次序。
正例:
using System;
namespace lanmage.xxx
{
/// <summary>
/// 版權所有: 版權所有(C) 2004
/// 內容摘要: 本類是…..,包括主要……模組、……函式及功能是…….
/// 完成日期: 輸入完成日期,例:2004年3月1日
/// 版 本:
/// 作 者:
///
/// 修改記錄1: 修改歷史記錄,包括修改日期、修改者及修改內容
/// 修改日期:
/// 版 本 號:
/// 修 改 人:
/// 修改內容:
/// 修改記錄2: …
/// </summary>
public class Sample
{
}
}
【規則2-1-2】遵循統一的佈局順序來書寫using語句,不同類別的using語句之間用空行分隔。 |
說明:using名稱空間語句的排列順序為System開頭的名稱空間在最前面,接下來是引自外部的名稱空間,再接下來是應用程式自身的名稱空間,即using 中標準的名稱空間要在本地的名稱空間之前,而且按照字母順序排列。
正例:
using System; // .Net自身的
using System.Data;
using FarPoint.Win.Spread; //第三方的
using lanmage.DSS.Public; //程式自身的
【規則2-1-3】程式中一行的程式碼和註釋不能超過80字元。 |
說明:包括空格在內不超過80字元。
【規則2-1-4】if、else、else if、for、while、do等語句自佔一行,執行語句不得緊跟其後。不論執行語句有多少都要加 { }。 |
說明:這樣可以防止書寫失誤,也易於閱讀。
正例:
if (varible1 < varible2)
{
varible1 = varible2;
}
反例:下面的程式碼執行語句緊跟if的條件之後,而且沒有加{},違反規則。
if (varible1 < varible2) varible1 = varible2;
〖建議2-1-4〗源程式中關係較為緊密的程式碼應儘可能相鄰。 |
說明:這樣便於程式閱讀和查詢。
正例:
iLength = 10;
iWidth = 5; // 矩形的長與寬關係較密切,放在一起。
StrCaption = “Test”;
反例:
iLength = 10;
strCaption = “Test”;
iWidth = 5;
【規則2-2-1】 禁止使用TAB鍵,必須使用空格進行縮排。縮排為4個空格。 |
說明:消除不同編輯器對TAB處理的差異,有的程式碼編輯器可以設定用空格代替TAB鍵。
【規則2-2-2】程式的分界符‘{’和‘}’應獨佔一行並且位於同一列,同時與引用它們的語句左對齊。{ }之內的程式碼塊使用縮排規則對齊。 |
說明:這樣使程式碼便於閱讀,並且方便註釋。
do while語句和結構的型別化時可以例外,while條件和結構名可與 } 在同一行。
正例:
void Function(int iVar)
{ // 獨佔一行並與引用語句左對齊。
while (condition)
{
DoSomething(); // 與{ }縮排4格
}
}
反例:
void Function(int iVar){
while (condition){
DoSomething();
}}
【規則2-2-3】相關的賦值語句等號對齊。 |
正例:
tPDBRes.wHead = 0;
tPDBRes.wTail = wMaxNumOfPDB - 1;
tPDBRes.wFree = wMaxNumOfPDB;
tPDBRes.wAddress = wPDBAddr;
tPDBRes.wSize = wPDBSize;
【規則2-3-1】不同邏輯程式塊之間要使用空行分隔。 |
說明:空行起著分隔程式段落的作用。適當的空行可以使程式的佈局更加清晰。
正例:
void Hey(void)
{
[Hey實現程式碼]
}
// 空一行
void Ack(void)
{
[Ack實現程式碼]
}
反例:
void Hey(void)
{
[Hey實現程式碼]
}
void Ack(void)
{
[Ack實現程式碼]
}
// 兩個函式的實現是兩個邏輯程式塊,應該用空行加以分隔。
【規則2-3-2】一元操作符如“!”、“~”、“++”、“--”、“*”、“&”等前後不加空格。“[]”、“.”這類操作符前後不加空格。 |
正例:
!bValue
~iValue
++iCount
&fSum
aiNumber[i] = 5;
tBox.dWidth
【規則2-3-3】多元運算子和它們的運算元之間至少需要一個空格。 |
正例:
fValue = fOldValue;
fTotal + fValue
iNumber += 2;
【規則2-3-4】關鍵字之後要留空格。 |
說明:if、for、while等關鍵字之後應留一個空格再跟左括號‘(’,以突出關鍵字。
【規則2-3-5】函式名之後不要留空格。 |
說明:函式名後緊跟左括號‘(’,以與關鍵字區別。
【規則2-3-6】‘(’向後緊跟,‘)’、‘,’、‘;’向前緊跟,緊跟處不留空格。‘,’之後要留空格。‘;’不是行結束符號時其後要留空格。 |
正例:
例子中的 凵 代表空格。
for凵(i凵=凵0;凵i凵<凵MAX_BSC_NUM;凵i++)
{
DoSomething(iWidth,凵iHeight);
}
【規則2-3-7】註釋符與註釋內容之間要用一個空格進行分隔。 |
正例:
/* 註釋內容 */
// 註釋內容
反例:
/*註釋內容*/
//註釋內容
【規則2-3-8】集合與花括號:集合的左右兩邊的花括號,與集合的元素空一格。 |
正例:
string[] carTypes = {凵"Ford", "afakh", "xiaopeijian" 凵};
int[] myInts = {凵10, 20, 30, 40, -20, 100凵};
反例:
string[] carTypes = {"Ford", "afakh", "xiaopeijian"};
int[] myInts = {10, 20, 30, 40, -20, 100};
【規則2-4-1】長表示式(超過120列)要在低優先順序操作符處拆分成新行,操作符放在新行之首(以便突出操作符)。拆分出的新行要進行適當的縮排,使排版整齊。 |
說明:條件表示式的續行在第一個條件處對齊。
for迴圈語句的續行在初始化條件語句處對齊。
函式呼叫和函式宣告的續行在第一個引數處對齊。
賦值語句的續行應在賦值號處對齊。
正例:
if ((iFormat == CH_A_Format_M)
&& (iOfficeType == CH_BSC_M)) // 條件表示式的續行在第一個條件處對齊
{
DoSomething();
}
for (long_initialization_statement;
long_condiction_statement; // for迴圈語句續行在初始化條件語句處對齊
long_update_statement)
{
DoSomething();
}
// 函式宣告的續行在第一個引數處對齊
BYTE ReportStatusCheckPara(BYTE ucCallNo,
BYTE ucStatusReportNo);
// 賦值語句的續行應在賦值號處對齊
fTotalBill = fTotalBill + faCustomerPurchases[iID]
+ fSalesTax(faCustomerPurchases[iID]);
【規則2-4-2】函式宣告時,型別與名稱不允許分行書寫。 |
正例:
double CalcArea(double dWidth, double dHeight);
反例:
double
CalcArea(double dWidth, double dHeight);
註釋有助於理解程式碼,有效的註釋是指在程式碼的功能、意圖層次上進行註釋,提供有用、額外的資訊,而不是程式碼表面意義的簡單重複。
【規則3-1】類、方法、屬性的註釋採用XML文件格式註釋。程式碼間多行註釋為“/* … */”,單行註釋採用“// …”。 |
正例:public class Sample
{
//資料成員 (單行註釋)
private int m_iProperty1;
/// <summary> (XML註釋)
/// 示例屬性
/// </summary>
public int Property1
{
get
{
return m_iProperty1;
}
/* set ( 多行註釋)
{
m_iProperty1 = value;
} */
}
【規則3-2】一般情況下,源程式有效註釋量必須在20%以上。 |
說明:註釋的原則是有助於對程式的閱讀理解,註釋不宜太多也不能太少,註釋語言必須準確、易懂、簡潔。有效的註釋是指在程式碼的功能、意圖層次上進行註釋,提供有用、額外的資訊。
【規則3-3】註釋使用中文。 |
說明:對於特殊要求的可以使用英文註釋,如工具不支援中文或國際化版本時。
|
【規則3-4】類、介面頭部應進行XML註釋。 |
說明:註釋必須列出:內容摘要、版本號、作者、完成日期、修改資訊等。
正例:
/// <summary>
/// 版權所有: 版權所有(C) 2004
/// 內容摘要: 本類的內容是…..
/// 完成日期:2004年3月1日
/// 版 本:V1.0
/// 作 者:小張
///
/// 修改記錄1:
/// 修改日期:2004年3月10日
/// 版 本 號:V1.2
/// 修 改 人:小張
/// 修改內容:對方法……進行修改,修正故障BUG……。
/// 修改記錄2:
/// 修改日期:2004年3月20日
/// 版 本 號:V1.3
/// 修 改 人:小張
/// 修改內容:對方法……進行進一步改進,修正故障……。
/// </summary>
|
【規則3-5】公共方法前面應進行XML註釋,列出:函式的目的/功能、輸入引數、返回值等。 |
|
【規則3-6】保證程式碼和註釋的一致性。修改程式碼同時修改相應的註釋,不再有用的註釋要刪除。 |
【規則3-7】註釋應與其描述的程式碼相近,對程式碼的註釋應放在其上方或右方(對單條語句的註釋)相鄰位置,不可放在下面,如放於上方則需與其上面的程式碼用空行隔開。 |
說明:在使用縮寫時或之前,應對縮寫進行必要的說明。
正例:
如下書寫比較結構清晰
/* 獲得子系統索引 */
iSubSysIndex = aData[iIndex].iSysIndex;
/* 程式碼段1註釋 */
[ 程式碼段1 ]
/* 程式碼段2註釋 */
[ 程式碼段2 ]
反例1:
如下例子註釋與描述的程式碼相隔太遠。
/* 獲得子系統索引 */
iSubSysIndex = aData[iIndex].iSysIndex;
反例2:
如下例子註釋不應放在所描述的程式碼下面。
iSubSysIndex = aData[iIndex].iSysIndex;
/* 獲得子系統索引 */
反例3:
如下例子,顯得程式碼與註釋過於緊湊。
/* 程式碼段1註釋 */
[ 程式碼段1 ]
/* 程式碼段2註釋 */
[ 程式碼段2 ]
【規則3-8】註釋與所描述內容進行同樣的縮排。 |
說明:可使程式排版整齊,並方便註釋的閱讀與理解。
正例:
如下注釋結構比較清晰
int DoSomething(void)
{
/* 程式碼段1註釋 */
[ 程式碼段1 ]
/* 程式碼段2註釋 */
[ 程式碼段2 ]
}
反例:
如下例子,排版不整齊,閱讀不方便;
int DoSomething(void)
{
/* 程式碼段1註釋 */
[ 程式碼段1 ]
/* 程式碼段2註釋 */
[ 程式碼段2 ]
}
【規則3-9】對分支語句(條件分支、迴圈語句等)必須編寫註釋。 |
說明:這些語句往往是程式實現某一特殊功能的關鍵,對於維護人員來說,良好的註釋有助於更好的理解程式,有時甚至優於看設計文件。
〖建議3-10〗通過對函式或過程、變數、結構等正確的命名以及合理地組織程式碼結構,使程式碼成為自注釋的。 |
說明:清晰準確的函式、變數命名,可增加程式碼的可讀性,減少不必要的註釋。
〖建議3-11〗儘量避免在註釋中使用縮寫,特別是不常用縮寫。 |
說明:在使用縮寫時,應對縮寫進行必要的說明。
好的命名規則能極大地增加可讀性和可維護性。同時,對於一個有上百個人共同完成的大專案來說,統一命名約定也是一項必不可少的內容。本章對程式中的所有識別符號(包括名稱空間、變數名、常量名、控制元件名、引數名、屬性名、方法名、類名、介面等)的命名做出約定。
【規則4-1】識別符號要採用英文單詞或其組合,便於記憶和閱讀,切忌使用漢語拼音來命名。 |
說明:識別符號應當直觀且可以拼讀,可望文知義,避免使人產生誤解。程式中的英文單詞一般不要太複雜,用詞應當準確。
【規則4-2】識別符號只能由26個英文字母,10個數字,及下劃線的一個子集來組成,並嚴格禁止使用連續的下劃線,下劃線也不能出現在識別符號頭或結尾(預編譯開關除外)。 |
說明:這樣做的目的是為了使程式易讀。因為 variable_name 和 variable__name 很難區分,下劃線符號‘_’若出現在識別符號頭或結尾,容易與不帶下劃線‘_’的識別符號混淆。
【規則4-3】識別符號的命名應當符合“min-length && max-information”原則。 |
說明:較短的單詞可通過去掉“母音”形成縮寫,較長的單詞可取單詞的頭幾個字母形成縮寫,一些單詞有大家公認的縮寫,常用單詞的縮寫必須統一。協議中的單詞的縮寫與協議保持一致。對於某個系統使用的專用縮寫應該在某處做統一說明。
正例:如下單詞的縮寫能夠被大家認可:
temp 可縮寫為 tmp ;
flag 可縮寫為 flg ;
statistic 可縮寫為 stat ;
increment 可縮寫為 inc ;
message 可縮寫為 msg ;
規定的常用縮寫如下:
常用詞 |
縮寫 |
Argument |
Arg |
Buffer |
Buf |
Clear |
Clr |
Clock |
Clk |
Compare |
Cmp |
Configuration |
Cfg |
Context |
Ctx |
Delay |
Dly |
Device |
Dev |
Disable |
Dis |
Display |
Disp |
Enable |
En |
Error |
Err |
Function |
Fnct |
Hexadecimal |
Hex |
High Priority Task |
HPT |
I/O System |
IOS |
Initialize |
Init |
Mailbox |
Mbox |
Manager |
Mgr |
Maximum |
Max |
Message |
Msg |
Minimum |
Min |
Multiplex |
Mux |
Operating System |
OS |
Overflow |
Ovf |
Parameter |
Param |
Pointer |
Ptr |
Previous |
Prev |
Priority |
Prio |
Read |
Rd |
Ready |
Rdy |
Register |
Reg |
Schedule |
Sched |
Semaphore |
Sem |
Stack |
Stk |
Synchronize |
Sync |
Timer |
Tmr |
Trigger |
Trig |
Write |
Wr |
|
|
【規則4-4】程式中不要出現僅靠大小寫區分的相似的識別符號。 |
【規則4-5】用正確的反義片語命名具有互斥意義的變數或相反動作的函式等。 |
說明:下面是一些在軟體中常用的反義片語。
add/remove ; begin/end ; create/destroy ; insert/delete ;
first/last ; get/release ; 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
【規則4-6】常量名都要使用大寫字母, 用下劃線 ‘_’ 分割單詞。 |
正例:如 DISP_BUF_SIZE、MIN_VALUE、MAX_VALUE 等等。
相關推薦(轉)11條最全面的C/C++程式設計規範總結一、檔案排版方面 1. 包含標頭檔案 • 先系統標頭檔案,後用戶標頭檔案。 • 系統標頭檔案,穩定的目錄結構,應採用包含子路徑方式。 • 自定義標頭檔案,不穩定目錄結構,應在dsp中指定包含路徑。 • 系統標頭檔案應用:#include <xxx.h> • 自定義同 MISRA C - 嵌入式系統 C 程式設計規範MISRA C - 嵌入式系統 C 程式設計規範 MISRA C is a set of software development guidelines for the C programming language developed by MISRA (Motor Industry S C++ Coding Standard - C++ 程式設計規範C++ Coding Standard - C++ 程式設計規範 https://users.ece.cmu.edu/~eno/coding/CppCodingStandard.html Adapted from http://www.possibility.com/Cpp/CppCod 一張圖總結Google C++程式設計規範(Google C++ Style Guide)【轉】(轉自:https://blog.csdn.net/voidccc/article/details/37599203?utm_source=blogxgwz0) Google C++ Style Guide是一份不錯的C++編碼指南,我製作了一張比較全面的說明圖,可以在短時間內快速掌握規範的重點 C/C++程式設計規範1、函式註解 /*************************************************************************** * Function : ModbusTcpReadInputBits * Description: Creat socket C/C++程式設計規範整理一、基本準備工作 1、設計工程目錄結構 (1)基本原則: 【1】工程本身的檔案、專案編譯生成的中間檔案放一個資料夾; 【2】最終生成的目標檔案單獨放一個資料夾; 【3】如果有工程依賴的庫檔案等單獨放一個資料夾; 【4】使用者程式碼檔案放單獨一個資料夾,或者將標頭檔案和原始檔單 Google C++程式設計規範1 標頭檔案 1.1 #define的保護 有標頭檔案都應該使用#define防止標頭檔案被多重包含( multiple inclusion) ,命名格式應當是:<PROJECT>_<PATH>_<FILE>_H_。為保證唯 C程式設計規範C程式設計規範 一、命名 1、程式檔案命名:程式檔案命名要求具備模組縮寫,功能描述等資訊。採用每個單詞首字母大寫方式。 exzamp: Driver.c FontManage.c 2、函式命名 DataManageValueSet(int iValue); 3、結構體命 C++程式設計規範 8-24章第八章 常量 1.不要讓常量成員函式修改程式的狀態:不要修改成員、靜態成員、、全域性變數、其他物件。 第九章 過載 1.儘量避免過載宰模板型別上:可能存在二義性 第十章 操作符 1.區分作為成員函式和作為友元的操作符:operator+=()、operator=() C++程式設計規範 4-7章第4章 類的設計和宣告 1.提高類內聚合度 2.努力使類的介面少而完備 3.保持(不同)類的不同介面在實現原則上的一致性 4.避免為每個類成員提供訪問函式 5.不要在類定義時提供成員函式體 6.恰當選擇成員函式、全域性函式和友元函式 虛擬函式必為成員函式 C++程式設計規範 1-3章第1章 命名原則 1.型別名:每個英文單詞的第一個字母大寫,其他小寫,最後以_T結尾。 class PageCode_T { //... }; 原因: 防止與變數名衝突 使得型別名更加清晰 區分名字中各單詞也可以用下劃線 縮寫字當作普通字處理 《C++程式設計規範》技 術 文 件 技術檔名稱:編碼規範_C++ &n 《C# 程式設計規範》技 術 文 件 技術檔名稱:編碼規範 C/C++ 程式設計規範 試題一BOOL float 指標變數 與零值比較的if語句 1.寫出BOOL flag 指標變數與零值比較的if語句。 if(flag) if(!flag) 2 寫出float x與零值比價的if語 東軟C#程式設計規範C#程式設計規範 Version 2.0 目錄 第一章 概述 1 方便程式碼的交流和維護。 2 不影響編碼的效 google C++ 程式設計規範中的禁用複製建構函式和賦值運算子在google C++程式設計規範中有下面一段描述: 僅在程式碼中需要拷貝一個類物件的時候使用拷貝建構函式;不需要拷貝時應使用 DISALLOW_COPY_AND_ASSIGN。 定義:通過拷貝新建物件時可使用拷貝建構函式(特別是物件的傳值時)。 優點:拷貝建 C#程式設計規範大家好像都一個版本此處轉 http://tech.ddvip.com/2008-11/122794615696216.html http://tech.ddvip.com/2008-11/122794629896218.html 1. 簡介 3 C++程式設計規範之20:避免函式過長,避免巢狀過深摘要: 短勝於長,平勝於優,過長的函式和巢狀過深的程式碼塊的出現,經常是因為沒能賦予一個函式以一個緊湊的職責所致,這兩種情況通常都能夠通過更好的重構予以解決。 每個函式都應該顧其名而能知其義,易於理解的工作單元。如果於此相反,函式試圖將多個這樣的小概念合併到 C#程式設計規範 2C#書寫規範<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> 一、命名 對於理解應用程式的邏輯流,命名方案是最有影響力的一種幫助。名稱應該說明“什麼”而不是“ c語言程式設計規範和範例及寫給自己的C++程式設計規範1 排版 1 1-1:程式塊要採用縮排風格編寫,縮排的空格數為4個。 說明:對於由開發工具自動生成的程式碼可以有不一致。 1 1-2:相對獨立的程式塊之間、變數說明之後必須加空行。 示例:如下例子不符合規範。 if (!valid_ni(ni)) |