C#에서 인터페이스를 많이 구현할 경우

hiluciano의 이미지

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 연산자는 어떻게 작동되는 거에요?