1. 程式人生 > >C# 編碼規範和程式設計好習慣

C# 編碼規範和程式設計好習慣

誰都會寫程式碼!幾個月的程式設計經驗可以讓你寫出“可執行應用程式”。讓它可執行容易,但是以最有效率的方式編碼就需要下更多的功夫!


要知道,大多數程式設計師在寫“可執行程式碼”,而不是“高效程式碼”。你想成為你們公司”最尊貴的專業人員“嗎?寫”高效程式碼“是一項藝術,你必須學習和實踐它。

命名慣例和規範

註記 :
Pascal 大小寫形式-所有單詞第一個字母大寫,其他字母小寫。
Camel 大小寫形式-除了第一個單詞,所有單詞第一個字母大寫,其他字母小寫。

類名使用Pascal 大小寫形式
public class HelloWorld{ ...}

方法使用Pascal 大小寫形式
public class HelloWorld{ void SayHello(string name) { ... }}


變數和方法引數使用Camel 大小寫形式

publicclass HelloWorld
int totalCount =0
void SayHello(string name) 
string fullMessage ="Hello "+ name; ... }
}
 

 
不要使用匈牙利方法來命名變數


以前,多數程式設計師喜歡它-把資料型別作為變數名的字首而m_作為成員變數的字首。例如:
string m_sName;int nAge;
然而,這種方式在.NET編碼規範中是不推薦的。所有變數都用camel 大小寫形式,而不是用資料型別和m_來作字首。


用有意義的,描述性的詞語來命名變數


- 別用縮寫。用name, address, salary等代替 nam, addr, sal
- 別使用單個字母的變數象i, n, x 等. 使用 index, temp等
用於迴圈迭代的變數例外:
for ( int i = 0; i < count; i++ ){ ...}
如果變數只用於迭代計數,沒有在迴圈的其他地方出現,許多人還是喜歡用單個字母的變數(i) ,而不是另外取名。
- 變數名中不使用下劃線 (_) 。
- 名稱空間需按照標準的模式命名


...

檔名要和類名匹配


例如,對於類HelloWorld, 相應的檔名應為 helloworld.cs (或, helloworld.vb)
縮排和間隔
縮排用 TAB . 不用 SPACES.。
註釋需和程式碼對齊.。
花括弧 ( {} ) 需和括號外的程式碼對齊.。
用一個空行來分開程式碼的邏輯分組。.

bool SayHello (string name) 
        

            
string fullMessage ="Hello "+ name;
            DateTime currentTime 
= DateTime.Now;
            
string message = fullMessage +", the time is : "+ currentTime.ToShortTimeString(); 
            MessageBox.Show ( message );
            
if ( ... ) 
            
// Do something 
            
// ... 
returnfalse
            }
returntrue
        }


這段程式碼看起來比上面的好::

bool SayHello ( string name )
        

            
string fullMessage ="Hello "+ name; DateTime currentTime = DateTime.Now; 
            
string message = fullMessage +", the time is : "+ currentTime.ToShortTimeString();
            MessageBox.Show ( message ); 
            
if ( ... ) {
            
// Do something 
            
// ...
returnfalse
            }
returntrue
        }


