다음을 통해 공유


접근성 수준 사용에 대한 제한 사항(C# 참조)

선언에서 형식을 지정할 때 형식의 접근성 수준이 멤버의 접근성 수준 또는 다른 형식의 접근성 수준에 종속되어 있는지 확인합니다. 예를 들어 직접 기본 클래스는 파생 클래스만큼 액세스 가능해야 합니다. 다음 선언에서는 기본 클래스 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# 구문 및 사용의 최종 소스입니다.

참고하십시오