다음을 통해 공유


중첩 형식(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 클래스에서 새로 선언된 보호된 멤버"가 생성됩니다.

    또한 중첩된 형식을 외부에 표시하도록 하는 것은 코드 품질 규칙 CA1034 "중첩 형식을 표시해서는 안 됩니다"를 위반한다는 점에 유의하세요.

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

다음 예제에서는 Nested 클래스를 공용으로 만듭니다.

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();

참고하십시오