모든 형식과 형식 멤버에는 액세스 수준이 있습니다.
public: 동일한 어셈블리의 다른 코드나 해당 어셈블리를 참조하는 다른 어셈블리의 코드에서 형식이나 멤버에 액세스할 수 있습니다.
private: 같은 class 또는 struct의 코드에서만 형식 또는 멤버에 액세스할 수 있습니다.
protected: 같은 class 또는 해당 class에서 파생된 class의 코드에서만 형식 또는 멤버에 액세스할 수 있습니다.
(기본)internal: 동일한 어셈블리의 코드에서는 형식이나 멤버에 액세스할 수 있지만 다른 어셈블리의 코드에서는 액세스할 수 없습니다.
protected internal: 형식 또는 멤버가 선언된 어셈블리의 모든 코드에서 또는 다른 어셈블리의 파생 class 내에서 형식 또는 멤버에 액세스할 수 있습니다.
private protected: 포함 어셈블리 내에서 선언된 class터 파생된 형식이 형식 또는 멤버에 액세스할 수 있습니다.
어셈블리(Assembly) : 컴파일을 통해서 나온 결과 파일을 C#에서는 어셈블리라고 부릅니다.
라이브러리를 클래스에 포함 시켜서, 라이브러리에 들어있는 클래스를 사용
정적 라이브러리(컴파일에 라이브러리를 포함)
동적 라이브러리(메모리에 로드해서 사용)
라이브러리를 배포할 땐 접근 권한을 적절히 줄 것
class Class1 {} // Class1 is internal (default)
public class Class2 {}
class Class1 {} // Class1 is internal (default)
public class Class2 {}
'기본 값이 있지만 늘 명시적으로 작성할 것'
class C { public void Foo() {} }
class BaseClass { protected virtual void Foo() {} }
class Subclass1 : BaseClass { protected override void Foo() {} } // OK
class Subclass2 : BaseClass { public override void Foo() {} } // Error
internal class A {}
public class B : A {} // Error