밑줄을 긋거나 밑줄을 긋지 않기 위해서는 이것이 문제입니다


130

이진 버전을 다른 프레임 워크 언어로 사용할 경우 C #에서 개인 필드 앞에 밑줄을 붙이지 않는 데 문제가 있습니까? 예를 들어 C #은 대 / 소문자를 구분하므로 "foo"필드와 "Foo"공용 속성을 호출하면 제대로 작동합니다.

이 것 어떤 이름이 케이스에 의해서만 구별이 있다면 어떤 CLS 준수 (또는 다른) 문제로, 같은 VB.NET 등의 대소 문자를 구분하지 언어에 효과가 있습니까?


18
밑줄 접두사 인 BTW의 요점은 사례 문제를 다루지 않습니다. 코드를 읽을 때 필드와 지역 주민을 쉽고 시각적으로 구별 할 수 있어야합니다. C #과 VB에서 모두 사용하겠습니다.
Neil Hewitt

2
@NeilHewitt : 글쎄, 그것은 또한 함수 변수가 멤버 변수와 충돌하는 것을 방지합니다 this. 편집 : 방금 4 살짜리 의견에 응답했습니다 ...
Ed S.

명확성을 위해 공식 표준은 _camelCase(읽기 전용) github.com/dotnet/corefx/blob/master/Documentation/…
Chris Marisic

개인 백업 상점에는 _camelCase를 선호합니다. 즉, 속성을 통해 할당 및 액세스 된 데이터를 보유하는 개인 파일 보관. 클래스 정의에서 알려진 값으로 초기화 할 수 없기 때문에 자동 속성을 좋아하지 않으며 setter에서 부작용을 원한다면 명시 적으로 선언 된 백업 저장소가 필요합니다. 불행히도 이것은 c # 편집기에서 ^ R ^ E를 사용할 때 리팩터링되므로 매번 다시 추가해야합니다.
TomXP411

답변:


46

효과 가 없습니다 .

CLS 규격 라이브러리를 작성하기위한 권장 사항의 일부는이 대중 / 케이스 만 다른 보호 기관은 당신이해야 예 않았을 것입니다 NOT 해야

public void foo() {...}

public void Foo() {...}

비공개 항목을 라이브러리 사용자가 사용할 수 없으므로 설명하는 것은 문제가되지 않습니다.


1
아무 효과가 없더라도 여전히 불편한 컨벤션입니다. 대소 문자 만 다르면 혼란을 일으키는 레시피이기 때문입니다. 유일한 차이가 초기 자본이라면 잘못 읽거나 잘못 입력하기가 너무 쉽습니다.
ChrisA

2
추신 개인적으로 C #에서는 밑줄이 없습니다. 나를 위해 그것은 종교적 신념이 아닌 개인적인 취향입니다
이진 걱정

1
나는 두 가지 방법을 모두했고 지식을 바탕으로 내 마음을 하나 만들고 싶었다. : P
TheCodeJunkie

46
밑줄을 사용하고 있습니다. 인수 및 지역 변수와 구별하기가 더 쉽습니다.
Rinat Abdullin

4
개인 필드에만 _를 사용하지만 3.5 자동 속성으로 인해 개인 필드는 거의 없습니다. 일반적으로 개인 필드가있는 유일한 시간은 기본이 아닌 유형에 지연 로딩을 구현하는 경우입니다.
Chris Marisic

278

중요 업데이트 (2016 년 4 월 12 일) :

.NET CoreFX 팀의 내부 표준에 주목했습니다. 이유에 대한 통찰력을 제공하지 않고 밑줄 표기법 을 . 우리가 규칙 # 3 자세히 보면 그러나 경우는의 시스템이 있다는 것을 분명하게 _, t_, s_왜 제안 접두사 _처음에 선택되었다.

  1. 우리는 사용 _camelCase 내부 및 개인 필드 어디 읽기 전용 가능한 사용합니다. 접두사 인스턴스와 필드 _, 정적 필드 s_와와 스레드 정적 필드 t_. 정적 필드를 사용하는 경우, readonly이후에 와야한다 static(즉, static readonly하지 readonly static).
  2. this.반드시 필요한 경우가 아니면 피 합니다.

