문제

"개인"이 클래스 멤버의 기본 액세스 수정 자라는 점을 고려하면 키워드가 필요한 이유는 무엇입니까?

도움이 되었습니까?

해결책

컴파일러가 아닌 귀하 (및 미래 관리자)를위한 것입니다.

다른 팁

여기에는 일정량의 잘못된 정보가 있습니다.

"기본 액세스 수정자는 비공개가 아니라 내부입니다."

글쎄, 그것은 당신이 말하는 것에 달려 있습니다. 유형의 구성원의 경우 개인입니다. 최상위 유형 자체의 경우 내부입니다.

"개인은 기본값 일뿐입니다 행동 양식 유형에 "

아니요, 기본값입니다 전원 유형 - 속성, 이벤트, 필드, 운영자, 생성자, 방법, 중첩 유형 및 내가 잊어 버린 모든 것.

"실제로, 클래스 나 구조물이 액세스 수정 자로 선언되지 않으면 기본값은 내부로 기본적으로" "

최상위 유형의 경우에만. 중첩 유형의 경우 개인입니다.

한 부분에 대한 속성 액세스를 제한하는 것 외에는 기본적으로 기본적으로 기본적으로 "가능한 한 제한적"입니다.

개인적으로, 나는 명시 적인지에 대한 문제에 대해 이야기합니다. 기본값을 사용하기위한 "Pro"는 가장 제한적인 레벨보다 더 눈에 띄는 것을 만드는 곳이라면 어디에서나 강조한다는 것입니다. 그것을 명시 적으로 지정하기위한 "Pro"는 위의 규칙을 모르는 사람들에게 더 분명하다는 것입니다. 그리고 당신이 그것에 대해 조금 생각했음을 보여줍니다.

Eric Lippert는 명백한 형태와 함께 진행되며, 나는 그렇게 몸을 기울이기 시작했습니다.

보다 http://csharpindepth.com/viewnote.aspx?noteid=54 이것에 대해 조금 더.

명백함. 기본값을 사용하지 않으며 항상 수정자를 명시 적으로 추가합니다.

이것은 기본값이 '패키지'(C#의 '내부'와 거의 동일) 인 Java 배경 때문일 수 있으므로 차이는 항상 나를 괴롭 혔습니다. 나는 명백함이 바람직하다는 것을 알았습니다.

나는 또한 이제 기본값이 명시 적으로 표시되는 Resharper를 사용하므로 편견을 확인하고 강화합니다. :)

개인 수정자는 의도를 설명합니다.

개인 회원 변수는 클래스 외부에서 직접 조작을위한 것이 아닙니다. GET/SET 액세서는 변수에 대해 생성되거나 생성되지 않을 수 있습니다.

개인 방법은 클래스 밖에서 사용하기위한 것이 아닙니다. 이것은 내부 기능만을위한 것일 수 있습니다. 또는 값을 전달하지 않고 클래스의 구성을 방지하기 위해 기본 생성자를 비공개로 만들 수 있습니다.

개인 수정 자 (및 다른 사람들)는 자체 문서화 코드를 작성하는 데 유용한 방법이 될 수 있습니다.

Jon Skeet이 그의 책에서 지적한 바와 같이 C# 깊이, C#에는 효과를 달성하기 위해 개인 키워드가 필요한 곳이 있습니다.

내 메모리가 올바르게 작용하는 경우, 비공개 키워드는 비공개 접근성보다 더 큰 경우 개인적으로 범위를 둔 속성 getter 또는 setter를 만들 수있는 유일한 방법입니다. 예시:

public bool CanAccessTheMissileCodes
{
    get { return canAccessTheMissileCodes; }
    private set { canAccessTheMissileCodes = value; }
}

개인 키워드는입니다 필수의 이를 달성하기 위해 추가 속성 액세스 가능성 수정자는 범위를 좁힐 수 있으므로 넓어지지 않습니다. (그렇지 않으면 개인 (기본적으로) 속성을 만들고 공개 수정자를 추가 할 수 있습니다.)

