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.