C # 클래스 및 멤버 (필드, 메서드 등)에 대한 기본 가시성


164

C #의 다양한 측면에 대한 기본 가시성에 대한 참조를 찾으려고합니다. 클래스 타입, 필드, 메소드, 열거 형 등

누군가 기본 목록과 함께이 목록을 제공 할 수 있습니까 (예 : 접두사 수정 자 없음)?



8
나는 그것을 중복으로 생각하지 않을 것입니다 ... 그 질문은 구체적입니다 (이것의 기본값은 무엇입니까?), 이것은 광범위합니다 (모든 기본값은 무엇입니까?)
WernerCD

답변:


266

찾고있는 모든 정보는 여기여기 에서 찾을 수 있습니다 ( Reed Copsey에게 감사드립니다 ).

첫 번째 링크에서 :

네임 스페이스 내에서 직접 선언 된 클래스 및 구조체 (즉, 다른 클래스 또는 구조체 내에 중첩되지 않은 클래스)는 공개 또는 내부 일 수 있습니다. 액세스 수정자가 지정되지 않은 경우 내부가 기본값 입니다.

...

중첩 클래스 및 구조체를 포함하여 클래스 멤버 및 구조체 멤버 의 액세스 수준은 기본적으로 비공개 입니다.

...

인터페이스는 기본적으로 내부 액세스입니다.

...

대의원 은 수업과 구조체처럼 행동합니다. 기본적 으로 네임 스페이스 내에서 직접 선언되면 내부 액세스 권한이 있고 중첩시 개인 액세스 권한이 있습니다 .


두 번째 링크에서 :

다른 유형에 중첩되지 않은 최상위 유형 은 내부 또는 공개 액세스 가능성 만 가질 수 있습니다. 이러한 유형기본 접근성은 internal 입니다.

그리고 중첩 유형의 경우 :

기본 멤버 접근성 멤버
---------- ----------------------------
열거 형 공개
개인 수업
공용 인터페이스
개인 구조

6
Reed의 정보를 잘 정리했지만 그러한 액세스 한정자가 메소드에도 적용되도록 지정하는 것을 잊었습니다.
Joel

4
@Joel 무슨 뜻인가요? 그는 분명히 "회원"이라고 말합니다. 구성원은 데이터와 행동이므로 방법을 포함합니다.
rism

vb.net 개발자가 이것을보고있는 경우 vb는 다릅니다. vb 클래스 멤버의 기본 범위는 Public입니다. Enum회원도 있습니다 Public. 가능성이 높기 때문에 특정 시점에서 c # 개발자가 번역하거나 읽을 수 있기 때문에 명시 적 범위를 사용하는 것이 혼란스럽지 않을 수 있습니다. 불행히도 vb.net의 코드 생성은이 작업을 수행하지 않습니다.
toddmo

클래스 내부의 중첩 인터페이스는 기본적으로 내부가 아니라 개인 인터페이스라고 덧붙입니다.
Frank Bryce

13

MSDN에서 :

최상위 유형의 다른 유형에 중첩되지 않은, 단지 수 있습니다 internal또는 public접근성. 이러한 유형의 기본 접근성은 internal입니다.


다른 유형의 멤버 인 중첩 유형 은 다음 표에 표시된대로 접근성을 선언 할 수 있습니다.

기본 중첩 멤버 접근성 및 허용 된 접근성 수정 자

출처 : 접근성 수준 (C # 참조) (12 월 (6) , 2017)


9

기본적으로 클래스의 액세스 수정자는입니다 internal. 즉, 동일한 어셈블리 내에서 클래스에 액세스 할 수 있습니다. 그러나 다른 어셈블리에서 클래스에 액세스하려면 공개해야합니다.


19
이 정보는 이미 다른 답변에있었습니다. 제공 할 추가 정보가 있거나 다른 답변이 잘못되었다고 생각되는 경우에만 질문, 특히 이와 같은 질문에 답변해야합니다. 어쨌든 Stack Overflow에 오신 것을 환영합니다.
Gorpik

다른 어셈블리에서 액세스 할 수 있도록 클래스를 반드시 공개 할 필요는 없습니다. InternalsVisibleToAttribute 클래스를 사용할 수 있습니다[assembly:InternalsVisibleTo("Friend1b")]
adam

0

기본적으로입니다 private. 중첩되지 않는 한 클래스는 internal입니다.


1
열거 형은 기본적으로 공개되어 있지 않습니까?
Ryan Peters

4
@Jay : 중첩되지 않는 한. @Ryan : 아니요, 중첩되지 않은 열거 형은 기본적으로 내부입니다.
Jon Skeet

2
@Ryan : 열거 형 멤버는 기본적으로 공개이지만 열거 형 자체는 내부입니다.
리드 콥시

@ReedCopsey 그러나 내가 배우고있는 책은 분명히 말한다 enum members are private by default, so to use them outside the enum we should declare them as public. 왜 책이 당신의 말과 모순되는지 설명해 주시겠습니까? 감사.

@ user5794376 (명확하게 삭제 된 계정)이 무엇을 읽고 있는지에 상관없이, 그들이 책에있는 말이 사실이라면 모든 1 성급 리뷰를 받아야합니다. 열거 형 멤버가 기본적으로 공개되어 있다는 사실을 알기 위해서는 Microsoft Docs 만 살펴볼 필요가 있으며 열거 형이 명시 적으로 표시되지 않는 것이 일반적인 관행입니다.
Rodney S. Foley
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.