C #에서 개인 변수의 이름을 어떻게 지정합니까? [닫은]


25

C #에서 개인 변수에 가장 잘 사용되는 명명 규칙은 무엇입니까?

  1. private int myInteger;
  2. private int MyInteger;
  3. private int mMyInteger;
  4. private int _myInteger;
  5. private int _MyInteger;
  6. 신비한 다른 옵션

어느 것을 사용하고 왜? (저희 회사는 C #을 처음 접했고 코딩 표준에 들어가기 위해 가장 "업계에서 인정 된"방법을 선택하고 싶습니다.)


자동 구현 속성을 사용하지 않는 이유는 무엇입니까? msdn.microsoft.com/ko-kr/library/bb384054.aspx
Kyle Ballard

1
C #에는 이에 대한 표준이 있습니다. stackoverflow.com/questions/14967/…
Tamara Wijsman

7
비공개 변수에 대해 공개적으로 이야기하는 것은 좋지 않습니다. 죄송합니다.
Mark C

로컬 범위 내에서만 메소드에 _someVariable을 사용한다는 점을 제외하고 azheglov (m_someVariable)와 동일하게 사용합니다.
lord-fu

7
@Mark 제의하기 위해서는 "개인 멤버"여야한다고 생각합니다.
EpsilonVector

답변:


44

MSDN 클래스 디자인 지침 http://msdn.microsoft.com/en-us/library/ta31s3bc.aspx 는 옵션 1-myInteger를 권장합니다.

나는 항상이 스타일을 사용했습니다. 나는 _ 캐릭터를 개인적으로 싫어합니다.


1
나는 resharper가 지능과 일치하는 중간 문자열을 추가 할 때까지 _ 문자를 싫어했습니다. 이제 입력 할 수 있으며에 myInteger일치합니다 _myInteger. 그러나 나는 MSDS가
18:49에

4
옵션 1을 사용하는 경우 myInteger변수가 메소드 또는 개인 클래스 멤버의 로컬 변수 인지 어떻게 알 수 있습니까?
Wizard79

4
@Lorenzo this.myInteger;)
TWith2Sugars

12
그러나 "this"는 4 자이며 "_"는 하나입니다! 실제로이 지침은 의미가 있지만 내 사무실에서는 모든 사람이 밑줄을 좋아하고 어떤 이유로 든 "this.Foo"를 보는 것을 싫어합니다. 때로는 중요한 유일한 지침은 직장에서 귀하에게 강제하는 지침입니다.
CodexArcanum

2
문자 수에 대한 논쟁은 논쟁의 여지가 있습니다. this같은 이름을 가진 지역 변수가 존재하는 메소드에서만 매번 입력 할 필요는 없습니다 . 그러나 밑줄을 사용할 때마다 추가 기호를 작성해야합니다. 내가 동의하는 것은 지역 코드 스타일 계약을 고수하는 것이 항상 중요하다는 것입니다.
Malcolm

25

위의 옵션 # 4를 사용합니다.

private int _myInteger;

변수 이름에 범위를 표시하고 싶습니다. 밑줄로 충분합니다. 읽기도 쉽습니다.


5
특히 여러 변수로 작업 해야하는 경우 읽기 쉽다는 것에 동의하지 않습니다.
Restuta

15

다음과 같은 명명 체계를 사용합니다.

  • 지역 범위 변수의 첫 번째 (myInteger)
  • 공공 재산에 대한 두 번째 (MyInteger)
  • 개인 변수의 네 번째 (_myInteger)

14

옵션 4가 실제로 가장 읽기 쉬운 옵션이라고 생각합니다. 이를 수행하는 데 도움이됩니다.

public Person(string name, int age) 
{
    this.name = name;
    this.age = age;
}

또한 모든 개인 구성원이 더 눈에 띄게 만듭니다. 다음 예에서 도대체 어디 age에서 왔습니까? this한정자가 없으면 말하기가 더 어렵습니다.