개인은 기본값 일뿐입니다 행동 양식 유형에서는 개인 수정자가 다른 곳에서 사용됩니다.

에서 C# 언어 사양 3.0 (MSDN) 섹션 3.5.1

회원 선언이 발생하는 맥락에 따라 특정 유형의 선언 된 접근성 만 허용됩니다. 또한 회원 선언에 액세스 수정자가 포함되어 있지 않은 경우, 선언이 수행되는 컨텍스트는 기본적으로 선언 된 접근성을 결정합니다.

  • 네임 스페이스에는 암시 적으로 공개 선언 접근성이 있습니다. 네임 스페이스 선언에는 액세스 수정자가 허용되지 않습니다.
  • 컴파일 장치 또는 네임 스페이스에서 선언 된 유형은 공개 또는 내부 선언 접근성을 가질 수 있으며 내부 선언 된 접근성에 대한 기본값이있을 수 있습니다.
  • 클래스 멤버 5 가지 종류의 선언 된 접근성과 개인 선언 된 접근성에 대한 기본값을 가질 수 있습니다. (클래스 구성원으로 선언 된 유형은 5 가지 종류의 선언 된 접근성 중 하나를 가질 수있는 반면, 네임 스페이스의 구성원으로 선언 된 유형은 공개 또는 내부 신고 된 접근성만을 가질 수 있습니다.)
  • Structs는 암시 적으로 봉인되어 있기 때문에 Propubt 멤버는 공개, 내부 또는 개인 선언 된 접근성 및 개인 선언 된 접근성에 대한 불이행을 가질 수 있습니다. 구조물에 도입 된 구조물 멤버 (즉, 해당 구조물에 의해 상속되지 않음)는 내부 선언 접근성을 보호하거나 보호 할 수 없습니다. (구조물의 구성원으로 선언 된 유형은 공개, 내부 또는 개인 선언 된 접근성을 가질 수있는 반면, 네임 스페이스의 구성원으로 선언 된 유형은 공개 또는 내부 신고 된 접근성만을 가질 수 있습니다.)
  • 인터페이스 멤버는 암묵적으로 공개 선언 접근성을 가지고 있습니다. 인터페이스 멤버 선언에는 액세스 수정자가 허용되지 않습니다.
  • 열거 회원은 암묵적으로 공개 선언 접근성을 가지고 있습니다. 열거 회원 선언에는 액세스 수정자가 허용되지 않습니다.

완료. 그리고 어떤 사람들은 실제로 자신의 방법에 대한 액세스 수정 자에 대한 코드에서 명시 적으로 선호합니다.

대칭과 모든 것이 명시적인 코딩 스타일을 준수하기 위해 (개인적으로 나는 그것을 좋아합니다 ...)

개인을 사용하여 귀하의 의도를 명시 적으로 신호하고 코드를 지원할 다른 사람들을위한 단서를 남깁니다.)

일부 코딩 스타일은 모든 "공개"항목을 먼저 놓고 "개인"항목을 배치하는 것이 좋습니다. "개인"키워드가 없으면 그런 식으로 할 수 없었습니다.

업데이트 : 이것에 대한 "C#"태그를 알지 못했기 때문에 대답은 C#보다 C ++에 더 많이 적용됩니다.

나는 보통 개인을 떠나지 만 코드를 정렬하는 데 유용하다고 생각합니다.

private   int    x;
public    string y;
protected float  z;

VS :

int x;

public    string y;
protected float  z;

처럼 로버트 폴슨 그의 대답에서 private 수정자는 회원뿐만 아니라 유형. 유형의 기본값은 중요합니다 internal 사용하면 의도하지 않게 누출 될 수 있습니다 InternalSvisibleToattribute.

실제로, 클래스 나 구조물이 액세스 수정 자로 선언되지 않으면 기본값은 내부로 기본값을 얻습니다.

따라서 비공개로 만들고 싶다면 개인을 사용하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top