따라서 .NET CoreFX 팀이 성능에 중점을 둔 다중 스레드 시스템 수준 코드를 작업하는 것과 마찬가지로 다음과 같이 강력하게 제안됩니다.

  • 코딩 표준을 준수하고
  • 밑줄 표기법을 사용하고
  • 이 답변을 더 이상 읽지 마십시오

그렇지 않으면 계속 읽으십시오 ...

최초의 답변 :

먼저 우리가 말하는 것에 동의합시다. 가시성 수정자가 허용하는 경우 비 정적 메서드 및 클래스 / 하위 클래스의 생성자 내에서 인스턴스 멤버에 액세스하는 방법이 문제입니다.

밑줄 표기

  • 개인 필드 이름에 "_"접두사를 사용하는 것이 좋습니다.
  • 또한 꼭 필요한 경우가 아니면 "this"를 사용해서는 안된다고합니다.

이 표기법

  • 항상 "this"를 사용하도록 제안합니다. 모든 인스턴스 멤버에 액세스

이 표기법이 존재하는 이유는 무엇입니까?

이것은 당신이 방법이기 때문에

  • 동일한 이름을 공유 할 때 필드에서 매개 변수를 구분
  • 현재 인스턴스의 컨텍스트에서 작업하고 있는지 확인하십시오.

public class Demo
{
   private String name;
   public Demo(String name) {
       this.name = name;
   }
}

밑줄 표기법이 존재하는 이유는 무엇입니까?

어떤 사람들은 "this"를 입력하는 것을 좋아하지 않지만 여전히 필드와 매개 변수를 구별하는 방법이 필요하기 때문에 필드 앞에 "_"를 사용하기로 동의했습니다.

public class Demo
{
   private String _name;
   public Demo(String name) {
      _name = name;
   }
}

개인 취향의 문제라고 생각할 수 있으며 두 가지 방법 모두 똑같이 좋고 나쁩니다. 그러나이 표기법이 밑줄 표기법을 능가하는 특정 측면이 있습니다.

명쾌함

  • 밑줄 표기 혼란 이름
  • 이 표기법은 이름을 그대로 유지합니다

인지 하중

  • 밑줄 표기법이 일치하지 않아 필드를 특수한 방식으로 처리 할 수 ​​있지만 속성이나 필드가 필요한지 스스로에게 물어볼 때마다 다른 멤버와 함께 사용할 수 없습니다

  • 이 표기법은 일관성이 있습니다. 생각할 필요는 없습니다. 항상 "this"를 사용하여 회원을 가리 킵니다.

업데이트 : 다음과 같이 지적했듯이 이점은 아닙니다.

유지

  • 밑줄 표기법을 사용하면 _리팩토링 중에 필드를 속성으로 바꾸 _거나 (제거 ) 또는 그 반대 (add _) 와 같이 주의를 기울여야합니다.

  • 이 표기법에는 그런 문제가 없습니다

자동 완성

인스턴스 멤버 목록을 확인해야하는 경우 :

  • 밑줄 표기법은 큰 도움이되지 않습니다. "_"를 입력하면 자동 완성 팝업에 비공개 필드와 연결된 어셈블리에서 사용 가능한 모든 유형이 나머지 인스턴스 멤버와 혼합되어 표시되므로
  • 이 표기법은 "this"를 입력하여 명확한 답변을 제공합니다. 회원 목록 만 있으면됩니다.

모호

때로는 Intellisense의 도움없이 코드를 처리해야합니다. 예를 들어 코드 검토를 수행하거나 온라인에서 소스 코드를 찾아 볼 때.

  • 밑줄 표기법은 모호합니다. Something.SomethingElse를 볼 때 Something이 클래스인지 SomethingElse가 정적 속성인지 여부를 알 수 없거나 SomethingElse의 고유 속성이있는 현재 인스턴스 속성 일 수 있습니다.

  • this-notation is clear : Something.SomethingElse를 볼 때 정적 속성을 가진 클래스를 의미 할 수 있고 이것을 볼 때만 뭔가를 볼 수 있습니다. Something.SomethingElse Something은 멤버이고 SomethingElse는 그 속성

확장 방법

"this"를 사용하지 않으면 인스턴스 자체에서 확장 메소드를 사용할 수 없습니다.

  • 밑줄 표기법을 사용하려면 "this"를 사용하지 않아도되지만 확장 방법에는
  • 이 표기법은 주저를 피하고 항상 "this"기간을 사용합니다.

