在寫程序時,我們會經常使用變量,既然要使用,就要給變量起相應的名字,其實我們寫程序,說白了就是為了賺錢(至少我這么認為,因為我的溫飽問題都難以解決),這也就要求了我們寫好的程序不僅僅自己能讀懂,還要讓別人讀懂,這就要求我們對變量起名字時有一個規范.
hungarian(匈牙利命名)法就是目前比較流行的一種規范.用這種方法命名的變量顯示了其數據類型。
匈牙利命名法有兩種:
系統匈牙利命名法(前綴代表了變量的實際數據類型)和匈牙利應用命名法(不表示實際數據類型,而是給出了變量目的的提示,或者說它代表了什么)。
在這種命名方法中,一個變量名有一個或多個小寫字母開頭,這些字母有助於記憶變量的類型與用處,緊跟着就是程序員選擇的任何名稱.這個后半個部分的首字母可以大寫以區別前面的類型指示符,即駝峰式大小寫:
當變量名或函數名由兩個或多個單詞連接到一起,而構成唯一的標識符時,單詞之間不用空格(如hello world).連接線(hello-world)和下划線(hello_world)連接,它有兩種格式:小駝峰式命名法和大駝峰式命名法.
小駝峰式命名法:第一個單詞以小寫字母開始,第二個單詞以大寫字母開始.如helloWorld.
大駝峰式命名法:每一個單詞的首字母都以大寫開始.如HelloWorld.(Pascal命名法).
然而,我這里要說的是,雖然匈牙利命名法很流行,但大家還是不要使用的好,一切遵循微軟的要求最好,
通用命名約定討論的是如何為庫元素選擇最適當的名稱。這些准則適用於所有標識符。后面各節討論特定元素(如命名空間或屬性)的命名。

請選擇易讀的標識符名稱。例如,英文屬性名稱 HorizontalAlignment 比 AlignmentHorizontal 更具可讀性。
可讀性比簡潔性更重要。屬性名稱 CanScrollHorizontally 比 ScrollableX(指 X 軸,但意義不明確)更好。
許多命名約定都與標識符的大小寫有關。值得注意的是,公共語言運行庫 (CLR) 支持區分大小寫和不區分大小寫的語言。本主題中描述的大小寫約定可幫助開發人員理解和使用庫。
下列術語描述了標識符的不同大小寫形式。
Pascal 大小寫
將標識符的首字母和后面連接的每個單詞的首字母都大寫。可以對三字符或更多字符的標識符使用 Pascal 大小寫。例如:
BackColor
大小寫混合
標識符的首字母小寫,而每個后面連接的單詞的首字母都大寫。例如:
backColor
大寫
標識符中的所有字母都大寫。例如:
IO
如果標識符由多個單詞組成,請不要在各單詞之間使用分隔符,如下划線(“_”)或連字符(“-”)等。而應使用大小寫來指示每個單詞的開頭。
下列准則是用於標識符的通用規則。
對於由多個單詞組成的所有公共成員、類型及命名空間名稱,要使用 Pascal 大小寫。
注意,這條規則不適用於實例字段。由於成員設計准則中詳細說明的原因,不應使用公共實例字段。
對參數名稱使用大小寫混合。
下表匯總了標識符的大小寫規則,並提供了不同類型標識符的示例。
標識符 |
大小寫方式 |
示例 |
---|---|---|
類 |
Pascal |
AppDomain |
枚舉類型 |
Pascal |
ErrorLevel |
枚舉值 |
Pascal |
FatalError |
事件 |
Pascal |
ValueChanged |
異常類 |
Pascal |
WebException |
只讀的靜態字段 |
Pascal |
RedValue |
接口 |
Pascal |
IDisposable |
方法 |
Pascal |
ToString |
命名空間 |
Pascal |
System.Drawing |
參數 |
Camel |
typeName |
屬性 |
Pascal |
BackColor |
首字母縮寫詞是由術語或短語中各單詞的首字母構成的單詞。例如,HTML 是 Hypertext Markup Language 的首字母縮寫。只有在公眾廣為認知和理解的情況下,才應在標識符中使用首字母縮寫詞。首字母縮寫詞不同於縮寫詞,因為縮寫詞是一個單詞的縮寫。例如,ID 是 identifier 的縮寫。通常情況下,庫名不應使用縮寫詞。
![]() |
---|
可在標識符中使用的兩個縮寫詞是 ID 和 OK。在采用 Pascal 大小寫格式的標識符中,這兩個縮寫詞的大小寫形式應分別為 Id 和 Ok。如果在采用大小寫混合格式的標識符中將這兩個縮寫詞用作首個單詞,則它們的大小寫形式應分別為 id 和 ok。 |
首字母縮寫詞的大小寫取決於首字母縮寫詞的長度。所有首字母縮寫詞應至少包含兩個字符。為了便於這些准則的實施,如果某一首字母縮寫詞恰好包含兩個字符,則將其視為短型首字母縮寫詞。包含三個或三個以上字符的首字母縮寫詞為長型首字母縮寫詞。
下列准則為短型和長型首字母縮寫詞指定了正確的大小寫規則。標識符大小寫規則優先於首字母縮寫詞大小寫規則。
兩字符首字母縮寫詞的兩個字符都要大寫,但當首字母縮寫詞作為大小寫混合格式的標識符的首個單詞時例外。
例如,名為 DBRate 的屬性是一個采用 Pascal 大小寫格式的標識符,它使用短型首字母縮寫詞 (DB) 作為首個單詞。又如,名為 ioChannel 的參數是一個采用大小寫混合格式的標識符,它使用短型首字母縮寫詞 (IO) 作為首個單詞。
包含三個或三個以上字符的首字母縮寫詞只有第一個字符大寫,但當首字母縮寫詞作為大小寫混合格式的標識符的首個單詞時例外。
例如,名為 XmlWriter 的類是一個采用 Pascal 大小寫格式的標識符,它使用長型首字母縮寫詞作為首個單詞。又如,名為 htmlReader 的參數是一個采用大小寫混合格式的標識符,它使用長型首字母縮寫詞作為首個單詞。
如果任何首字母縮寫詞位於采用大小寫混合格式的標識符開頭,則無論該首字母縮寫詞的長度如何,都不大寫其中的任何字符。
例如,名為 xmlStream 的參數是一個采用大小寫混合格式的標識符,它使用長型首字母縮寫詞 (xml) 作為首個單詞。又如,名為 dbServerName 的參數是一個采用大小寫混合格式的標識符,它使用短型首字母縮寫詞 (db) 作為首個單詞。

