다음을 통해 공유


private protected (C# 참조)

private protected 키워드 조합은 멤버 액세스 한정자입니다. 클래스에서 파생되고 포함하는 어셈블리에 선언된 형식은 보호된 프라이빗 멤버에 액세스할 수 있습니다. 다른 액세스 한정자와 비교 private protected 하려면 접근성 수준을 참조하세요.

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

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

팁 (조언)

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

파생 형식은 변수의 정적 형식이 파생 클래스 형식인 경우에만 포함하는 어셈블리에서 기본 클래스의 프라이빗 보호 멤버에 액세스할 수 있습니다. 예를 들어 다음 코드 세그먼트를 고려합니다.

// Assembly1.cs
// Compile with: /target:library
public class BaseClass
{
    private protected int myValue = 0;
}

public class DerivedClass1 : BaseClass
{
    void Access()
    {
        var baseObject = new BaseClass();

        // Error CS1540, because myValue can only be accessed by
        // classes derived from BaseClass.
        // baseObject.myValue = 5;

        // OK, accessed through the current derived class instance
        myValue = 5;
    }
}
// Assembly2.cs
// Compile with: /reference:Assembly1.dll
class DerivedClass2 : BaseClass
{
    void Access()
    {
        // Error CS0122, because myValue can only be
        // accessed by types in Assembly1
        // myValue = 10;
    }
}

이 예제에는 두 개의 파일 Assembly1.csAssembly2.cs. 첫 번째 파일에는 공용 기본 클래스 BaseClass와 해당 파일에서 DerivedClass1파생된 형식이 포함됩니다. BaseClass는 동일한 어셈블리 내에서 상속된 멤버로 myValue가 액세스할 수 있는 프라이빗 보호 멤버인 DerivedClass1를 소유합니다.

두 번째 파일에서 상속된 멤버로 액세스 myValue 하려고 시도하면 동일한 어셈블리 내DerivedClass2 파생 형식에서만 멤버에 액세스할 수 있으므로 private protected 오류가 발생합니다. 이 제한은 (모든 어셈블리의 파생 클래스에서 액세스를 허용) 및 protected internal (모든 어셈블리의 동일한 어셈블리 또는 파생 클래스 내의 모든 클래스에서 액세스를 허용)에서 주요 차이점 protected 입니다.

해당 이름이 포함된 경우 파생 클래스 DerivedClass2 는 에 선언된 멤버에 private protected 액세스할 수 있습니다BaseClass.Assembly1.csInternalsVisibleToAttributeAssembly2 InternalsVisibleToprivate protected 멤버를 다른 어셈블리의 파생 클래스에 표시합니다.

다른 보호된 액세스 한정자와 비교

다음 표에는 보호된 세 가지 액세스 한정자 간의 주요 차이점이 요약되어 있습니다.

액세스 한정자 동일한 어셈블리, 파생 클래스 동일한 어셈블리, 파생되지 않은 클래스 다른 어셈블리, 파생 클래스
protected ✔️ ✔️
protected internal ✔️ ✔️ ✔️
private protected ✔️
  • 어셈블리의 파생 클래스가 멤버에 액세스하도록 하려는 경우에 사용합니다 protected .
  • 가장 허용되는 액세스(동일한 어셈블리 또는 파생 클래스의 모든 클래스)를 원하는 경우에 사용합니다 protected internal .
  • 가장 제한적인 보호된 액세스(동일한 어셈블리의 파생 클래스만)를 원하는 경우에 사용합니다 private protected .

구조체를 상속할 수 없으므로 구조체 멤버를 선언 private protected 할 수 없습니다.

C# 언어 사양

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

참고하십시오