private void Method()
{
    var x = 2;
    var y = age + x;
}

이것은 이해하기 쉽습니다.

private void Method()
{
    var x = 2;
    var y = _age + x;
}

1
나는 첫 번째 예제로 맹세했지만 옵션 # 4를 잠시 시도한 후에 개인 필드의 접두사로 밑줄을 사용하는 것이 좋습니다.
Jeremy Wiebe

2
개인 변수에는 1을 사용하고 속성에 사용되는 개인 변수에는 4를 사용하십시오.
에반 플라이스

2
ChaosPandoin에 동의하지 않습니다. 나에게 Method ()의 두 가지 구현은 읽기 쉽다. age 변수 (또는 _age)를보고 메소드에서 선언되지 않았다는 것을 알게되면 클래스의 다른 곳에서 선언해야한다는 것을 알았습니다. 이 한정자는 끔찍하지만 적어도 생성자 메서드에 국한됩니다.
David Kennedy

10

우선, PascalCasing은 일반적으로 클래스의 공용 속성, const, 메서드 등을 위해 예약되어 있습니다. 그래서 나는 2와 5를 건너 뛸 것입니다.

둘째, 헝가리어 표기법은 .NET 세계에서는 권장되지 않으므로 3은 옳습니다. 그것이 3으로 진행되고 있다고 가정합니다.

camelCasing과 _camelCasing이 남습니다. 나는 일반적으로 클래스 변수에 _camelCasing을 사용하고 메소드 범위 또는 더 좁은 범위의 변수에 대해서는 일반 오래된 camelCasing을 사용합니다. 낙타 케이싱은 분석법 인수, 보호 / 개인 변수 이름 및 분석법 또는 더 좁은 범위 내 변수에 사용되는 표준입니다.

또한 내 개인 변수가 내 지능으로 그룹화되도록 밑줄을 추가하고 싶습니다. 그러나 유형 범위의 변수에 대해서만이 작업을 수행합니다. 메소드 또는 더 좁은 범위 내에서 선언 된 변수는 밑줄을 생략합니다. 변수를 쉽게 분리하고 덜 사용 된 변수를 함께 유지할 수 있습니다.


2
클래스 변수에 _camelCasing을 사용하는 이유를 이해할 수 없습니다. 일반적으로 클래스 변수라는 것이 분명하기 때문입니다.
대안

1
@math no, 지능적으로 명확하지 않습니다. 필드 (클래스 범위 변수)는 메소드 범위 변수와 거의 같은 아이콘을 가지므로 자세히 보지 않으면 정확하게 똑같이 보입니다. 밑줄은 시각적으로 구별하고 그룹화하여 유지하므로 자주 사용하지 않는 경우에 도움이됩니다 (상태가 버그가없는 프로그래밍의 적이므로 사용해서는 안됩니다).
바가지

나는 Intellisense에 대해 아무 말도하지 않았다. Color.ClassMethod ()와 myColor.InstanceMethod ()의 차이점에 대해 이야기하고 있습니다. 즉, Color는 클래스이므로 ClassMethod ()는 클래스 메서드입니다.
대안

@math you before : I don't understand why you would use _camelCasing for class variables you after : I'm talking about the difference between Color.ClassMethod() and myColor.InstanceMethod()혼란스러워하는 동안 실례합니다. 나는 클래스 변수를 거의 사용하지 않으므로 _ 키를 누르고 지능적이고 멋지게 그룹화하여 이름을 상기시키는 것이 좋습니다.
바가지

2
@mathepic : Will이 "클래스 변수"라고 말할 때 (비공개) 인스턴스 필드를 의미합니다. 당신은 그가 정적 멤버를 의미한다고 말한 것을 해석 한 것 같습니다; 그러나 그것은 그가 말한 것이 아닙니다.
Dan Tao

4

private int integer

메소드 범위에서 멤버 변수와 로컬 변수가 혼동되면 리팩토링해야합니다.


