[c#] 枚舉和匹配屬性的C#命名約定



Answers

“關”,“開始”和“移動”的定義就是我所說的“國家”。 當你暗示你正在使用“國家”時,它就是你的“身份”。 所以!

public class Car
{
  public enum State
  {
    Off,
    Starting,
    Moving
  };

  State state = State.Off;

  public State Status
  {
    get { return state ; }
    set { state= value; DoSomething(); }
  }
}

如果我們再舉一個例子來說明你想在這種情況下使用“Type”這個詞:

public class DataReader
{
    public enum Type
    {
        Sql,
        Oracle,
        OleDb
    }

    public Type Type { get; set; } // <===== Won't compile =====

}

你真的需要看到枚舉和枚舉之間有區別,對吧? 但是在創建框架或談論架構時,您需要關注相似性,好吧,讓我們找到它們:

當一些東西被設置為一個國家時,它被定義為“事物”狀態

示例:汽車狀態處於運行狀態,停止狀態等。

你想在第二個例子中達到什麼樣的目的是這樣的:

myDataReader.Type = DataReader.Database.OleDb

你可能會認為這與我一直在向別人講道的事情有關,你需要遵循一個標準。 但是,你正在遵循一個標準! Sql-case也是一個特例,因此需要一些具體的解決方案。

但是,枚舉可以在System.Data空間中重用,這就是模式的全部內容。

使用“Type”查看的另一個案例是“Animal”,其中Type定義了種類。

public class Animal
    {
        public enum Type
        {
            Mammal,
            Reptile,
            JonSkeet
        }

        public Type Species{ get; set; }

    }

這是遵循一個模式,你並不特別需要“知道”這個對象,並且你沒有指定“AnimalType”或“DataReaderType”,你可以在你選擇的命名空間中重新使用枚舉。

Question

我經常發現自己實現了一個類來維護某種自己的狀態屬性作為一個枚舉:我有一個狀態枚舉和狀態類型的一個狀態屬性。 我應該如何解決這個名稱衝突?

public class Car
{
  public enum Status
  {
    Off,
    Starting,
    Moving
  };

  Status status = Status.Off;

  public Status Status // <===== Won't compile =====
  {
    get { return status; }
    set { status = value; DoSomething(); }
  }
}

如果狀態枚舉對於不同類型是通用的,我會把它放在課程之外,問題就會解決。 但Status僅適用於Car,因此在類之外聲明枚舉沒有任何意義。

你在這種情況下使用什麼命名約定?

注:這個問題在回答這個問題的評論中部分進行了辯論。 由於這不是主要問題,所以沒有得到多大的知名度。

編輯:菲利普Ekberg建議國際海事組織優秀的解決方案,為'狀態'的具體情況。 然而,我很有興趣閱讀關於枚舉/屬性名稱不同的解決方案,例如Michael Prewecki的答案

EDIT2(2010年5月):我最喜歡的解決方案是複用枚舉類型名稱,正如Chris S.所建議的。根據MS指南,這應該僅用於標誌枚舉。 但我越來越喜歡它了。 我現在也將它用於常規枚舉。




我知道我的建議違背了.NET命名約定,但我個人將枚舉前綴為'E',枚舉標誌為'F'(類似於我們如何在'I'前面添加接口)。 我真的不明白為什麼這不是公約。 枚舉/標誌是像接口這樣的特殊情況,永遠不會改變它們的類型。 它不僅明確了它是什麼,而且鍵入intellisense非常簡單,因為前綴會過濾大多數其他類型/變量/等,並且不會出現這些命名衝突。

這也解決了另一個問題,例如在WPF中,他們使用靜態類(如枚舉類型(例如FontWeights),它們具有預定義的類型實例,但不知道是否不搜索它們。 如果他們只是用'E'作為前綴,那麼你所要做的就是鍵入字符來查找這些特殊的靜態類。




我會將該屬性的名稱更改為“CurrentStatus”之類的內容。 快速簡單:)




我通常以枚舉為前綴,例如CarStatus。 我想這一切都取決於你正在使用的團隊(如果他們有任何規則/流程)和對象的使用。 只是我2美分(:




Links