일반 클래스 정의는 public, internal만 허용하지만 중첩 클래스(클래스 내부의 클래스) 정의는 모든 접근 제한자를 허용한다.
클래스의 멤버 역시 모든 접근 제한자를 허용한다.
단 추상, 가상 메서드는 private으로 설정할 수 없다. 상속과 재정의를 전제로 생긴 기능인데 private으로 설정하면 자식 클래스에서 접근할 수 없기 때문이다.
접근 제한자를 명시하지 않을 경우
1. 클래스 정의: internal
2. 중첩 클래스 정의: private
3. 클래스 멤버 정의: private
클래스 내부에서만 접근이 가능하다.
클래스 내부 혹은 파생 클래스에서만 접근이 가능하다.
어디서든 접근이 가능하다.
동일한 어셈블리 내에서만 접근이 가능하다.
동일한 어셈블리에 한해서는 public과 동일하다.
internal || protected
internal && protected
private이 붙었지만 전혀 private과 관련이 없다.
C# 7.2부터 지원한다.