不要將所謂的緊湊格式復合詞中的每個單詞都大寫。這種復合詞是指寫作一個單詞的復合詞,如“endpoint”。
例如,hashtable 是一個緊湊格式的復合詞,應將其視為一個單詞並相應地確定大小寫。如果采用 Pascal 大小寫格式,則該復合詞為 Hashtable;如果采用大小寫混合格式,則該復合詞為 hashtable。若要確定某個單詞是否是緊湊格式的復合詞,請查閱最新的詞典。
下表列出了不是緊湊格式復合詞的一些常用術語。術語先以 Pascal 大小寫格式顯示,后面的括號中的是其大小寫混合格式。
-
BitFlag (bitFlag)
-
FileName (fileName)
-
LogOff (logOff)
-
LogOn (logOn)
-
SignIn (signIn)
-
SignOut (signOut)
-
UserName (userName)
-
WhiteSpace (whiteSpace)
大小寫准則只是為了使標識符更易於閱讀和辨認。不能將大小寫規則用作避免庫元素之間的命名沖突的手段。
不要假定所有編程語言都區分大小寫。事實並非如此。不能僅憑大小寫區分名稱。
不要使用下划線、連字符或任何其他非字母數字字符。
不要使用匈牙利表示法。
匈牙利表示法是在標識符中使用一個前綴對參數的某些元數據進行編碼,如標識符的數據類型。
避免使用與常用編程語言的關鍵字沖突的標識符。
雖然符合 CLS 的語言必須提供將關鍵字用作普通字的方法,最佳做法不要求強制開發人員了解如何實現。對於大多數編程語言,語言參考文檔都會提供語言所使用的關鍵字列表。下表提供了某些常用編程語言的參考文檔的鏈接。
語言 |
鏈接 |
---|---|
C# |
|
C++ |
|
Visual Basic |

通常,不應使用縮寫或首字母縮寫詞。這類名稱的可讀性較差。同樣,要確定某個首字母縮寫詞是否已受到廣泛認可也是很困難的。
有關縮寫的大小寫規則,請參見首字母縮寫詞的大小寫規則。
不要將縮寫或縮略形式用作標識符名稱的組成部分。
例如,使用 OnButtonClick 而不要使用 OnBtnClick。
除非必要,不要使用任何未被廣泛接受的首字母縮寫詞。

對於類型名稱,應使用語義上有意義的名稱而不要使用語言特定的關鍵字。例如,名稱 GetLength 比 GetInt 更好。
在標識符的語義含義僅限於其類型的極少數情況下,應使用一般公共語言運行時 (CLR) 類型名稱,而不要使用語言特定的名稱。
例如,將數據轉換為 Int16 的方法應命名為 ToInt16 而不是 ToShort,因為 Short 是 Int16 的語言特定的類型名稱。
下表顯示的是公共編程語言和 CLR 的相應語言特定的類型名稱。
C# 類型名稱 |
Visual Basic 類型名稱 |
JScript 類型名稱 |
Visual C++ 類型名稱 |
Ilasm.exe 表示形式 |
CLR 類型名稱 |
---|---|---|---|---|---|
sbyte |
SByte |
sByte |
char |
int8 |
SByte |
byte |
Byte |
byte |
unsigned char |
unsigned int8 |
Byte |
short |
Short |
short |
short |
int16 |
Int16 |
ushort |
UInt16 |
ushort |
unsigned short |
unsigned int16 |
UInt16 |
int |
Integer |
int |
int |
int32 |
Int32 |
uint |
UInt32 |
uint |
unsigned int |
unsigned int32 |
UInt32 |
long |
Long |
long |
__int64 |
int64 |
Int64 |
ulong |
UInt64 |
ulong |
unsigned __int64 |
unsigned int64 |
UInt64 |
float |
Single |
float |
float |
float32 |
Single |
double |
Double |
double |
double |
float64 |
Double |
bool |
Boolean |
boolean |
bool |
bool |
Boolean |
char |
Char |
char |
wchar_t |
char |
Char |
string |
string |
string |
string |
string |
string |
object |
Object |
object |
Object |
object |
Object |
在標識符沒有語義含義且參數的類型不重要的極少數情況下,應使用通用名稱(如值或項),而不要重復類型名稱。