標籤: 未分類程序員
Pascal 大小寫算法
將標識符的首字母和後面鏈接的每一個單詞的首字母都大寫。能夠對三字符或更多字符的標識符使用Pascal 大小寫。例:編程
BackColor
框架
Camel 大小寫編輯器
標識符的首字母小寫,而每一個後面鏈接的單詞的首字母都大寫。例:ide
backColor
工具
匈牙利命名法oop
匈牙利命名法是一名匈牙利程序員發明的,並且他在微軟工做了多年。此命名法就是經過微軟的各類產品和文檔傳出來的。多數有經驗的程序員,無論他們用的是哪門兒語言,都或多或少在使用它。性能
這種命名法的基本原則是:開發工具
變量名=屬性+類型+對象描述
即一個變量名是由三部分信息組成,這樣,程序員很容易理解變量的類型、用途,並且便於記憶。
下邊是一些推薦使用的規則例子,你能夠挑選使用,也能夠根據我的喜愛做些修改再用之。
類成員變量: m_
無符號: u
窗口: Wnd
下邊舉例說明:
代碼列寬控制在120字符左右。
當表達式超出或即將超出規定的列寬,遵循如下規則進行換行
當以上規則會致使代碼混亂的時候本身採起更靈活的換行規則。
縮進應該是每行一個Tab(4個空格),不要在代碼中使用Tab字符。
Visual Studio 設置:工具->選項->文本編輯器->C#->製表符->插入空格,製表符大小=4,縮進大小=4
空行是爲了將邏輯上相關聯的代碼分塊,以便提升代碼的可閱讀性。
在如下狀況下使用兩個空行
在如下狀況下使用一個空行
在如下狀況中要使用到空格
while (true)
注意在方法名和左括符 「(」 之間不要使用空格,這樣有助於辨認代碼中的方法調用與關鍵字。
a += c + d; a = (a + b)/(c*d); while (d++ == s++) { n++; } PrintSize("size is " + size + "\n");
for (expr1; expr2; expr3)
if (condition) { } public int Add(int x, int y) { }
if (somevalue == 1) { somevalue = 2; }
while(1) { if(valid) { } // if valid else { } // not valid } // end forever
namespace SCB.Framework.Web { } // namespace SCB.Framework.Web
該類註釋採用.Net已定義好的Xml標籤來標記,在聲明接口、類、方法、屬性、字段都應該使用該類註釋,以便代碼完成後直接生成代碼文檔,讓別人更好的瞭解代碼的實現和接口。如
/// <summary> MyMethod is a method in the MyClass class. /// <para> Here's how you could make a second paragraph in a description. /// <see cref="System.Console.WriteLine"/> /// for information about output statements. /// </para> /// <seealso cref="MyClass.Main"/> /// </summary> public static void MyMethod(int Int1) { }
註釋標籤的使用請參考:http://msdn.microsoft.com/zh-cn/library/5ast78ax.aspx
該類註釋用於
用法
/* 動態路由算法使用Round-robin算法,原理是... */
該類註釋用於
// // 註釋語句 // private int number; 或 // 註釋語句 private int number;
if (1 == 1) // always true { statement; } // always true
一行只建議做一個聲明,並按字母順序排列。如:
int level; // 推薦 int size; // 推薦 int x, y; // 不推薦
建議在變量聲明時就對其作初始化。
變量建議置於塊的開始處,不要老是在第一次使用它們的地方作聲明。如:
void MyMethod() { int int1 = 0; if (condition) { int int2 = 0; ... } }
例外狀況
for (int i = 0; i < maxLoops; i++) { ... }
應避免不一樣層次間的變量重名,如:
int count; ... void MyMethod() { if (condition) { int count = 0; // 避免 ... } ... }
不要使用是 public 或 protected 的實例字段。若是避免將字段直接公開給開發人員,能夠更輕鬆地對類進行版本控制,緣由是在維護二進制兼容性時字段不能被更改成屬性。考慮爲字段提供 get 和set 屬性訪問器,而不是使它們成爲公共的。 get 和 set 屬性訪問器中可執行代碼的存在使得能夠進行後續改進,如在使用屬性或者獲得屬性更改通知時根據須要建立對象。下面的代碼示例闡釋帶有 get 和 set 屬性訪問器的私有實例字段的正確使用。例:
public class Control: Component { private int handle; public int Handle { get { return handle; } } }
名稱應該說明「什麼」而不是「如何」。經過避免使用公開基礎實現(它們會發生改變)的名稱,能夠保留簡化複雜性的抽象層。例如,可使用
GetNextStudent()
,而不是GetNextArrayElement
()。
命名原則是:
選擇正確名稱時的困難可能代表須要進一步分析或定義項的目的。使名稱足夠長以便有必定的意義,而且足夠短以免冗長。惟一名稱在編程上僅用於將各項區分開。表現力強的名稱是爲了幫助人們閱讀;所以,提供人們能夠理解的名稱是有意義的。不過,請確保選擇的名稱符合適用語言的規則和標準。
如下幾點是推薦的命名方法:
AnalyzeThis()
,或者屬性名 xxK8
。這樣的名稱會致使多義性。Book.BookTitle
。而是應該使用 Book.Title
。(Avg、Sum、Min、Max、Index)
。min/max、begin/end
和 open/close
。Is
,這意味着 Yes/No
或 True/False
值,如 fileIsFound
。Flag
的術語。狀態變量不一樣於布爾變量的地方是它能夠具備兩個以上的可能值。不是使用 documentFlag
,而是使用更具描述性的名稱,如 documentFormatType
。for (int i = 1; i < 7; i++)
。而是使用命名常數,如 for (int i = 1; i < NUM_DAYS_IN_WEEK; i++)
以便於維護和理解。大寫
System.IO System.Web.UI SCB.Framework.UI
下表彙總了大寫規則,並提供了不一樣類型的標識符的示例。
標識符 | 大小寫 | 示例 |
---|---|---|
類 | Pascal | AppDomain |
枚舉類型 | Pascal | ErrorLevel |
枚舉值 | Pascal | FatalError |
事件 | Pascal | ValueChange |
異常類 | Pascal | WebException 注意: 老是以 Exception 後綴結尾。 |
只讀的靜態字段 | Pascal | RedValue |
接口 | Pascal | IDisposable 注意: 老是以 I 前綴開始。 |
方法 | Pascal | ToString |
命名空間 | Pascal | System.Drawing |
屬性 | Pascal | BackColor |
公共實例字段 | Pascal | RedValue 注意: 應優先使用屬性。 |
受保護的實例字段 | Camel | redValue 注意: 應優先使用屬性。 |
私有的實例字段 | Camel | redValue |
參數 | Camel | typeName |
方法內的變量 | Camel | backColor |
爲了不混淆和保證跨語言交互操做,請遵循有關區縮寫的使用的下列規則:
GetWindow
,而不要使用 GetWin
。UI
做爲 User Interface
縮OLAP
做爲 On-line Analytical Processing
的縮寫。HtmlButton
或 HTMLButton
;可是,應當大寫僅有兩個字符的縮寫,如:System.IO
,而不是 System.Io
。CompanyName.TechnologyName[.Feature][.Design]
例如:
namespace SCB.SupplierChain // 賽酷比公司的供應鏈系統 namespace SCB.SupplierChain.DataRules // 賽酷比公司的供應鏈系統的業務規則模塊
TechnologyName
指的是該項目的英文縮寫或軟件名。Debug
後,就不要再使用Debug
做爲一個名稱空間名。URL
、HTML
FileStream
,而不是CFileStream
。IdentityStore
是適當的。在適當的地方,使用複合單詞命名派生的類。派生類名稱的第二個部分應當是基類的名稱。例如,ApplicationException
對於從名爲 Exception
的類派生的類是適當的名稱,緣由ApplicationException
是一種Exception
。請在應用該規則時進行合理的判斷。例如,Button
對於從 Control
派生的類是適當的名稱。儘管按鈕是一種控件,可是將 Control
做爲類名稱的一部分將使名稱沒必要要地加長。public class FileStream public class Button public class String
IComponent
使用描述性名詞ICustomAttributeProvider
使用名詞短語IPersistable
使用形容詞。public interface IServiceProvider public interface IFormatable
如下代碼示例闡釋如何定義 IComponent 接口及其標準實現 Component 類。
public interface IComponent { // Implementation code goes here. } public class Component: IComponent { // Implementation code goes here. }
應該老是將後綴 Attribute 添加到自定義屬性類。例:
public class ObsoleteAttribute { }
枚舉 (Enum) 值類型從 Enum 類繼承。
FlagsAttribute
添加到位域 Enum 類型。Type GetType(string typeName) string Format(string format, object args)
RemoveAll() GetCharArray() Invoke()
Color
的屬性,則屬public class SampleClass { public Color BackColor { // Code for Get and Set accessors goes here. } }
如下代碼示例闡釋提供其名稱與類型相同的屬性。
public enum Color { // Insert code for Enum here. } public class Control { public Color Color { get { // Insert code here. } set { // Insert code here. } } }
EventHandler
後綴。sender
和 e
的參數。sender
參數表示引起事件的對象。sender
參數始object
類型的,即便在可使用更爲特定的類型時也如此。與事件相關聯的狀態封裝e
的事件類的實例中。對 e
參數類型使用適當而特定的事件類。EventArgs
後綴命名事件參數類。Close
事件應當具備 Closing
事件和 Closed
事件。不要使用BeforeXxx/AfterXxx
命名模式。Close
,而不要使用 OnClose
。OnXxx
)。此方法只應具備事件參數 e
,由於發送方老是類型的實例。public delegate void MouseEventHandler(object sender, MouseEventArgs e); public class MouseEventArgs : EventArgs { int x; int y; public MouseEventArgs(int x, int y) { this.x = x; this.y = y; } public int X { get { return x; } } public int Y { get { return y; } } }
全部單詞大寫,多個單詞之間用 "_" 隔開。 如:
public const string PAGE_TITLE = "Welcome";
class SampleClass { string url; string destinationUrl; }
g_
或 s_
前綴是不正確的。public struct Color { public static readonly Color Red = new Color(0x0000FF); public Color(int rgb) { // Insert code here. } public Color(byte r, byte g, byte b) { // Insert code here. } public byte RedValue { get { return Color; } } }
集合是一組組合在一塊兒的相似的類型化對象,如哈希表、查詢、堆棧、字典和列表,集合的命名建議用複數。
避免使用與經常使用的 .NET 框架命名空間重複的類名稱。例如,不要將如下任何名稱用做類名稱:System、Collections、Forms 或 UI。有關 .NET 框架命名空間的列表,請參閱類庫。
另外,避免使用與C#語言關鍵字衝突的標識符。
每行最多包含一個語句。如:
a++; // 推薦 b--; // 推薦 a++; b--; // 不推薦
複合語句是指包含"父語句{子語句;子語句;}"的語句,使用複合語句應遵循如下幾點
while(d += s++) { n++; }
return語句中不使用括號,除非它能使返回值更加清晰。如:
return; return myDisk.size(); return (size ? size : defaultSize);
if、 if-else、if else-if 語句使用格式
if (condition) { statements; } if (condition) { statements; } else { statements; } if (condition) { statements; } else if (condition) { statements; } else { statements; }
for 語句使用格式
for (initialization; condition; update) { statements; }
空的 for 語句(全部的操做都在initialization
、condition
或 update
中實現)使用格式
for (initialization; condition; update); // update user id
foreach 語句使用格式
foreach (object obj in array) { statements; }
注意
while 語句使用格式
while (condition) { statements; }
空的 while 語句使用格式
while (condition);
do - while 語句使用格式
do { statements; } while (condition);
switch - case語句使用格式
switch (condition) { case 1: statements; break; case 2: statements; break; default: statements; break; }
注意:
try - catch語句使用格式
try { statements; } catch (ExceptionClass e) { statements; } finally { statements; }
using 塊語句使用格式
using (object) { statements; }
控件名簡寫+英文描述,英文描述首字母大寫