Visual Studio 지원

  • 밑줄 표기법은 Visual Studio에서 기본적으로 지원되지 않습니다.
  • 이 표기법은 Visual Studio에서 자연스럽게 지원됩니다.

    1. "이." 자격 : C #에서 앞에 오는 비 정적 방법에 사용되는 모든 비 정적 필드를 선호this.

공식 추천

특히 C #에서 "밑줄을 사용하지 마십시오"라는 공식 지침이 많이 있습니다.


22
이것은 놀라운 답변입니다. 이 모든 정보를 컴파일하는 데 시간을 내 주셔서 감사합니다.
Tigran

5
C ++에서는 언어 및 표준 라이브러리 사용에 대한 밑줄로 시작하는 식별자를 보유하므로 C ++에서 제공되지 않습니다.
Rob G

7
성능이 중요한 멀티 스레드 시스템 레벨 코드와 다른 코드를 구별하는 이유는 무엇입니까? _camelCase내 코드가 성능 결정 / 시스템 수준 코드 인 경우 어떻게 사용 하면 도움이됩니까?
BornToCode

6
밑줄을 사용하는 것은 성능에 중요한 멀티 스레드 또는 시스템 레벨 코드를 작성하는 것과 아무 관련이 없습니다. 중요한 것은 일관성이며 CoreFX 팀은 특정 컨벤션에 동의 한 팀일뿐입니다. 이것은 명명 규칙을 비교하는 매우 훌륭한 분석으로 뒷받침되는 훌륭한 대답이지만 "CoreFX 팀이 그렇게 말했기 때문에 밑줄이 더 낫습니다"라는 추가 부분이 실제로 품질을 떨어 뜨린다 고 생각합니다.
Şafak Gür

5
내 문제는 논리적 추론을 이해한다는 것입니다. en.wikipedia.org/wiki/Inference 그러나 여러분 모두를위한 것은 아닙니다.
user603563

67

Microsoft StyleCop 도움말 파일에서 가져옵니다.

유형 이름 : FieldNamesMustNotBeginWithUnderscore

CheckId : SA1309

원인 : C #의 필드 이름은 밑줄로 시작합니다.

규칙 설명 :

이 규칙을 위반하면 필드 이름이 밑줄로 시작할 때 발생합니다.

기본적으로 StyleCop은 밑줄, m_ 등을 사용하여 'this'에 찬성하여 로컬 클래스 필드를 표시 할 수 없습니다. 접두사. 'this'를 사용하는 이점. 필드뿐만 아니라 메서드, 속성 등을 포함한 모든 요소 유형에 동일하게 적용되므로 코드를 보는 데 사용되는 편집기에 관계없이 클래스 멤버에 대한 모든 호출을 즉시 인식 할 수 있습니다. 또 다른 이점은 접두사가 붙지 않는 인스턴스 멤버와 정적 멤버간에 빠르고 인식 가능한 차별화를 생성한다는 것입니다.

필드 또는 변수 이름이 Win32 또는 COM과 관련된 항목의 이름과 일치하도록되어 있으므로 밑줄로 시작해야하는 경우 필드 나 변수를 특수 NativeMethods 클래스 내에 배치하십시오. NativeMethods 클래스는 이름이 NativeMethods로 끝나는 클래스이며 Win32 또는 COM 래퍼의 자리 표시 자로 사용됩니다. 항목이 NativeMethods 클래스 내에 있으면 StyleCop은이 위반을 무시합니다.

다른 규칙 설명은 위의 방법 외에 선호하는 방법은 소문자로 개인 필드를 시작하고 대문자는 대문자로 개인 필드를 시작하는 것임을 나타냅니다.

편집 : 후속 조치로 StyleCop의 프로젝트 페이지는 https://github.com/DotNetAnalyzers/StyleCopAnalyzers에 있습니다. 도움말 파일을 읽으면 다양한 스타일 규칙을 제안하는 이유에 대한 많은 통찰력을 얻을 수 있습니다.


