C#에서 인터페이스를 많이 구현할 경우
interface A {...}
interface ASub1 : A {...}
interface ASub2 : A {...}
interface ASub3 : A {...}
interface AB<T> : A where T : struct {...}
interface ABC : ASub1, ASub2, AB {...}
interface ABCSub1 : ABC {...}
interface Other : ASub3, AB {...}
interface Final : ABCSub1, ASub3 {...}
class FooClass : Final {...}
A라는 인터페이스로부터 온갖 파생형식들이 신나게 난립하다가
결국에는 Final이라는 인터페이스로 종합되고
이걸 FooClass에서 구현한다고 가정합니다. 그리고
FooClass c = new FooClass();
bool isA = c is A;
bool isASub1 = c is ASub1;
bool isASub2 = c is ASub2;
bool isASub3 = c is ASub3;
bool isAB = c is AB<int>;
위와 같이 is 연산자 써보면 전부 true인데요
여기서 한가지 궁금한 것이 있습니다.
닷넷에서는
인터페이스 - 클래스 - 클래스
인터페이스 - 구조체
이런식으로 형식들 간에 상속 또는 구현 관계를 별도의 메모리에 올려놓습니까?
그러면 한 클래스의 상속이나 구현 관계가 매우 복잡하거나 많을 경우 그 관계를
나타내기 위해 어셈블리 자체의 메모리 점유율이 더 높아지나요?
그러한 정보는 인스턴스가 만들어 질때마다 그 인스턴스에 대해 각각 기록되나요?
만일 그것이 아니라면 C#의 is 연산자는 어떻게 작동되는 거에요?
댓글 달기