다음을 통해 공유


접근성 도메인(C# 참조)

멤버의 접근성 도메인은 해당 멤버를 참조할 수 있는 프로그램 섹션을 지정합니다. 멤버가 다른 형식 내에 중첩된 경우 멤버의 접근성 수준 과 즉시 포함된 형식의 접근성 도메인이 접근성 도메인을 결정합니다.

C# 언어 참조는 가장 최근에 릴리스된 C# 언어 버전을 문서화합니다. 또한 예정된 언어 릴리스의 공개 미리 보기 기능에 대한 초기 설명서도 포함되어 있습니다.

설명서는 언어의 마지막 세 버전 또는 현재 공개 미리 보기에서 처음 도입된 기능을 식별합니다.

팁 (조언)

C#에서 기능이 처음 도입된 시기를 찾으려면 C# 언어 버전 기록에 대한 문서를 참조하세요.

최상위 형식의 접근성 도메인에는 항상 선언하는 프로젝트의 프로그램 텍스트 이상이 포함됩니다. 즉, 도메인에는 프로젝트의 모든 원본 파일이 포함됩니다. 중첩된 형식의 접근성 도메인에는 항상 선언하는 형식의 프로그램 텍스트 이상이 포함됩니다. 즉, 도메인은 모든 중첩된 형식을 포함하는 형식 본문입니다. 중첩된 형식의 접근성 도메인은 포함하는 형식의 액세스 가능성 도메인을 초과하지 않습니다. 다음 예제에서는 이러한 개념을 보여 줍니다.

이 예제에는 최상위 형식 T1과 두 개의 중첩 클래스 및 M1M2. 클래스에는 선언된 액세스 권한이 다른 필드가 포함됩니다. 메서드에서 Main 주석은 각 문을 따라 각 멤버의 접근성 도메인을 나타냅니다. 액세스할 수 없는 멤버를 참조하려는 문이 주석 처리됩니다. 액세스할 수 없는 멤버를 참조하여 발생하는 컴파일러 오류를 확인하려면 주석을 한 번에 하나씩 제거합니다.

public class T1
{
    public static int publicInt;
    internal static int internalInt;
    private static int privateInt = 0;

    static T1()
    {
        // T1 can access public or internal members
        // in a public or private (or internal) nested class.
        M1.publicInt = 1;
        M1.internalInt = 2;
        M2.publicInt = 3;
        M2.internalInt = 4;

        // Cannot access the private member privateInt
        // in either class:
        // M1.privateInt = 2; //CS0122
    }

    public class M1
    {
        public static int publicInt;
        internal static int internalInt;
        private static int privateInt = 0;
    }

    private class M2
    {
        public static int publicInt = 0;
        internal static int internalInt = 0;
        private static int privateInt = 0;
    }
}

class MainClass
{
    static void Main()
    {
        // Access is unlimited.
        T1.publicInt = 1;

        // Accessible only in current assembly.
        T1.internalInt = 2;

        // Error CS0122: inaccessible outside T1.
        // T1.privateInt = 3;

        // Access is unlimited.
        T1.M1.publicInt = 1;

        // Accessible only in current assembly.
        T1.M1.internalInt = 2;

        // Error CS0122: inaccessible outside M1.
        //    T1.M1.privateInt = 3;

        // Error CS0122: inaccessible outside T1.
        //    T1.M2.publicInt = 1;

        // Error CS0122: inaccessible outside T1.
        //    T1.M2.internalInt = 2;

        // Error CS0122: inaccessible outside M2.
        //    T1.M2.privateInt = 3;

        // Keep the console open in debug mode.
        System.Console.WriteLine("Press any key to exit.");
        System.Console.ReadKey();
    }
}

C# 언어 사양

자세한 내용은 C# 언어 사양을 참조하세요. 언어 사양은 C# 구문 및 사용의 최종 소스입니다.

참고하십시오