[C#] 열거 형 명명 규칙-복수

비슷한 것을 읽었지만 정확히 내가 원하는 것을 읽지 않아도이 질문을하고 있습니다. 열거 형과 일치하는 속성에 대한 C # 명명 규칙 있습니다.

열거 형을 복수형으로 명명 한 다음 단일형으로 ‘사용’하는 경향이 있음을 발견했습니다.

public enum EntityTypes {
  Type1, Type2
}

public class SomeClass {
  /*
    some codes
  */

  public EntityTypes EntityType {get; set;}

}

물론 작동하며 이것이 내 스타일이지만 누구나 그러한 규칙에 잠재적 인 문제를 찾을 수 있습니까? 그래도 “Status”라는 단어로 “못생긴”이름이 있습니다.

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

public class SomeClass {
  /*
    some codes
  */

  public OrderStatuses OrderStatus {get; set;}

}

추가 정보 : 내 질문이 명확하지 않을 수 있습니다. 정의 된 열거 형 유형의 변수 이름을 지정할 때 종종 열심히 생각해야합니다. 모범 사례를 알고 있지만 이러한 변수의 이름 지정 작업을 쉽게하는 데 도움이되지 않습니다.

모든 열거 형 속성 (예 : “Status”)을 “MyStatus”로 표시 할 수 없습니다.

내 질문 : 위에서 설명한 내 컨벤션에 문제가있는 사람이 있습니까? 모범 사례가 아닙니다.

질문 문구 :

글쎄, 나는 이런 식으로 질문을해야한다고 생각한다. 누군가 열거 형의 이름을 지정하는 좋은 일반적인 방법을 사용할 수 있습니까?



답변

비트 필드를 나타내는 Enum경우가 아니라면 s에 단수를 사용하는 것이 좋습니다 . 열거 유형 명명 규칙 (Microsoft 명명 지침 의 하위 집합)을 참조하십시오 .EnumFlagsAttribute

설명에 답하기 위해 다음 중 하나에 아무런 문제가 없습니다.

public enum OrderStatus { Pending, Fulfilled, Error };

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

또는

public enum OrderStatus { Pending, Fulfilled, Error };

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


답변

복수형으로 열거 형을 명명하기 시작했지만 이후 단수형으로 변경되었습니다. 그들이 사용되는 곳에서 더 의미가있는 것 같습니다.

enum Status { Unknown = 0, Incomplete, Ready }

Status myStatus = Status.Ready;

다음과 비교하십시오 :

Statuses myStatus = Statuses.Ready;

문맥에서 더 자연스럽게 들리는 단수형을 찾습니다. 우리는 한 곳에서 발생하는 열거 형을 선언 할 때 “이것은 무엇이든의 그룹입니다”라고 생각하지만 많은 곳에서 사용하면 “이것은 무엇이든”이라고 생각합니다 .


답변

상황은 실제로 복수형에 적용되지 않습니다.

enum무언가 또는 다른 사람의 속성을 보여줍니다. 예를 들어 보겠습니다.

enum Humour
{
  Irony,
  Sarcasm,
  Slapstick,
  Nothing
}

하나의 유형을 가질 수 있지만 복수형이 아닌 다 중형으로 생각하십시오.

Humour.Irony | Humour.Sarcasm

오히려

Humours { Irony, Sarcasm }

유머 감각이 있고 유머 감각이 없습니다.


답변

일반적으로 모범 사례 권장 사항은 [Flags] 특성이 첨부되어 있고 (따라서 비트 필드를 포함 할 수있는) 열거 형을 제외하고는 단수형입니다.

편집 된 질문을 읽은 후 속성 이름이나 변수 이름이 열거 형 이름과 달라야한다고 생각할 수 있습니다. 다음은 완벽하게 괜찮습니다 …

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

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


답변

이것은 내가 그것에 반대 할 정도로 컨벤션에 동의하지 않는 몇 안되는 곳 중 하나입니다. TBH, 열거 형과 그 인스턴스의 정의가 동일한 이름을 가질 수 있다는 것을 싫어합니다. 모든 열거 형을 “Enum”으로 접미사로 지정하면 주어진 사용법에서 컨텍스트가 무엇인지 명확하게 알 수 있기 때문입니다. IMO는 코드를 훨씬 더 읽기 쉽게 만듭니다.

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


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

아무도 열거 형과 그 인스턴스를 혼동하지 않습니다.


답변

다음과 같이 간단하지만 금지 된 코드를 작성하려는 경우 :

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

옵션은 다음과 같습니다.

  1. MS 권장 사항을 무시하고 열거 형 이름에 접두사 또는 접미사를 사용하십시오.

    public class Person
    {
        public enum GenderEnum
        {
            Male,
            Female
        }
        public GenderEnum Gender { get; set; }
    }
  2. 열거 정의를 클래스 외부로, 바람직하게는 다른 클래스로 이동하십시오. 위의 쉬운 해결책은 다음과 같습니다.

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

답변

모범 사례-단수형을 사용하십시오. Enum을 구성하는 항목 목록이 있습니다. 말할 때 목록에서 항목을 사용하는 것이 이상하게 들립니다.Versions.1_0 . Version.1_01_0 버전이 하나만 있기 때문에 말하는 것이 더 합리적 입니다.