C#編程規(guī)范

標(biāo)簽: C# 編程規(guī)范


命名規(guī)約

  • 【強制】代碼中的命名均不能以下劃線或美元符號開始,也不能以下劃線或美元符號結(jié)束。
  • 【強制】代碼中的命名嚴(yán)禁使用拼音與英文混合的方式,更不允許直接使用中文的方式。
  • 【強制】類名方法名屬性枚舉名接口名委托事件命名空間,使用UpperCamelCase風(fēng)格,必須遵從駝峰形式。通用縮寫除外,如BO
  • 【強制】參數(shù)名成員變量局部變量都統(tǒng)一使用lowerCamelCase 風(fēng)格,必須遵從駝峰形式。如localValue
  • 【強制】常量命名全部大寫,單詞間用下劃線隔開,力求語義表達完整清楚,不要嫌名字長。如MAX_STOCK_COUNT
  • 【強制】抽象類命名使用AbstractBase開頭;異常類命名使用Exception結(jié)尾;測試類命名以它要測試的類的名稱開始,以Test 結(jié)尾。
  • 【強制】杜絕完全不規(guī)范的縮寫,避免望文不知義。AbstractClass縮寫命名成AbsClasscondition縮寫命名成condi,此類隨意縮寫嚴(yán)重降低了代碼的可閱讀性。
  • 【推薦】如果使用到了設(shè)計模式,建議在類名中體現(xiàn)出具體模式。如public class OrderFactory;

格式規(guī)約

  • 【強制】大括號的使用約定。如果是大括號內(nèi)為空,則簡潔地寫成{}即可,不需要換行;如果是非空代碼塊則兩個半括號都另起一行和類首對齊。
  • 【強制】左小括號和右邊相鄰字符之間不出現(xiàn)空格;同樣,右小括號和左邊相鄰字符之間也不出現(xiàn)空格。
  • 【強制】if/for/while/switch/do等保留字與小括號之間都必須加空格。
  • 【強制】任何運算符左右必須加一個空格。
  • 【強制】縮進采用4個空格,禁止使用tab字符。或者在設(shè)置里面把tab設(shè)置為四個空格
  • 【強制】單行字符數(shù)限制不超過120個,超出需要換行,換行時遵循如下原則:
    1) 第二行相對第一行縮進4個空格,從第三行開始,不再繼續(xù)縮進,參考示例。
    2) 運算符與下文一起換行。
    3) 方法調(diào)用的點符號與下文一起換行。
    4) 在多個參數(shù)超長,逗號后進行換行。
    5) 在括號前不要換行。
  • 【強制】方法參數(shù)在定義和傳入時,多個參數(shù)逗號后邊必須加空格。
  • 【強制】IDE 的text file encoding設(shè)置為UTF-8;IDE中文件的換行符使用Unix格式,不要使用windows格式。
  • 【推薦】沒有必要增加若干空格來使某一行的字符與上一行的相應(yīng)字符對齊。
  • 【推薦】方法體內(nèi)的執(zhí)行語句組、變量的定義語句組、不同的業(yè)務(wù)邏輯之間或者不同的語義之間插入一個空行。相同業(yè)務(wù)邏輯和語義之間不需要插入空行。

OOP 規(guī)約

  • 【強制】避免通過一個類的對象引用訪問此類的靜態(tài)變量或靜態(tài)方法,無謂增加編譯器解析成本,直接用類名來訪問即可。
  • 【強制】所有的相同類型的包裝類對象之間值的比較,全部使用Equals方法比較。
  • 【強制】構(gòu)造方法里面禁止加入任何業(yè)務(wù)邏輯,如果有初始化邏輯,請放在Init方法中。。
  • 【推薦】使用索引訪問用String的Split方法得到的數(shù)組時,需做最后一個分隔符后有無內(nèi)容的檢查,否則會有拋IndexOutOfBoundsException的風(fēng)險。
  • 【推薦】當(dāng)一個類有多個構(gòu)造方法,或者多個同名方法,這些方法應(yīng)該按順序放置在一起,便于閱讀。
  • 【推薦】 類內(nèi)方法定義順序依次是:公有方法或保護方法 > 屬性 > 私有方法
  • 【推薦】循環(huán)體內(nèi),字符串的連接方式,使用StringBuilder的append方法進行擴展。
  • 【推薦】類成員與方法訪問控制從嚴(yán)
    1) 如果不允許外部直接通過new來創(chuàng)建對象,那么構(gòu)造方法必須是private。
    2) 工具類不允許有public或default構(gòu)造方法。
    3) 類非static成員變量并且與子類共享,必須是protected。
    4) 類非static成員變量并且僅在本類使用,必須是private。
    5) 類static成員變量如果僅在本類使用,必須是private。
    6) 若是static成員變量,必須考慮是否為final。
    7) 類成員方法只供類內(nèi)部調(diào)用,必須是private。
    8) 類成員方法只對繼承類公開,那么限制為protected。