7
주로 "모범 사례"종류입니다. 규칙에서 알 수 있듯이 "this"접두어는 정적이 아닌 멤버에 적용 할 수 있지만 언어 구문 규칙으로 인해 다른 접두어를 적용 할 수 없습니다. "this"키워드는 의도 한 목적지를 명확하게 보여줍니다.
Scott Dorman

5
또한 문제를 해결하는 인공적인 방법보다 문제에 대한 언어의 의도 된 해결책 ( "this")을 선호합니다.
galaktor

10
동일한 소프트웨어에는 경우에만 다른 두 필드가 없어야한다는 규칙이 있습니다. 그렇다면 공공 재산으로 싸인 보호 된 변수로 무엇을합니까?
Lilith River

5
'밑줄 없음'에 대한 나의 유일한 문제는 '웹'양식에 대해 프로그래밍 할 때 'this'만 사용하면 내가 정의한 개인 필드로 필터링하는 데 도움이되지 않고 대신 나를 제공한다는 것입니다 상기 대상에 포함 된 800 만개의 다른 속성들의 거대한 목록.

14
StyleCop은 this클래스 멤버를 참조 할 때 지속적으로 사용 하면을 검색하여 모든 클래스 멤버에게 모든 호출을 찾을 수 있다고 말합니다 this. 나는 그것에 대해 논쟁 할 수 없지만, 그렇게해야 할 때도 생각할 수 없습니다. 내가하고 싶은 마지막 일은 코딩에 tedium을 추가 하고 거의 이익이 거의없는 내 코드 this( 거의 헝가리어)로 쓰레기를 버리는 것 입니다. 사실, 내가 한 줄의 코드를보고 있다면 대문자 또는 밑줄로 시작하는 것은 클래스 멤버이며 소문자는 로컬입니다.
devuxer

27

우리는 개인 분야에 대해 이야기하고 있기 때문에 수업의 사용자에게는 영향을 미치지 않습니다.

그러나 개인 필드에는 밑줄을 사용하는 것이 좋습니다. 예를 들어 코드를 이해하기 쉽게 만들 수 있습니다.

private int foo;
public void SetFoo(int foo)
{
  // you have to prefix the private field with "this."
  this.foo = foo;

  // imagine there's lots of code here,
  // so you can't see the method signature



  // when reading the following code, you can't be sure what foo is
  // is it a private field, or a method-argument (or a local variable)??
  if (foo == x)
  {
    ..
  }
}

우리 팀에서는 항상 개인 필드에 밑줄 접두사를 사용합니다. 따라서 일부 코드를 읽을 때 개인 필드를 매우 쉽게 식별하고 지역 및 인수와 구별 할 수 있습니다. 어떤 방식으로, 밑줄은 "this"의 속기 버전으로 볼 수 있습니다.


14
글쎄 , 필드, 속성 또는 메소드에 액세스하는 경우에 관계없이 항상 'this'접두사입니다.
TheCodeJunkie

9
저에게 밑줄은 "this"라는 속기 표기법입니다.
M4N

2
R #에서는 매개 변수 foo를 호출하지 않는 것이 좋습니다. Foo를 설정하는 데 사용될 것이므로 'value'라고 부르지 않겠습니까?
thinkbeforecoding

17
@Martin : "this"의 줄임말로 밑줄의 문제는 "this"는 가능하지만 모든 클래스 멤버에게 반드시 적용 할 수는 없다는 것입니다. "this"키워드를 사용하면 코드를 훨씬 더 쉽고 깔끔하게 읽을 수 있다고 생각합니다. 예제에서 if (foo == x)는 항상 매개 변수 foo를 참조합니다.
Scott Dorman

3
@TheCodeJunkie : 코드베이스에 많은 중복 문자가 있습니다.
Ed S.

15

그 이후로 매우 구체적이고 무의미한 스타일 규칙이있는 환경에서 작업 한 후 나만의 스타일을 만들었습니다. 이것은 내가 많이 앞뒤로 뒤집은 유형입니다. 마지막으로 개인 필드는 항상 _field가되고 로컬 변수는 절대 _가 아니며 소문자가되며 컨트롤의 변수 이름은 헝가리 표기법을 따르지 않으며 매개 변수는 일반적으로 camelCase가됩니다.

this.내 의견으로는 너무 많은 코드 노이즈가 추가 되는 키워드를 싫어합니다 . 나는 Resharper가 중복을 제거하는 것을 좋아합니다. 예어.