在一個類中,各個方法需用一空行,也只能是一行分開。
花括弧需獨立一行,而不象if, for 等可以跟括號在同一行。.
好:
if ( ... ) { // Do something }
不好:
if ( ... ) { // Do something }
在每個運算子和括號的前後都空一格。.


好:
if ( showResult == true ) { for ( int i = 0; i < 10; i++ ) { // } }
不好:
if(showResult==true) { for(int i= 0;i<10;i++) { // } }
良好的程式設計習慣


遵從以下良好的習慣以寫出好程式

避免使用大檔案。如果一個檔案裡的程式碼超過300~400行,必須考慮將程式碼分開到不同類中。
避免寫太長的方法。一個典型的方法程式碼在1~25行之間。如果一個方法發程式碼超過25行,應該考慮將其分解為不同的方法。
方法名需能看出它作什麼。別使用會引起誤解的名字。如果名字一目瞭然,就無需用文件來解釋方法的功能了。


好:
void SavePhoneNumber ( string phoneNumber ) { // Save the phone number. }


不好:
// This method will save the phone number.
void SaveData ( string phoneNumber ) { // Save the phone number. }
一個方法只完成一個任務。不要把多個任務組合到一個方法中,即使那些任務非常小。


好:
// Save the address.
SaveAddress ( address );
// Send an email to the supervisor to inform that the address is updated.
SendEmail ( address, email );
void SaveAddress ( string address )
{
// Save the address.
// ...
}
void SendEmail ( string address, string email )
{
// Send an email to inform the supervisor that the address is changed.
// ...
}


不好:
// Save address and send an email to the supervisor to inform that the address is updated.
SaveAddress ( address, email );
void SaveAddress ( string address, string email )
{
// Job 1.
// Save the address.
// ... //
Job 2.
// Send an email to inform the supervisor that the address is changed.
// ...
}
使用C# 或 VB.NET的特有型別,而不是System名稱空間中定義的別名型別。


好:
int age; string name; object contactInfo;


不好:
Int16 age; String name; Object contactInfo;
別在程式中使用固定數值,用常量代替。
別用字串常數。用資原始檔。
避免使用很多成員變數。宣告區域性變數,並傳遞給方法。不要在方法間共享成員變數。如果在幾個方法間共享一個成員變數,那就很難知道是哪個方法在什麼時候修改了它的值。
必要時使用enum 。別用數字或字串來指示離散值。
好:

enum MailType { Html, PlainText, Attachment } 
void SendMail (string message, MailType mailType) 
switch ( mailType ) 
case MailType.Html: // Do something break; 
case MailType.PlainText: // Do something break; 
case MailType.Attachment: // Do something break; 
default// Do something break; 
}
 
}

不好:

void SendMail (string message, string mailType) 
switch ( mailType )
 
case"Html"// Do something break; 
case"PlainText"// Do something break; 
case"Attachment"// Do something break; 
default// Do something break; 
}
 
}


別把成員變數宣告為 public 或 protected。都宣告為 private 而使用 public/protected 的Properties.
不在程式碼中使用具體的路徑和驅動器名。 使用相對路徑,並使路徑可程式設計。
永遠別設想你的程式碼是在“C:”盤執行。你不會知道,一些使用者在網路或“Z:”盤執行程式。
應用程式啟動時作些“自檢”並確保所需檔案和附件在指定的位置。必要時檢查資料庫連線。出現任何問題給使用者一個友好的提示。
如果需要的配置檔案找不到,應用程式需能自己建立使用預設值的一份。
如果在配置檔案中發現錯誤值,應用程式要丟擲錯誤,給出提示訊息告訴使用者正確值。
錯誤訊息需能幫助使用者解決問題。永遠別用象"應用程式出錯", "發現一個錯誤" 等錯誤訊息。而應給出象 "更新資料庫失敗。請確保登陸id和密碼正確。" 的具體訊息。
顯示錯誤訊息時,除了說哪裡錯了,還應提示使用者如何解決問題。不要用 象 "更新資料庫失敗。"這樣的,要提示使用者怎麼做:"更新資料庫失敗。請確保登陸id和密碼正確。"
顯示給使用者的訊息要簡短而友好。但要把所有可能的資訊都記錄下來,以助診斷問題。
註釋
別每行程式碼,每個宣告的變數都做註釋。
在需要的地方註釋。可讀性強的程式碼需要很少的註釋。如果所有的變數和方法的命名都很有意義,會使程式碼可讀性很強並無需太多註釋。
行數不多的註釋會使程式碼看起來優雅。但如果程式碼不清晰,可讀性差,那就糟糕。
如果應為某種原因使用了複雜艱澀的原理,為程式配備良好的文件和重分的註釋。
對一個數值變數採用不是0,-1等的數值初始化,給出選擇該值的理由。
簡言之,要寫清晰,可讀的程式碼以致無須什麼註釋就能理解。
對註釋做拼寫檢查,保證語法和標點符號的正確使用。


異常處理
不要“捕捉了異常卻什麼也不做“。如果隱藏了一個異常,你將永遠不知道異常到底發生了沒有。
發生異常時,給出友好的訊息給使用者,但要精確記錄錯誤的所有可能細節,包括髮生的時間,和相關方法,類名等。
只捕捉特定的異常,而不是一般的異常。


好:

void ReadFromFile ( string fileName ) 
try 

// read from file. 
}
 
catch (FileIOException ex) 

// log error. 
// re-throw exception depending on your case.
throw
}
 
}


不好:

void ReadFromFile ( string fileName )
 
try
// read from file. 
}
 