控制語句

  • 【強制】在一個switch塊內(nèi),每個case要么通過break/return等來終止,要么注釋說明程序?qū)⒗^續(xù)執(zhí)行到哪一個case為止;在一個switch塊內(nèi),都必須包含一個default語句并且放在最后,即使它什么代碼也沒有。
  • if/else/for/while/do語句中必須使用大括號。即使只有一行代碼,避免使用單行的形式
  • 【推薦】表達異常的分支時,少用if-else方式,這種方式可以改寫成:
if (condition) 
{
    ...
    return obj;
}
// 接著寫else的業(yè)務(wù)邏輯代碼;
  • 【推薦】除常用方法(如getXxx/isXxx)等外,不要在條件判斷中執(zhí)行其它復(fù)雜的語句,將復(fù)雜邏輯判斷的結(jié)果賦值給一個有意義的布爾變量名,以提高可讀性。
  • 【推薦】循環(huán)體中的語句要考量性能,以下操作盡量移至循環(huán)體外處理,如定義對象、變量、獲取數(shù)據(jù)庫連接,進行不必要的try-catch操作(這個try-catch是否可以移至循環(huán)體外)。
  • 【參考】下列情形,需要進行參數(shù)校驗
    1) 調(diào)用頻次低的方法。
    2) 執(zhí)行時間開銷很大的方法。此情形中,參數(shù)校驗時間幾乎可以忽略不計,但如果因為參數(shù)錯誤導(dǎo)致中間執(zhí)行回退,或者錯誤,那得不償失。
    3) 需要極高穩(wěn)定性和可用性的方法。
    4) 對外提供的開放接口,不管是RPC/API/HTTP接口。
    5) 敏感權(quán)限入口。
  • 【參考】下列情形,不需要進行參數(shù)校驗:
    1) 極有可能被循環(huán)調(diào)用的方法。但在方法說明里必須注明外部參數(shù)檢查要求。
    2) 底層調(diào)用頻度比較高的方法。
    3) 被聲明成private只會被自己代碼所調(diào)用的方法,如果能夠確定調(diào)用方法的代碼傳入?yún)?shù)已經(jīng)做過檢查或者肯定不會有問題,此時可以不校驗參數(shù)。

注釋規(guī)約

  • 【強制】所有的類都必須添加創(chuàng)建者和創(chuàng)建日期。
  • 【強制】方法內(nèi)部單行注釋,在被注釋語句上方另起一行,使用//注釋。方法內(nèi)部多行注釋使用/* */注釋,注意與代碼對齊。
  • 【強制】所有的枚舉類型字段必須要有注釋,說明每個數(shù)據(jù)項的用途。
  • 【推薦】代碼修改的同時,注釋也要進行相應(yīng)的修改,尤其是參數(shù)、返回值、異常、核心邏輯等的修改。
  • 【參考】合理處理注釋掉的代碼。盡量在目標(biāo)代碼上方詳細說明,而不是簡單的注釋掉。如果無用,則直接刪除
  • 【參考】對于注釋的要求:
    第一、能夠準(zhǔn)確反應(yīng)設(shè)計思想和代碼邏輯;
    第二、能夠描述業(yè)務(wù)含義,使別的程序員能夠迅速了解到代碼背后的信息。完全沒有注釋的大段代碼對于閱讀者形同天書,注釋是給自己看的,即使隔很長時間,也能清晰理解當(dāng)時的思路;注釋也是給繼任者看的,使其能夠快速接替自己的工作。
  • 【參考】好的命名、代碼結(jié)構(gòu)是自解釋的,注釋力求精簡準(zhǔn)確、表達到位。避免出現(xiàn)注釋的一個極端:過多過濫的注釋,代碼的邏輯一旦修改,修改注釋是相當(dāng)大的負(fù)擔(dān)。

參考資料

[1] 阿里巴巴java開發(fā)手冊
[2] C#標(biāo)準(zhǔn)命名規(guī)范

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,527評論 6 544
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,687評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,640評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,957評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 72,682評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 56,011評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,009評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 43,183評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,714評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 41,435評論 3 359
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,665評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,148評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,838評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,251評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,588評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,379評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 48,627評論 2 380

推薦閱讀更多精彩內(nèi)容