6 년 업데이트 :Dictionary<TKey,T> 특정 동시 액세스 사용을 위해 내부를 분석하고 개인 필드를 로컬 변수로 잘못 읽었습니다. 개인 필드는 지역 변수와 동일한 명명 규칙이 아니어야합니다. 밑줄이 있었다면 엄청나게 명백했을 것입니다.


18
this키워드는 현재 객체에 대한 보장 참조입니다. 당신은 밑줄로 그것을 얻지 못합니다. 혐오 할 필요가 없습니다 this.
Jason S

15
왜 '표준'을 발명합니까? '이.' 객체가 인스턴스 변수 'Class'임을 나타냅니다. 그것이 클래스 varible임을 알려줍니다. 다른 모든 것은 스택 변수입니다. 밑줄은 헝가리 표기법이 분해하는 동일한 나쁜 아이디어 더미에 속합니다.
Quarkly

4
@ DRAirey1이 너무 쉽게 놓칠 수 있습니다. 필요할 때 상태로 이상한 일을 끝내게됩니다.
Chris Marisic

3
@ChrisMarisic 당신은 물론의 사용법에 대한 당신의 의견에 오신 것을 환영합니다 _. 그러나 그것이 명확하지 않을 때 확립 된 표준으로 놓지 마십시오.
호감

3
"나만의 스타일을 만들려고 했어요"에서 당신을 잃었습니다.
rory.ap

12

밑줄이 마음에 듭니다. 소문자 이름을 다음과 같은 메소드 매개 변수로 사용할 수 있기 때문입니다.

public class Person
{
    string _firstName;

    public MyClass(string firstName)
    {
        _firstName = firstName;
    }

    public string FirstName
    {
        get { return _firstName; }
    }
}

39
공개 문자열 이름 {get; 개인 세트; }
Jason Jason

3
this키워드를 사용하여 소문자를 메소드 매개 변수로 계속 사용할 수 있습니다 . 지속적이고 논쟁의 여지가있는 "밑줄을 public MyClass(string firstName){ this.firstName = firstName; }

5
미래는 지금, public string FirstName { get; }그리고 지금도 세터는 여전히 생성자에서 사용할 수 있습니다
Chris Marisic

이 예에서는 this생성자에만 필요합니다. 다른 곳에서는 사용할 필요가 없습니다. 따라서 firstName필드 이름이 매우 잘 작동합니다.
Thomas Eyde

9

Martin이 언급 한 이유 때문에 개인 필드 앞에 밑줄을 사용하는 것이 좋으며 개인 필드가 IntelliSense에서 함께 정렬되기 때문입니다. 이것은 일반적으로 헝가리어 접두어 표기법의 악 함에도 불구하고 있습니다.

그러나 최근에는 개인 이유에 대해 밑줄 접두어를 사용하는 것이 왜 그런지 잘 모르지만 눈에 띄는 것으로 나타났습니다. 아마도 다른 사람이 알고 있습니까? 접두사 원칙일까요? 또는 컴파일 된 어셈블리 또는 다른 형식으로 밑줄을 치는 일반 유형의 이름 맹 글링과 관련이 있습니까?


4
나에게 _는 코드를 통해 _scanning 할 때 _words를 어수선하게 만듭니다. _more _like _like _every _을 멈추고 그것을 인정하고 _realize하는 것은 _sort의 제어 문자가 아닙니다. 또한 필드 이름의 첫 번째 유용한 문자를 한 열 오른쪽으로 실제로 밀어서 들여 쓰기를 방해합니다. 대부분의 C ++ 프로그래머는 믿을 수 없을 정도로 간결하고 읽기 어려운 심볼 / 머신 같은 코드를 작성하는 경향이 있고 C # 코드에서는이를 선호하지 않기 때문에 일반적으로 C ++를 싫어합니다.
Oskar Duveborn

23
나를 위해, 이것. 코드를 통해 빠르게 스캔 할 때 this.words를 어지럽히는 것은 이것을 읽는 것보다 덜 중요합니다. 이것을 인식하고 이것을 인식하십시오. 이것은 이것의 제어 문자가 아닙니다. 나는 많은 가끔 발견하는 것을 선호 _fieldFoo또는 _fieldBar내 사용량이 함께 어수선있는 것보다 this.fieldFoo또는 this.fieldBar. 나는 찾을 this.접두사가 훨씬 더 선도적 인 밑줄보다 거슬리는 할 수 있습니다.
AggieEric