catch (FileIOException ex) 

// log error. 
// re-throw exception depending on your case. 
throw
}
 
}

不必在所有方法中捕捉一般異常。不管它,讓程式崩潰。這將幫助你在開發週期發現大多數的錯誤。
你可以用應用程式級(執行緒級)錯誤處理器處理所有一般的異常。遇到”以外的一般性錯誤“時,此錯誤處理器應該捕捉異常,給使用者提示訊息,在應用程式關閉或 使用者選擇”忽略並繼續“之前記錄錯誤資訊。
不必每個方法都用try-catch。當特定的異常可能發生時才使用。比如,當你寫檔案時,處理異常FileIOException.
別寫太大的 try-catch 模組。如果需要,為每個執行的任務編寫單獨的 try-catch 模組。 這將幫你找出哪一段程式碼產生異常,並給使用者發出特定的錯誤訊息
如果應用程式需要,可以編寫自己的異常類。自定義異常不應從基類SystemException派生,而要繼承於. IApplicationException。
 

相關推薦

C# 編碼規範程式設計習慣

誰都會寫程式碼!幾個月的程式設計經驗可以讓你寫出“可執行應用程式”。讓它可執行容易,但是以最有效率的方式編碼就需要下更多的功夫! 要知道,大多數程式設計師在寫“可執行程式碼”,而不是“高效程式碼”。你想成為你們公司”最尊貴的專業人員“嗎?寫”高效程式碼“是一項藝術,你必須學習

C++程式設計習慣

本文來自於朋友LJT的日常程式設計心得。 1.不要在建構函式中做初始化操作 要求類(尤其是對外介面類)提供Init()函式,在該函式中進行相關初始化操作,初始化失敗能夠返回錯誤碼。 可以規避問題: 建構函式中難以返回錯誤碼,外部呼叫者無從判斷初始化結果

C++編碼規範

c++ 編碼規範 C++編碼規範 編碼規範,說代碼質量重要組成部分,如何防止循環引用?防止每次都重新編譯.代碼修改的最小編譯。不僅僅是一個簡單的變量書寫格式,更多是函數參數應如何去指定,指針的使用應該如何去包含? 為什麽禁止使用缺省函數等等...c++編碼

C# 編碼規範

接口 可維護性 AD 十分 無需 遇到 代碼 必須 有一個 質量高的代碼關鍵之一是具有可維護性和可擴展性。 將面向對象設計,也就是解耦,融入於編碼之中。不要硬編碼,要讓你的代碼擴展起來十分方便。 今天我遇到了一個問題: 面向對象的ISP原則。 接口隔離原則,具體來說就是

11條最全面的C/C++編碼規範總結【轉】

