호출자의 위치 | public | protected internal | protected | internal | private protected | private |
---|---|---|---|---|---|---|
클래스 내 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
파생 클래스 (동일 어셈블리) | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ |
비파생 클래스 (동일 어셈블리) | ✅ | ✅ | ❌ | ✅ | ❌ | ❌ |
파생 클래스 (다른 어셈블리) | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ |
비파생 클래스 (다른 어셈블리) | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
// Assembly1.cs
// Compile with: /target:library
public class BaseClass
{
protected internal int myValue = 0;
}
class TestAccess
{
void Access()
{
var baseObject = new BaseClass();
baseObject.myValue = 5;
}
}
// Assembly2.cs
// Compile with: /reference:Assembly1.dll
class DerivedClass : BaseClass
{
static void Main()
{
var baseObject = new BaseClass();
var derivedObject = new DerivedClass();
// Error CS1540, because myValue can only be accessed by
// classes derived from BaseClass.
// baseObject.myValue = 10;
// OK, because this class derives from BaseClass.
derivedObject.myValue = 10;
}
}
출처 - Microsoft 액세스 한정자(C# 프로그래밍 가이드)
출처 - Microsoft protected internal(C# 참조)
출처 - C# 접근 제한자
출처 - protected internal과 internal의 차이
끗~!