wake-up-neo.com

Namenskonvention - Plural

Ich stelle diese Frage, obwohl ich Ähnliches gelesen habe, aber nicht genau das, was ich möchte C # -Namenskonvention für Aufzählung und übereinstimmende Eigenschaft

Ich habe festgestellt, dass ich die Tendenz habe, Enums im Plural zu benennen und sie dann als Singular zu verwenden. Beispiel:

public enum EntityTypes {
  Type1, Type2
}

public class SomeClass {
  /*
    some codes
  */

  public EntityTypes EntityType {get; set;}

}

Natürlich funktioniert es und das ist mein Stil, aber kann jemand ein potenzielles Problem mit solchen Konventionen finden? Ich habe allerdings eine "hässliche" Bezeichnung mit dem Wort "Status":

public enum OrderStatuses {
  Pending, Fulfilled, Error, Blah, Blah
}

public class SomeClass {
  /*
    some codes
  */

  public OrderStatuses OrderStatus {get; set;}

}

Zusätzliche Informationen: Vielleicht war meine Frage nicht klar genug. Beim Benennen der Variablen der von mir definierten Aufzählungstypen muss ich oft überlegen. Ich kenne die beste Vorgehensweise, aber es hilft mir nicht, diese Variablen leichter zu benennen.

Ich kann unmöglich alle meine Enum-Eigenschaften (sagen Sie "Status") als "MyStatus" verfügbar machen.

Meine Frage: Kann jemand ein potenzielles Problem mit meiner oben beschriebenen Konvention finden? Es geht NICHT um bewährte Methoden.

Umformulierung der Frage:

Nun, ich denke, ich sollte die Frage so stellen: Kann jemand einen guten generischen Weg finden, um den Aufzählungstyp so zu benennen, dass die Benennung der Aufzählung 'Instanz' bei Verwendung ziemlich einfach ist?

240
o.k.w

Microsoft empfiehlt, Singular für Enums zu verwenden, es sei denn, das Enum steht für Bitfelder (verwenden Sie auch das FlagsAttribute ). Siehe Benennungskonventionen für Aufzählungstypen (eine Teilmenge der Benennungsrichtlinien von Microsoft).

Um auf Ihre Klarstellung zu antworten, sehe ich nichts Falsches an einem der folgenden Punkte:

public enum OrderStatus { Pending, Fulfilled, Error };

public class SomeClass { 
    public OrderStatus OrderStatus { get; set; }
}

oder

public enum OrderStatus { Pending, Fulfilled, Error };

public class SomeClass {
    public OrderStatus Status { get; set; }
}
305
jason

Ich habe mit der Benennung von Enums im Plural begonnen, bin aber inzwischen zu Singular übergegangen. Scheint nur im Zusammenhang mit dem Verwendungszweck sinnvoller zu sein.

enum Status { Unknown = 0, Incomplete, Ready }

Status myStatus = Status.Ready;

Vergleichen mit:

Statuses myStatus = Statuses.Ready;

Ich finde, dass die Singularform im Kontext natürlicher klingt. Wir sind uns einig, dass wir bei der Deklaration der Aufzählung, die an einem Ort stattfindet, denken, "das ist eine Gruppe von Whatevern", aber bei der Verwendung, vermutlich an vielen Orten, denken wir, "das ist eines, was auch immer". .

33
Bob Kaufman

Die Situation trifft nie wirklich auf den Plural zu.

Ein enum zeigt ein Attribut von etwas anderem. Ich gebe ein Beispiel:

enum Humour
{
  Irony,
  Sarcasm,
  Slapstick,
  Nothing
}

Sie können einen Typ haben, aber denken Sie lieber an das Multiple als an den Plural:

Humour.Irony | Humour.Sarcasm

Eher, als

Humours { Irony, Sarcasm }

Sie haben einen Sinn für Humor, Sie haben keinen Sinn für Humor.

23
Kyle Rozendo

