다음을 통해 공유


액세스 가능 도메인(C# 참조)

멤버의 액세스 가능 도메인은 프로그램 섹션에서 멤버가 참조될 수 있는 범위를 지정합니다. 멤버가 다른 형식 내에 중첩되어 있을 경우, 이 멤버의 액세스 가능 도메인은 멤버의 액세스 가능성 수준 및 직접 포함하는 형식의 액세스 가능 도메인에 의해 결정됩니다.

최상위 수준 형식의 액세스 가능 도메인은 가장 작을 경우 해당 최상위 수준 형식이 선언된 프로젝트의 프로그램 텍스트가 됩니다. 즉, 도메인은 이 프로젝트의 소스 파일을 모두 포함합니다. 중첩 형식의 액세스 가능 도메인은 가장 작을 경우 해당 중첩 형식이 선언된 형식의 프로그램 텍스트가 됩니다. 즉, 이 도메인은 모든 중첩 형식을 포함하는 형식 본문입니다. 중첩 형식의 액세스 가능 도메인은 포함하는 형식의 액세스 가능 도메인을 벗어날 수 없습니다. 이러한 개념은 다음 예제에 설명되어 있습니다.

예제

이 예제에는 최상위 형식인 T1과 두 개의 중첩 클래스 M1 및 M2가 있습니다. 각 클래스는 서로 다른 액세스 가능성이 선언된 필드를 포함하고 있습니다. Main 메서드에서 각 문 뒤에 붙은 주석은 각 멤버의 액세스 가능 도메인을 나타냅니다. 액세스할 수 없는 멤버를 참조하려는 문은 주석으로 처리되어 있습니다. 액세스할 수 없는 멤버를 참조하려고 할 때 발생하는 컴파일러 오류를 보려면 주석을 한 번에 하나씩 제거하십시오.


namespace AccessibilityDomainNamespace
{
    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# 구문 및 사용법에 대한 신뢰할 수 있는 소스입니다.

참고 항목

참조

C# 키워드

액세스 한정자(C# 참조)

액세스 가능성 수준(C# 참조)

액세스 가능성 수준 사용에 대한 제한(C# 참조)

액세스 한정자(C# 프로그래밍 가이드)

public(C# 참조)

private(C# 참조)

protected(C# 참조)

internal(C# 참조)

개념

C# 프로그래밍 가이드

기타 리소스

C# 참조