액세스 가능 도메인(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# 구문 및 사용법에 대한 신뢰할 수 있는 소스입니다.