중첩 형식(C# 프로그래밍 가이드)

클래스, 구조체 또는 인터페이스 내에서 선언된 형식을 중첩 형식이라고 합니다. 예를 들면 다음과 같습니다.

public class Container
{
    class Nested
    {
        Nested() { }
    }
}

외부 형식이 클래스, 인터페이스 또는 구조체 중 무엇인지에 관계없이, 중첩 형식은 기본적으로 private으로 설정됩니다. 즉, 포함하는 형식에서만 액세스할 수 있습니다. 앞의 예제에서 Nested 클래스는 외부 형식에서 액세스할 수 없습니다.

다음과 같이 액세스 한정자를 지정하여 중첩 형식의 접근성을 정의할 수도 있습니다.

  • 클래스의 중첩 형식은 public, protected, internal, protected internal, private 또는 private protected일 수 있습니다.

    그러나 sealed 클래스 내에서 protected, protected internal 또는 private protected 중첩 클래스를 정의하면 컴파일러 경고 CS0628, “sealed 클래스에 새 protected 멤버가 선언되었습니다.”가 생성됩니다.

    또한 중첩 형식을 외부에서 볼 수 있도록 하는 것은 코드 품질 규칙 CA1034("중첩 형식은 노출되면 안됨")를 위반한다는 점에 유의하세요.

  • 구조체의 중첩 형식은 public, internal 또는 private일 수 있습니다.

다음 예제에서는 Nested 클래스를 public으로 설정합니다.

public class Container
{
    public class Nested
    {
        Nested() { }
    }
}

중첩 형식(내부 형식)은 이 형식을 포함하고 있는 형식(외부 형식)에 액세스할 수 있습니다. 포함하는 형식에 액세스하려면 중첩 형식의 생성자에 인수로 전달합니다. 예시:

public class Container
{
    public class Nested
    {
        private Container? parent;

        public Nested()
        {
        }
        public Nested(Container parent)
        {
            this.parent = parent;
        }
    }
}

중첩 형식은 이 형식을 포함하는 형식에 액세스할 수 있는 모든 멤버에 액세스할 수 있습니다. 또한 상속 및 보호된 멤버를 포함하여 외부 형식의 개인 및 보호된 멤버에 액세스할 수 있습니다.

위 선언에서 Nested 클래스의 전체 이름은 Container.Nested입니다. 이 이름은 다음과 같이 중첩된 클래스의 새 인스턴스를 만드는 데 사용됩니다.

Container.Nested nest = new Container.Nested();

참고 항목