Internal
라는 건 액세스 한정자이다.
앞서 설명하기 전에 설명이 필요한 단어있다.
어셈블리(Assembly)
.NET
기반 애플리케이션에 대한 배포, 버전 제어, 재사용 등 프로그램의 기본 단위
이다.
어셈블리(Assembly)는 함께 작동하고 논리적 기능 단위를 형성하도록 빌드된 형식 및 리소스 모음이다.
어셈블리?
빌드 시 생성되는 dll과 .exe파일이고 보면 된다.
여러 어셈블리를 상황에 맞게 파일을 병합을 하여 리소스 관리를 할 수 있는 프로그램의 기본 단위라고 정의할 수 있다.\
Internal의 접근 권한을 가진 멤버는 같은 어셈블리 코드에서만 사용할 수 있다.
즉 동일한 어셈블리 내에선 public, 다른 어셈블리에선 private로 취급
Assembly1.cs
에서 내부 기본 클래스인 BaseClass
가 포함되어 있다.
Aseembly1_a.cs
에서 BaseClass
를 인스턴스화하려고 하면 오류가 발생할 것이다.
//Assembly1.cs
internal class BaseClass
{
public static int intM = 0;
}
//Aseembly1_a.cs
class TestAccess
{
static void Main()
{
var myBase = new BaseClass(); // CS0122
}
}
BaseClass
의 액세스 가능성 수준을 public
으로 변경
또한 intM
맴버의 액세스 가능성 수준을 internal
로 변경
이 경우에는 클래스를 인스턴스화할 수 있지만 내부 멤버에는 액세스할 수 있음.
// Assembly2.cs
public class BaseClass
{
internal static int intM = 0;
}
// Assembly2_a.cs
public class TestAccess
{
static void Main()
{
var myBase = new BaseClass(); // Ok.
BaseClass.intM = 444; // CS0117
}
}