아마도 경험상의 이러한 불일치는 공간이 허용되지 않는 구식 파일 시스템 또는 파일 전송 프로토콜에서 비롯 될 수 있다고 생각했습니다. 다른 한편으로 나는 처음부터 내 자신의 파일 이름에 공백을 항상 사용했던 것과 같은 파일 이름에 문제가 있습니다 ...
Oskar Duveborn

1
@AggieEric이 머리에 못을 박았습니다. 그의 문장을 읽는 것만으로도 두통이 생깁니다! 나는이 문제에서 수년 동안 MS 권장 사항을 고수하려고 노력했으며, this어디서나 작은 파란색 단어 를 읽는 것이 너무 어려워서 바로 거기에서 대단한 결정을 내 렸습니다. 지금, 나는 종교적으로 사용하는 this전용 속성 참조를 위해, 또는 I가 필요로 할 때 명시 적으로 구분 this하고 base. 각각 자신의 것으로 생각합니다 :-)
Riegardt Steyn

1
궁극적으로 구두점 문자로 시작하면 가독성이 손상되기 때문입니다. 그것은 모든 사람을 귀찮게하는 것 같지 않지만 나에게는 구두점으로 시작하는 것을 읽는 것이 부자연 스럽습니다. 코드가 영어와 비슷할수록 더 쉽게 읽을 수 있습니다. 또한 최신 IDE를 사용하면 로컬과 개인 구성원의 차이점을 구별하기가 쉽지 않습니다. 색상이 다르기 때문입니다.
Tim Long

5

Style Cop 권장 여부에 따라 .NET Framework를 파고 들면 멤버 변수에 대한 많은 "_"사용법이 표시됩니다. Style Cop 제작자가 권장하는 것은 무엇이든 대부분의 MS 직원이 사용하는 것이 아닙니다. :) 따라서 밑줄을 사용하겠습니다. 밑줄을 사용하여 개인적으로 훨씬 적은 실수를 저지르기 때문에 this (예 : this.varName = varName 대신 varName = varName 사용하면 실제로 붙어 있습니다)


3
밑줄은 .NET 핵심 스타일 가이드에도 권장됩니다 : github.com/dotnet/corefx/wiki/Coding-style
landoncz

3

나는 클래스 수준의 필드가 언어 디자인에서 실수라고 생각합니다. C #의 속성에 자체 로컬 범위가 있으면 선호합니다.

public int Foo
{
   private int foo;
   get
   {
      return foo;
   }
   set
   {
      foo = value;
   }
}

따라서 필드 사용을 완전히 중지 할 수 있습니다.

개인 필드에 밑줄을 붙이는 유일한 경우는 속성에 별도의 백업 필드가 필요한 경우입니다. 개인 필드를 사용 하는 유일한 시간이기도 합니다. (보호 필드, 내부 필드 또는 공용 필드를 사용하지 않기 때문에 필드 기간 만 사용할 수 있습니다.) 변수에 클래스 범위가 필요한 경우 클래스의 속성입니다.


C # 갱은 새로운 private int foo {get; set;} 구문 설탕.
Dana

그렇지; 내가 여기서 설명하는 것은 그것 없이는 완전히 불가능합니다.
Robert Rossney

당신이 설명하는 것은 "자동 구현 속성"입니다. 불행히도 Visual Basic.NET에서는 실제로 "숨겨진"_prefix 변수를 장면 뒤에 사용합니다. 즉, 자동 구현 된 속성 인 "Public Property Foo As Integer"가있는 경우 멤버 변수 선언 "Private _foo as 정수 "

아니요, 적어도 내 구현에서는 자동 구현 속성을 설명하지 않습니다. C # 또는 VB에 존재하지 않는 범위 지정 수준을 설명하고 있습니다. VB가 백업 필드의 이름을 바꾸는 간단한 방법을 선택한 것이 유감입니다. C #은 우연히 같은 이름의 변수를 만들지 않을 정도로 추악합니다.
Robert Rossney

3