+1 : 이것이 제가 생각하는 포인트입니다. BTW : 나는 그 출처를 보았지만 그 이름 integer은 아마도 더 좋을 수도 있습니다 value.
Wolf

2

C # /. net에서 가장 좋은 방법은 2와 6의 조합이라고 생각합니다.

private int MyInteger { get; set; }

이론적으로 여기에는 변수가 없지만 개인 인스턴스 변수처럼 보이고 작동합니다. 비즈니스 로직을 그 가치에 추가해야하는 경우 (완전히 내부 가치이므로 결국 원하는 모든 것을 할 수 있음) 이미 '속성 화'된 것입니다. 뜨거운 김이 나는 컵!


2

옵션 # 4는 SSCLI와 비슷하기 때문에 솔직히 개인 변수의 이름을 지정하는 데별로 신경 쓰지 않습니다. 공개는 다른 이야기입니다.

BTW 당신은 ​​m_MyInteger를 잊었다


2

나는 그것을 "내"라고 부르지 않을 것이다!

그러나 나는 말할 것이다

class C
{
     int VariableName { get; set; }
}

종종 이것은 명백한 변수를 갖는 것보다 좋습니다. 명시 적 개인 변수가 있다면 그것을 호출 할 것입니다int _variableName;


1

C ++에서는 편집기를 많이 전환 할 때 _를 사용하는 경향이 있습니다.

C #의 경우 Visual Studio에서 비공개인지 확인할 수 있기 때문에 _를 떠나는 경향이 있습니다.

나는 이것을하기 위해 낙타 케이스 방식을 사용하는 경향이 있습니다.


1

다음과 같은 private int _myInteger;이유로 4 ( )를 사용합니다 .

private int myInteger;

이것이 내가 지역 변수의 이름을 지정하는 방법입니다.

private int MyInteger;

이것이 상수의 이름입니다.

private int mMyInteger;

이것은 C # 스타일이 아닙니다.

private int _MyInteger;

이상해 보인다.


1

밑줄로.

Bill Wagner는 Effective C #의 이유를 설명합니다 . 하지만 정수 이름을 절대 정수 , _age 또는 _length 같은 더 나은 뭔가. 인스턴스 이름에 TypeName을 포함시키는 것은 끔찍한 관행입니다. 이름은 설명이 필요하며 C #은 Type-Safe 형식이므로 항상 찾을 수 있습니다.


1
예, 그러나 예입니다.
Vaccano

1

보다 구체적인 예를 제시해야하지만 다음과 같습니다.

private int count, private int badFileCount,private static readonly int ReconnectAttemptsLimit

그건 그렇고, 최신 및 가장 큰를 설치하고 사용할 때이 모든 것을 무료로 얻습니다 MSFT Stylecop.


0

나는 옵션 5로 간다. private int _MyFoo

그래도 _myFoo에 비해 실질적인 경쟁 우위는 보이지 않습니다.


0

camelCasing을 다음과 같은 개인 변수에 사용하십시오. myInteger

선행을 고려 _속성이 confusions- 감소하는 변수가 백업 인 경우
변수 _myProperty속성을MyProperty


0

ReSharper는 내 변수뿐만 아니라 다른 모든 변수에도 이름을 지정합니다. 프로젝트를 통해 많은 일관성이 있습니다.


0

Juval Lowy의 IDesign C # 코딩 표준 은 매우 유명합니다. 이 표준에서는 개인용 멤버 변수 앞에 "m_"을 붙일 것을 권장합니다 (옵션 6). 그것이 우리 팀에서하는 일입니다.

private int m_myInteger;

옵션 4 ( _myInteger)는이 표준의 수용 가능한 변형입니다.

MSDN 권장 사항 ( myInteger)이 마음에 들지 않았습니다 . 로컬 변수에서 개인 구성원에게 알리기가 어렵 기 때문입니다. 물론 그들의 추천은 개인 멤버를로 자격을 부여함으로써이 문제를 해결합니다 this.

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