선언에서 형식을 지정할 때 형식의 접근성 수준이 멤버의 접근성 수준 또는 다른 형식의 접근성 수준에 종속되어 있는지 확인합니다. 예를 들어 직접 기본 클래스는 파생 클래스만큼 액세스 가능해야 합니다. 다음 선언에서는 기본 클래스 BaseClass 에 액세스할 수 없는 경우보다 MyClass컴파일러 오류가 발생합니다.
class BaseClass {...}
public class MyClass: BaseClass {...} // Error
다음 표에는 선언된 접근성 수준에 대한 제한 사항이 요약되어 있습니다.
| 컨텍스트 | 비고 |
|---|---|
| 클래스 | 클래스 형식의 직접 기본 클래스는 적어도 클래스 형식 자체만큼 액세스할 수 있어야 합니다. |
| 인터페이스 | 인터페이스 형식의 명시적 기본 인터페이스는 적어도 인터페이스 형식 자체만큼 액세스할 수 있어야 합니다. |
| 대표자 | 대리자 형식의 반환 형식 및 매개 변수 형식은 적어도 대리자 형식 자체만큼 액세스할 수 있어야 합니다. |
| 상수 | 상수의 형식은 상수 자체만큼 액세스 가능해야 합니다. |
| 필드 | 필드의 형식은 적어도 필드 자체만큼 액세스할 수 있어야 합니다. |
| 메서드 | 메서드의 반환 형식 및 매개 변수 형식은 적어도 메서드 자체만큼 액세스할 수 있어야 합니다. |
| 속성 | 속성의 형식은 적어도 속성 자체만큼 액세스할 수 있어야 합니다. |
| 이벤트 | 이벤트의 형식은 이벤트 자체만큼 액세스 가능해야 합니다. |
| 인덱서 | 인덱서의 형식 및 매개 변수 형식은 적어도 인덱서 자체만큼 액세스할 수 있어야 합니다. |
| 연산자 | 연산자의 반환 형식 및 매개 변수 형식은 적어도 연산자 자체만큼 액세스할 수 있어야 합니다. |
| 생성자 | 생성자의 매개 변수 형식은 적어도 생성자 자체만큼 액세스할 수 있어야 합니다. |
예시
다음 예제에서는 다른 형식의 잘못된 선언을 포함합니다. 각 선언 다음의 주석은 예상되는 컴파일러 오류를 나타냅니다.
// Restrictions on Using Accessibility Levels
// CS0052 expected as well as CS0053, CS0056, and CS0057
// To make the program work, change access level of both class B
// and MyPrivateMethod() to public.
using System;
// A delegate:
delegate int MyDelegate();
class B
{
// A private method:
static int MyPrivateMethod()
{
return 0;
}
}
public class A
{
// Error: The type B is less accessible than the field A.myField.
public B myField = new B();
// Error: The type B is less accessible
// than the constant A.myConst.
public readonly B myConst = new B();
public B MyMethod()
{
// Error: The type B is less accessible
// than the method A.MyMethod.
return new B();
}
// Error: The type B is less accessible than the property A.MyProp
public B MyProp
{
set
{
}
}
MyDelegate d = new MyDelegate(B.MyPrivateMethod);
// Even when B is declared public, you still get the error:
// "The parameter B.MyPrivateMethod is not accessible due to
// protection level."
public static B operator +(A m1, B m2)
{
// Error: The type B is less accessible
// than the operator A.operator +(A,B)
return new B();
}
static void Main()
{
Console.Write("Compiled successfully");
}
}
C# 언어 사양
자세한 내용은 C# 언어 사양을 참조하세요. 언어 사양은 C# 구문 및 사용의 최종 소스입니다.
참고하십시오
GitHub에서 Microsoft와 공동 작업
이 콘텐츠의 원본은 GitHub에서 찾을 수 있으며, 여기서 문제와 끌어오기 요청을 만들고 검토할 수도 있습니다. 자세한 내용은 참여자 가이드를 참조하세요.
.NET