열거 형 명명 규칙-복수


267

비슷한 것을 읽었지만 정확히 내가 원하는 것을 읽지 않아도이 질문을하고 있습니다. 열거 형과 일치하는 속성에 대한 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"로 표시 할 수 없습니다.

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

질문 문구 :

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


5
공개 열거 형 OrderState ...-공개 OrderState OrderStatus {get; set;}
Fraser

답변:


333

비트 필드를 나타내는 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; }
}

20
예, 정답입니다. 이 지침은 .Net Framework에서 사용됩니다 (예 : enum DayOfWeek 및 플래그 enum RegexOptions).
Alexander Zwitbaum

1
예, 이것은 권장되는 관행입니다. 환영합니다. 그러나 그것은 내 질문에 대답하지 않습니다.
okw

1
추한 것처럼 보이지만 @okw는 추악 해 보이지만 플래그 열거 형에서 단일 값이 필요한 경우 필드 / 속성 / 인수에 단일 형식을 사용하십시오. 다중 플래그 설정을 지원하는 경우 복수를 사용하십시오. 열거 형이 플래그 열거 형이 아닌 경우 형식 이름과 필드 / 속성 / 인수에 단수를 사용하십시오.
Jonathan Dickinson

4
다음은 답변에 링크 된 .Net 4.0 버전 의 Microsoft 명명 규칙 안내서에 대한 링크입니다.

1
@Thomas 나는 그것에 대해 문제가 없었습니다. 왜 작동하지 않는지 알 수 없습니다. 참조되는 유형이나 변수인지 모호한 컨텍스트를 보지 마십시오. 즉 OrderStatus == OrderStatus.Pending, 왼쪽에 대한 변수로 인식 된 다음 오른쪽에 열거 됨
James Hurley

39

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

enum Status { Unknown = 0, Incomplete, Ready }

Status myStatus = Status.Ready;

다음과 비교하십시오 :

Statuses myStatus = Statuses.Ready;

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


6
조금 늦은 반응 (아마도 약간의 주제를 벗어난)이지만 : 0알 수없는 값에 값 을 사용하는 것이 좋습니다. 그러면 초기화되지 않은 변수가 기본적으로 사용 Unknown됩니다.
SvenL

@SvenL에 동의했습니다. 이에 따라 예제가 업데이트되었습니다.
밥 카우프만

그래도 [Flags]예제에 속성을 넣겠습니까 ? 무언가가 "불완전"과 "준비"상태 인 것은 이치에 맞지 않습니다. 만약 당신이 enum [Flags]Steps { First, Second, Third }정말로 변수 이름을 지정 completedStep하시겠습니까?
Pakman

26

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

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

enum Humour
{
  Irony,
  Sarcasm,
  Slapstick,
  Nothing
}

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

Humour.Irony | Humour.Sarcasm

오히려

Humours { Irony, Sarcasm }

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


5
하하, 프로그래머가 문법적으로 / 정치적으로 항상 올바른 것은 아닙니다. 귀하의 경우 "HumourTypes"를 사용했을 가능성이 있습니다. 나쁜 습관이라고 생각합니다.
okw

나는 풍자의 감각을 가지고 또는 아이러니의 감각이있는 모든 개인을 검색 할 경우 어떻게, 내가하지 검색 루틴을의 인스턴스 통과 할 Humours함유 Humours.Irony | Huomours.Sarcasm??
Charles Bretana

14

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

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

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

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

사실, 내 방법은 열거 형을 사용할 때 이름을 생각할 필요가없는 '신속하고 게으른'방법이라고 생각합니다.
okw

1
귀하의 답변을 뒷받침하기 위해 : MSDN의 "속성 이름"섹션에있는 유형 멤버 이름에서 : 유형과 동일한 이름을 가진 속성을 고려 하십시오. 예 : public Color Color { get {...} set {...} }
DavidRR

10

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

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


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

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


2
나는 같은 이름의 클래스와 열거 형을 가진 후에 열거 형 명명 규칙을 찾고 여기에 왔으며 더 분명하게하기 위해 "뭔가"를 원했습니다. 인터페이스 앞에 "I"를 붙이는 것처럼 "E"(Enum의 경우)로 접두사를 생각하고 있었지만 솔루션 헤더가 마음에 들었습니다. 좋은 하나 !!!
Scott

1
Microsoft의 설계 지침 : "열 형식 이름에"Enum "접미사를 사용하지 마십시오." docs.microsoft.com/ko-kr/dotnet/standard/design-guidelines/…
Thoryn Hawley

3
아마도 내가 한 말의 VERY FIRST 문장을 놓쳤습니까? 여기에 복사해서 붙여 드리겠습니다. "이것은 반대 할 수있는 관례에 동의하지 않는 몇 안되는 곳 중 하나입니다." 그런 다음 그 이유를 설명합니다.
Heather

2
나는 "가능한 모든 방법으로"가이드 라인을 따르지 않을 것입니다. 과장입니다. 나는 하나의 구체적인 방식으로 지침에 위배됩니다. 동의하지 않으려면, 동의하지 않는 이유를 기재하십시오. 당신의 쌍곡선은 불필요하며 당신의 입장을 진전시키지 않습니다.
Heather

1
네임 스페이스 충돌이 가능한 경우 Enum? 를 추가해도 문제가 없습니다 . 저자가 모든 var를 자신의 유형으로 postfixing을 제안하는 것처럼 아닙니다. 저자는 또한 이유가 제공되는 것을 감안할 때 훨씬 더 강력한 사례를 가지고 있지만 M $은 정당성을 제로로 제공합니다.
Jai Govindani

7

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

    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; }  
    }

2
가상의 상황이며 좋은 해결책은 아닙니다. 왜 enum처음에 중첩 을 사용하고 문제가 발생하면 다른 클래스에 중첩합니까?
Gert Arnold 2

1
성별의 경우 속성 이름 Gender과 열거 이름을로 사용 하는 것이 훨씬 더 의미가 있습니다 Sex. 그래서 isac.Gender = Sex.Male..
nawfal

3
이 사람이 왜 다운 피트인지 잘 모르겠습니다. 이 상황은 합법적이며 가설과는 거리가 멀다. 내부 유형은 외부 및 다른 곳에서만 사용되며 외부의 컨텍스트에서만 의미가 있기 때문에 Java에서 내부 클래스를 사용할 수있는 비슷한 이유로 C #에 열거 형을 중첩합니다. 컴파일러 제한의 결과로 언급 된 솔루션 중 하나를 선택해야합니다.
Nathan Pitman

Person.Gender.Male로 보내지 않는 한 외부에서 열거 형을 정의 해야하는 경우가 있습니다. 그냥 사람들보다, 중첩되지 않은 것이 어쨌든 최고의 솔루션이라고 생각합니다.
짐 울프

2
또 다른 더 나은 옵션은 "Serge-appTranslator"의 답변입니다.
커티스 얄롭

6

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


5

조금 늦게오고 ...

질문과 언급 한 질문간에 중요한 차이점이 있습니다. (내가 ;-) .

열거 형 정의를 클래스에서 제외하면 열거 형과 속성의 이름이 동일 할 수 있습니다.

public enum EntityType { 
  Type1, Type2 
} 

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

}

이 경우, MS 지침을 따르고 열거 형에 단일 이름을 사용합니다 (플래그에 복수). 가장 쉬운 솔루션입니다.

내 문제 ( 다른 질문에서 )는 열거 형이 클래스 범위에 정의되어 열거 형의 이름을 딴 속성을 사용하지 못하게하는 것입니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.