(轉自:https://blog.csdn.net/zang141588761/article/details/50608736) 對於不同的程式語言來說,具體的編碼規範可以有很大的不同,但是其宗旨都是一致的,就是保證程式碼在高質量完成需求的同時具備良好的可讀性、可維護性。例如我們可以

C++程式碼規範CodeReview

C++程式碼規範和CodeReview 背景 最近手頭上的開發工作基本已經完成主要功能,其後續進行的工作主要在細小功能的調整和完善上,週末在家看書,想到了CodeReview,想把這件事在組內推廣下(其實CodeReview應該是在開發過程中進行的,現在提出,也是希望以後不要步此後

c++ 編碼規範

本人將編碼規範分為兩部分,一個是普通的編碼規範,另一部分為註釋規範,分別採用不同的風格。接下來將分別進行詳細介紹: 編碼規範之Google風格 Google的編碼規範非常優秀,全世界很多人都在採用,筆者也建議採用Google的編碼規範,本文附上Google的編碼規範網址: googl

嵌入式C編碼規範

0規範制定說明 0.1箴言 技術人員設計程式的首要目的是用於技術人員溝通和交流,其次才是用於機器執行。程式的生命力在於使用者使用,程式的成長在於後期的維護及根據使用者需求更新和升級功能。如果你的程式只能由你來維護,當你離開這個程式時,你的程式也和你一起離開了,這將給公司和後來接手的技術人員帶

C# 程式碼規範質量檢查工具 StyleCop.Analyzers

簡介 原來一直用 ReSharper 來進行程式碼質量檢查,不過畢竟是收費的,所以想找個免費的可以推廣給公司的同事也一起用。搜尋了一下,找到了StyleCop,但是我在 VS 2015裡安裝 StyleCop 或者通過 Nuget 包安裝 StyleCop.MSBuild,雖然編譯以後能把 warning

Mono 2.8釋出:C#4.0的效能

在社群很多人不看好的微軟.NET開源實現Mono釋出了Mono 2.8,這是一個重要的版本更新,有著顯著的改善,Mono 2.8包括C#4.0的支援(也是現在的預設配置),新一代的垃圾回收器,新的框架,LLVM的支援,目前被認為是穩定的,2.0版本的embedding API ,對OpenBSD的支援,移除了

這套C#編碼規範寫不錯

命名約定 我們在命名識別符號時(包括引數,常量,變數),應使用單詞的首字母大小寫來區分一個識別符號中的多個單詞,如UserName. PascalCasing PascalCasing包含一到多個單詞,每一個單詞第一個字母大寫,其餘字母均小寫。例如:HelloWorl

自己總結的C#編碼規範--2.命名選擇篇

上一篇文章講了識別符號命名的約定,今天講下識別符號命名的選擇。 簡單的講,看到一個識別符號一定要可以見名知意。 名字一定要能夠表達出識別符號的含意 識別符號名字必須要表達出該識別符號的意義,絕對不可以使用無意義的v1,v2…vn之類的命名。 public static void

自己總結的C#編碼規範--3.特定場景下的命名最佳實踐

特定場景下的命名最佳實踐 名稱空間 要使用PascalCasing,並用點號來分隔名字空間中的各個部分。 如Microsof.Office.PowerPoint 要用公司名作為名稱空間的字首,這樣就可以避免與另外一家公司使用相同的名字。 要用穩定的,與版本無關的產

自己總結的C#編碼規範--1.命名約定篇

命名約定 我們在命名識別符號時(包括引數,常量,變數),應使用單詞的首字母大小寫來區分一個識別符號中的多個單詞,如UserName. PascalCasing PascalCasing包含一到多個單詞,每一個單詞第一個字母大寫,其餘字母均小寫。例如:HelloWorld、SetN

聊聊HTML靜態頁面編碼規範前端程式碼重構

    彪悍的人生不需要解釋,彪悍的程式碼不需要註釋!作為程式猿,工作中我們都要涉及到與團隊合作,為了讓團隊合作的效率提高,我們在寫程式碼的時候都應該講究規範,比如註釋,html程式碼的嵌入規則,c

Kotlin 學習筆記(二) 編碼規範匯入包

編碼規範 無衝突的地方預設使用Java的編碼風格 使用駝峰法命名(並避免命名含有下劃線) 型別名以大寫字母開頭 方法和屬性以小寫字母開頭 使用 4 個空格縮排 公有函式應撰寫函式文件,這樣這些文件才會出現在 Kotlin Doc 中 冒號 型別和

C#編碼規範之代碼的增刪改約定

pre 支持 type cal group 一次 情況 delet 約定 C#編碼規範,代碼的增刪改約定: 增加 #region add by Tome 2018-9-20 //原因:描述 int a = GetScale(obj, col); #endregion

整理華為C/C++編碼規範

目  錄 1 排版 2 註釋 3 識別符號命名 4 可讀性 5 變數、結構 6 函式、過程 7 可測性 8 程式效率 9 質量保證 10 程式碼編輯、編譯、審查 11 程式碼測試、維護 12 巨集 1 排版 1-1:程式塊要採用縮排風格編寫,縮排的空格數為4個。 說明:對於

Java命名規範程式設計風格

一 命名規範 1.包的命名 a 小寫單片語成 b 加上惟一的字首。一般採用自己在網際網路上的域名作為自己程式包的惟一字首。 c 格式 “com.公司名.專案名.模組名....” e.g:net.frontfree.javagroup 附: indi:個體專

Unity C#編碼規範

1、指令碼的主題、功能、建立者、修改者說明如下所示 其中:Author為指令碼建立者,需要自己修改為自己的名字大寫,比如小明建立了一個名為Ctrl_TrayMove的指令碼,則Author:XM; 如果小李修改小明建立的Ctrl_TrayMove指令碼,則Modify