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.cs 과 Assembly2.cs.
첫 번째 파일에는 공용 기본 클래스 BaseClass와 해당 파일에서 DerivedClass1파생된 형식이 포함됩니다.
BaseClass는 동일한 어셈블리 내에서 상속된 멤버로 myValue가 액세스할 수 있는 프라이빗 보호 멤버인 DerivedClass1를 소유합니다.
두 번째 파일에서 상속된 멤버로 액세스 myValue 하려고 시도하면 동일한 어셈블리 내의 DerivedClass2 파생 형식에서만 멤버에 액세스할 수 있으므로 private protected 오류가 발생합니다. 이 제한은 (모든 어셈블리의 파생 클래스에서 액세스를 허용) 및 protected internal (모든 어셈블리의 동일한 어셈블리 또는 파생 클래스 내의 모든 클래스에서 액세스를 허용)에서 주요 차이점 protected 입니다.
해당 이름이 포함된 경우 파생 클래스 DerivedClass2 는 에 선언된 멤버에 private protected 액세스할 수 있습니다BaseClass.Assembly1.csInternalsVisibleToAttributeAssembly2
InternalsVisibleTo 는 private protected 멤버를 다른 어셈블리의 파생 클래스에 표시합니다.
다른 보호된 액세스 한정자와 비교
다음 표에는 보호된 세 가지 액세스 한정자 간의 주요 차이점이 요약되어 있습니다.
| 액세스 한정자 | 동일한 어셈블리, 파생 클래스 | 동일한 어셈블리, 파생되지 않은 클래스 | 다른 어셈블리, 파생 클래스 |
|---|---|---|---|
protected |
✔️ | ❌ | ✔️ |
protected internal |
✔️ | ✔️ | ✔️ |
private protected |
✔️ | ❌ | ❌ |
- 어셈블리의 파생 클래스가 멤버에 액세스하도록 하려는 경우에 사용합니다
protected. - 가장 허용되는 액세스(동일한 어셈블리 또는 파생 클래스의 모든 클래스)를 원하는 경우에 사용합니다
protected internal. - 가장 제한적인 보호된 액세스(동일한 어셈블리의 파생 클래스만)를 원하는 경우에 사용합니다
private protected.
구조체를 상속할 수 없으므로 구조체 멤버를 선언 private protected 할 수 없습니다.
C# 언어 사양
자세한 내용은 C# 언어 사양을 참조하세요. 언어 사양은 C# 구문 및 사용의 최종 소스입니다.
참고하십시오
.NET