개인 필드에 대한 _fieldName 표기법은 너무 쉽게 구분할 수 있습니다 . "this"를 사용합니다. 표기법을 어기는 것은 불가능합니다. _ 표기법을 어떻게 깨 뜨리겠습니까? 관찰 :

private void MyMethod()
{
  int _myInt = 1; 
  return; 
}

거기에서 나는 방금 네이밍 규칙을 위반했지만 컴파일됩니다. 나는 a) 헝가리어가 아니며 b) 명시 적 인 명명 규칙을 선호합니다. 나는 헝가리어 이름을 없애는 것을 선호하며 이것은 어떤 식 으로든 자격이 있습니다. 변수 이름 앞에 객체 유형 대신 액세스 수준이 있습니다.

변수 @my_number의 이름이 이름을 범위에 묶고 깨지지 않는 Ruby와 이것을 대조하십시오 .

편집 :이 답변은 부정적입니다. 상관 없어요.


11
개발자가 그것을 따르지 않을 수 있다고 말하는 것은 명명 규칙에 대한 정당한 비판이 아닙니다.
Robert Rossney

8
와, "깨기 쉬운"과 나의 정의는 완전히 반대입니다. 당신은 "의도적으로 부서지기 쉽다"는 것을 의미하지만, 다른 사람들은 아마도 " 실수 로 부서지기 쉽다"는 의미 일 것입니다 . 읽을 수있는 코드를 작성하는 데 어느 것이 더 적합한 지 알아 내기 위해 독자에게 연습으로 남겨 두겠습니다.
Konrad Rudolph

6
@ Konrad : 당신은 "독자에게 운동으로"라고 말할 때 소박하게 들립니다. 이것은 수학 교과서가 아닙니다.
jcollum 2016 년

3
현재 약간 부정적입니다. :) 우리가 현재에 대해 조정하는 동안, 나는 또한 밑줄 규칙을 싫어합니다. 내 생각에 그것은 헝가리어 표기법과 다르지 않으며 솔직히 말하면 눈을 피가 흘립니다 (가독성이 떨어짐). 우리는 C #으로 헝가리 표기법을 버렸으며 IDE를 믿지 않는 마지막 흔적을 들려야 할 때입니다.
Tim Long

1
MS는 실제로 밑줄을 C # 스타일 가이드에 사용해서는 안된다고 말합니다. blogs.msdn.microsoft.com/brada/2005/01/26/…- 섹션 2.6-Brad Abrams가 최소한 우리와 동의하는 것처럼 보입니다!
jcollum

1

어셈블리가 CLS 규격이되게하려면 assemblyinfo 파일에서 CLSCompliant 속성을 사용할 수 있습니다. 그러면 코드에 cls 호환되지 않는 내용이 포함되어 있으면 컴파일러에서 불만을 제기합니다.

그런 다음 경우에만 다른 두 개의 속성이 있으면 컴파일러에서 오류가 발생합니다. 반면, 같은 클래스에 개인 필드와 공용 부동산이 있으면 아무런 문제가 없습니다.

(그러나 항상 개인 멤버 앞에 밑줄을 붙입니다. 코드를 읽을 때 특정 변수가 멤버 필드임을 분명히하는 데 도움이됩니다).


0

두 가지 이유로 개인 필드 앞에 밑줄을 사용하고 싶습니다. 이미 언급 한 바와 같이, 필드는 코드 및 Intellisense의 관련 속성에서 두드러집니다. 두 번째 이유는 VB로 코딩하든 C #으로 코딩하든 동일한 명명 규칙을 사용할 수 있기 때문입니다.


1
우와, 현명한가? 밑줄이 VB에서 '다음 줄에 계속'을 의미하지 않습니까?
JBR 윌킨슨

1
밑줄 뒤에 공백이있는 경우에만 해당됩니다.
Rob Windsor

초기 편지 : 나를 위해 잘 띄는 소문자 나 대문자 인
ManoDestra

0

어떤 의미도 없습니다. 코드가 컴파일 될 때 컴파일러에게 중요한 것은 필드 / 프로퍼티의 네임 스페이스와 가시성입니다. 밑줄은 식별자의 이름을 지정할 때 다른 문자와 마찬가지로 중요합니다. 실제 요령은 당신과 주변 사람들이 이해할 수있는 관습을 사용하는 것입니다.

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