Im Allgemeinen ist die Empfehlung für bewährte Methoden singulär, mit Ausnahme der Enums, denen das Attribut [Flags] zugeordnet ist (und die daher Bitfelder enthalten können). Diese sollten plural sein.

Nachdem ich Ihre bearbeitete Frage gelesen habe, habe ich das Gefühl, dass der Eigenschafts- oder Variablenname möglicherweise nicht mit dem Namen des Aufzählungstyps übereinstimmt. Folgendes ist vollkommen in Ordnung ...

  public enum Status { New, Edited, Approved, Cancelled, Closed }

  public class Order
  {
      private Status stat;
      public Status Status
      { 
         get { return stat; }
         set { stat = value; }
      }
  }
13
Charles Bretana

Dies ist einer der wenigen Orte, an denen ich mit der Konvention nicht einverstanden bin. TBH, ich hasse es, dass die Definition einer Enumeration und die Instanz davon den gleichen Namen haben können. Ich postfixe alle meine Enums mit "Enum", insbesondere weil es klar macht, in welchem ​​Kontext sie verwendet werden. IMO macht es den Code viel besser lesbar.

public enum PersonTypesEnum {
    smart,
    sad,
    funny,
    angry
}


public class Person {   
    public PersonTypesEnum PersonType {get; set;}
}

Niemand wird jemals verwechseln, was die Aufzählung und was die Instanz davon ist.

8
Heather

Wenn Sie versuchen, einfachen, aber verbotenen Code wie folgt zu schreiben:

    public class Person
    {
        public enum Gender
        {
            Male,
            Female
        }
        //Won't compile: auto-property has same name as enum
        public Gender Gender { get; set; }  
    }

Ihre Möglichkeiten sind:

  1. Ignorieren Sie die MS-Empfehlung und verwenden Sie ein Präfix oder Suffix für den Namen der Aufzählung:

    public class Person
    {
        public enum GenderEnum
        {
            Male,
            Female
        }
        public GenderEnum Gender { get; set; }
    }
    
  2. Verschieben Sie die Enum-Definition außerhalb der Klasse, vorzugsweise in eine andere Klasse. Hier ist eine einfache Lösung für die oben genannten:

    public class Characteristics
    {
        public enum Gender
        {
            Male,
            Female
        }
    }
    public class Person
    {
        public Characteristics.Gender Gender { get; set; }  
    }
    
6
MiloNC

Best Practice - Verwenden Sie Singular. Sie haben eine Liste der Elemente, aus denen eine Aufzählung besteht. Die Verwendung eines Elements in der Liste klingt merkwürdig, wenn Sie Versions.1_0 Sagen. Es ist sinnvoller, Version.1_0 Zu sagen, da es nur eine 1_0-Version gibt.

6
Jeremy Cron

Kommt ein bisschen spät ...

Es gibt einen wichtigen Unterschied zwischen Ihrer und der Frage Sie erwähnen (die ich gestellt habe ;-):

Sie setzen die Enum-Definition aus der Klasse heraus, wodurch Sie den gleichen Namen für die Enum und die Eigenschaft haben können:

public enum EntityType { 
  Type1, Type2 
} 

public class SomeClass { 
  public EntityType EntityType {get; set;} // This is legal

}

In diesem Fall würde ich den MS-Richtlinien folgen und einen einzelnen Namen für die Aufzählung verwenden (Plural für Flags). Es ist wahrscheinlich die einfachste Lösung.

Mein Problem (in der andere Frage ) ist, wenn die Aufzählung im Bereich der Klasse definiert ist, wodurch die Verwendung einer Eigenschaft verhindert wird, die genau nach der Aufzählung benannt ist.

5
Serge Wautier

Auf der anderen Seite C # Namenskonvention für Enum und Matching Property hat jemand darauf hingewiesen, was ich für eine sehr gute Idee halte:

"Ich weiß, dass mein Vorschlag gegen die .NET-Namenskonventionen verstößt, aber ich persönlich stelle Enums mit 'E' und Enum-Flags mit 'F' voran (ähnlich wie wir Interfaces mit 'I' voran)."

0
RenniePet