업데이트 :이 질문은 2014 년 9 월 내 블로그의 주제였습니다 . 좋은 질문 감사합니다!
컴파일러 팀 자체 내에서도이 질문에 대해 상당한 논쟁이 있습니다.
우선, 규칙을 이해하는 것이 현명합니다. 클래스 또는 구조체의 공용 멤버 는 포함 형식에 액세스 할 수있는 모든 항목에 액세스 할 수있는 멤버입니다 . 따라서 내부 클래스의 공개 멤버는 사실상 내부입니다.
이제 내부 클래스가 주어지면 어셈블리에서 액세스하려는 멤버를 공개 또는 내부로 표시해야합니까?
내 의견은 : 그런 회원들을 공개로 표시하십시오.
"public"을 사용하여 "이 멤버는 구현 세부 정보가 아닙니다"를 의미합니다. 보호 된 멤버는 구현 세부 사항입니다. 파생 된 클래스 작업을 수행하는 데 필요한 내용이 있습니다. 내부 멤버는 구현 세부 사항입니다. 이 어셈블리 내부의 다른 무언가가 올바르게 작동하려면 멤버가 필요합니다. 공용 구성원은 "이 구성원은이 개체에서 제공하는 주요 문서화 된 기능을 나타냅니다."라고 말합니다.
기본적으로 내 태도는 :이 내부 수업을 공개 수업으로 만들기로 결정했다고 가정 해 봅시다. 이를 위해 클래스의 접근성이라는 것을 정확히 변경하고 싶습니다 . 내부 클래스를 공개 클래스로 바꾸는 것이 내부 멤버도 공개 멤버로 바꿔야 한다는 것을 의미하는 경우 해당 멤버는 클래스 의 공개 영역 의 일부였으며 처음에는 공개되어야했습니다.
다른 사람들은 동의하지 않습니다. 멤버 선언을 한눈에보고 내부 코드에서만 호출되는지 여부를 즉시 알고 싶다는 조건이 있습니다.
불행히도, 그것이 항상 잘 작동하는 것은 아닙니다. 예를 들어, 내부 인터페이스를 구현하는 내부 클래스는 클래스의 공용 영역의 일부 이므로 구현 멤버를 public으로 표시해야합니다 .