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

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

  • 特定場景下的命名最佳實踐

    • 名稱空間

    1. 要使用PascalCasing,並用點號來分隔名字空間中的各個部分。

      如Microsof.Office.PowerPoint

    2. 要用公司名作為名稱空間的字首,這樣就可以避免與另外一家公司使用相同的名字。
    3. 要用穩定的,與版本無關的產品名稱作為名稱空間的第二層
    4. 不要使用公司的組織架構來決定名稱空間的層次結構,因為內部組織結構經常改變。
    5. 不要用相同的名字來命名名稱空間和該空間內的型別。

      例如,不要先將名稱空間命名為Debug,然後又在該空間中提供Debug類。大部分編譯器包括VS要求使用者在這樣的型別前加上完整的限定符。

    • 要讓介面的名字以字母I開頭

如IComponet,IDisposable 大家一看就知道是介面。

同時要確保如果一個類是一個介面的標準實現,那麼這個類和介面應該只差一個"I"字首。

  • 派生類的末尾使用基類名稱

例如,從 Stream 繼承的 Framework 型別以 Stream 結尾,從 Exception 繼承的型別以 Exception 結尾。

  • 泛型型別引數的命名

  1. 使用描述性的名字來命名泛型型別引數,並且在前面加上T字首

    如下面都是很好的命名

    public delegate TOutput Converter<TInput, TOutput>(TInput from);

  2. 如果只有一個型別引數,可以只用一個字母T來表示泛型

    public class Nullable<T>

    public class List<T>

  3. 如果泛型引數有約束,那麼需要在泛型型別引數名中需要顯示出該約束

    public interface ISessionChannel<TSession> where TSession:ISession

  • 列舉型別的命名

  1. 要用單數名詞而不是複數命名列舉型別,如要用ConsoleColor而不是ConsoleColors

    public enum ConsoleColor

    {

    Red,

    Yellow,

    Blue

    }

  2. 不要給列舉型別加"Enum"、"Flag"等字尾。

    ColorEnum,ColorFlag都不好,因為本身就是列舉,再加上就是沒有意義的重複

  • 要用動詞和動詞短語命名方法

  • 屬性的命名

  1. 要用名詞、名詞短語或形容詞來命名屬性
  2. 要用描述集合中具體內容的短語的複數形式來命名屬性集合,而不要用短語的單數形式加"List"、"Array"或"Collection"字尾

    class BinaryTree

    {

    //Good Naming

    public NodeCollection Nodes { get; set; }

    //Bad Naming

    public NodeCollection NodesCollection { get; set; }

  3. 要用肯定性的短語命名布林屬性。最好在前面選擇性的加入"Is"、"Can"、"Has"等字首。

    CanSeek比CantSeek和Seekable都更準確和容易理解。

  • 事件的命名

  1. 要用動詞或動詞短語命名事件

    如: Clicked、Painting、DroppedDown 等等

  2. 要用現在進行時(ing)和過去式(ed)來賦予事件發生之前和之後的概念。而不是使用Before和After.

    如視窗關閉前發生的close事件應該命名為Closing,而在視窗關閉之後發生的應該命名為Closed.

  • 欄位的命名

    1. 禁止使用例項的公有欄位和受保護欄位,請使用屬性代替。

    Tips:在VisualStudio中輸入"prop"可快速建立外部可修改的屬性,輸入"propg"可快速建立不允許外部修改的屬性。如:

//propg

public int NodesCount { get; private set; }

//prop

public List<BinaryNode> Nodes { get; set; }

  1. 一般只使用靜態欄位
  2. 要使用名詞、名詞短語或形容詞命名欄位
  3. 不要給欄位加字首如"g_"、"s_"來表示靜態欄位。因為欄位和屬性是非常相似的,所以要遵循相同的命名規範。