-
特定場景下的命名最佳實踐
-
名稱空間
-
要使用PascalCasing,並用點號來分隔名字空間中的各個部分。
如Microsof.Office.PowerPoint
- 要用公司名作為名稱空間的字首,這樣就可以避免與另外一家公司使用相同的名字。
- 要用穩定的,與版本無關的產品名稱作為名稱空間的第二層
- 不要使用公司的組織架構來決定名稱空間的層次結構,因為內部組織結構經常改變。
-
不要用相同的名字來命名名稱空間和該空間內的型別。
例如,不要先將名稱空間命名為Debug,然後又在該空間中提供Debug類。大部分編譯器包括VS要求使用者在這樣的型別前加上完整的限定符。
-
要讓介面的名字以字母I開頭
-
如IComponet,IDisposable 大家一看就知道是介面。
同時要確保如果一個類是一個介面的標準實現,那麼這個類和介面應該只差一個"I"字首。
-
派生類的末尾使用基類名稱
例如,從 Stream 繼承的 Framework 型別以 Stream 結尾,從 Exception 繼承的型別以 Exception 結尾。
-
泛型型別引數的命名
-
使用描述性的名字來命名泛型型別引數,並且在前面加上T字首
如下面都是很好的命名
public delegate TOutput Converter<TInput, TOutput>(TInput from);
-
如果只有一個型別引數,可以只用一個字母T來表示泛型
public class Nullable<T>
public class List<T>
-
如果泛型引數有約束,那麼需要在泛型型別引數名中需要顯示出該約束
public interface ISessionChannel<TSession> where TSession:ISession
-
列舉型別的命名
-
要用單數名詞而不是複數命名列舉型別,如要用ConsoleColor而不是ConsoleColors
public enum ConsoleColor
{
Red,
Yellow,
Blue
}
-
不要給列舉型別加"Enum"、"Flag"等字尾。
ColorEnum,ColorFlag都不好,因為本身就是列舉,再加上就是沒有意義的重複 。
-
要用動詞和動詞短語命名方法
-
屬性的命名
- 要用名詞、名詞短語或形容詞來命名屬性
-
要用描述集合中具體內容的短語的複數形式來命名屬性集合,而不要用短語的單數形式加"List"、"Array"或"Collection"字尾
class BinaryTree
{
//Good Naming
public NodeCollection Nodes { get; set; }
//Bad Naming
public NodeCollection NodesCollection { get; set; }
-
要用肯定性的短語命名布林屬性。最好在前面選擇性的加入"Is"、"Can"、"Has"等字首。
CanSeek比CantSeek和Seekable都更準確和容易理解。
-
事件的命名
-
要用動詞或動詞短語命名事件
如: Clicked、Painting、DroppedDown 等等
-
要用現在進行時(ing)和過去式(ed)來賦予事件發生之前和之後的概念。而不是使用Before和After.
如視窗關閉前發生的close事件應該命名為Closing,而在視窗關閉之後發生的應該命名為Closed.
-
欄位的命名
- 禁止使用例項的公有欄位和受保護欄位,請使用屬性代替。
Tips:在VisualStudio中輸入"prop"可快速建立外部可修改的屬性,輸入"propg"可快速建立不允許外部修改的屬性。如:
//propg
public int NodesCount { get; private set; }
//prop
public List<BinaryNode> Nodes { get; set; }
- 一般只使用靜態欄位
- 要使用名詞、名詞短語或形容詞命名欄位
- 不要給欄位加字首如"g_"、"s_"來表示靜態欄位。因為欄位和屬性是非常相似的,所以要遵循相同的命名規範。