[c#] C #에서 “private”키워드를 작성하는 이유는 무엇입니까?

지금까지 내가 아는 한, private기본값은 모든 곳에서 C #에서 (나는 쓰기하지 않으면 의미 public, protected, internal, 등이 될 것입니다 private기본적으로). (내가 틀렸다면 정정하십시오.)

그렇다면 그 키워드를 쓰는 이유는 무엇이며, 회원들에게도 존재하는 이유는 무엇입니까?

예를 들어 이벤트 핸들러가 자동 생성되면 다음과 같습니다.

private void RatTrap_MouseEnter(object sender, CheeseEventArgs e)
{

}

그러나 그것이 묵시적이고 기본값이라면 왜 비공개로 작성합니까? 초보 개발자 (C # 기본값인지 모르는)가 비공개라는 것을 알 수 있도록? 아니면 컴파일러에 차이가 있습니까?

또한 “비공개”(단독)를 작성 하면 회원의 접근성 변경되는 경우가 있습니까?



답변

AFAIK, private은 C #의 모든 곳에서 기본값입니다. 즉, public, protected, internal 등을 작성하지 않으면 기본적으로 비공개가됩니다. (잘못된 경우 수정하십시오).

이것은 사실이 아닙니다. 네임 스페이스 (클래스, 구조체, 인터페이스 등) 내에 정의 된 유형 은 기본적 으로 내부 입니다. 또한 다른 유형의 멤버는 기본 액세스 권한이 다릅니다 (예 : 인터페이스 멤버의 경우 공용). 자세한 내용 은 MSDN의 접근성 수준 을 참조하십시오 .

또한,

그렇다면 그 키워드를 작성하는 이유는 무엇이며, 심지어 존재하는 이유는 무엇입니까?

이것을 명시 적으로 지정하면 유형을 매우 명시 적으로 비공개로 만들려는 의도를 나타내는 데 도움이됩니다. 이는 시간이 지남에 따라 코드를 유지 관리하는 데 도움이됩니다. 이를 통해 다른 개발자 (또는 본인)가 구성원이 기본적으로 비공개인지 또는 의도적으로 있는지 등을 알 수 있습니다.


답변

AFAIK, private은 C #의 모든 곳에서 기본값입니다.

정답이 아닙니다. 기본값은 “이 선언에 사용할 수있는 가장 제한된 액세스”입니다. 예를 들어 최상위 유형의 경우 기본값은 internal; 중첩 유형의 경우 기본값은 private입니다.

그렇다면 그 키워드를 작성하는 이유는 무엇이며, 심지어 존재하는 이유는 무엇입니까?

그것은 두 가지 이유 때문에 그것을 명시 적으로 만듭니다.

  • 귀하의 질문에 따라 기본값을 모르는 사람들에게 더 명확 해집니다 (개인적으로이 주장을 좋아 한 적이 없지만 언급 할 가치가 있다고 생각했습니다).
  • 기본값을 그대로 사용하는 것이 아니라 일부러 비공개로 설정 한 것 같은 인상을줍니다 .

마지막 부분은 다음과 같습니다.

또한 “비공개”(단독)를 작성하면 회원의 접근성이 변경되는 경우가 있습니까?

예, 재산의 절반을 다른 것보다 더 제한적으로 만드는 경우 :

// Public getter, public setter
public int Foo { get; set; }

// Public getter, private setter
public int Bar { get; private set; }

나는 가능한 모든 곳에서 기본값을 사용 했지만 (부분적으로 Eric Lippert에 의해) 당신이 그것에 대해 생각 하고 무언가를 비공개로 만들기 로 결정 했음을 분명히 하는 것이 좋은 생각 이라고 확신 했습니다 .

개인적으로 유형 선언에 대해 봉인 / 봉인되지 않은 경우에도 그렇게하는 방법이 있었으면 합니다. 기본값 도 없을 수도 있습니다 . 많은 개발자 (내가 조심하지 않으면 포함)가 봉인하는 것보다 노력이 적기 때문에 봉인되지 않은 클래스를 남겨 두는 것 같습니다.


답변

private시각적 혼란을 추가합니다. 그것이 일을 명시 적으로 만든다고 주장하는 사람들에게 나는 물을 것입니다 : 당신도 수학으로 이것을합니까? 예를 들면 :

var answer = a + b / c;

주위에 중복 괄호가 없으면 불분명 b / c합니까?

C #의 규칙은 매우 간단합니다. 기본적으로 모든 것이 가능한 한 비공개에 가깝습니다. 따라서 기본값보다 잘 보이게하려면 수정자를 추가하십시오. 그렇지 않으면 코드에 불필요한 키워드를 추가하지 마십시오.


답변

내가 아는 한, private은 C #의 모든 곳에서 기본값입니다.

명시 적으로 선언하는 개인 , 당신은 의미 알고 는 비공개입니다. 당신이 아는 한 그것이 기본값이기 때문입니다. 또한 코드를 보는 다른 사람이 코드가 무엇인지 알고 있음을 의미합니다.

“그렇다고 생각한다”, “그렇다고 확신한다”등 은 없습니다 . 그리고 모두가 같은 페이지에 있습니다.

저는 C # 개발자가 아닙니다 . 명시 적으로 private로 선언되지 않은 일부 코드로 작업해야 한다면 아마도 내부 코드 라고 가정 할 것입니다 .

나는 사물이 암묵적으로 설정되는 것을 싫어합니다. 명시 적으로 설정되었을 때만 큼 명확하지 않습니다.


답변

가독성-모든 사람이 비공개가 기본 동작이라는 것을 아는 것은 아닙니다.

의도-어떤 이유로 든 속성을 비공개로 구체적으로 선언했음을 명확하게 표시합니다.


답변

가독성, 의도의 시연은 제가 생각할 수있는 두 가지 큰 이유입니다.


답변

가시성을 명시 적으로 지정하는 한 가지 좋은 이유는 현재있는 컨텍스트의 기본값에 대해 생각할 필요가 없기 때문입니다.

또 다른 좋은 이유는 FxCop 이 그렇게하라고 하기 때문 입니다.