Type Object Pointer и MethodTable одно и то же?

Изучая более глубокий уровень C# и CLR нашел тему про объект-тип. У меня возникло несколько вопросов и я прошу вас пояснить некоторые из них. У Рихтера написано, что каждый объект (экземпляр и тип) имеет ссылку на объект-тип (type object pointer). Если мы посмотрим на дизассемблированный код у экземпляра (object например), то мы увидим примерно такую запись:

Name:        System.Object
MethodTable: 78e4a051
EEClass:     7392c122
Size:        12(0xc) bytes
File:        C:\WINDOWS\Microsoft.Net\assembly\GAC_32\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll
Object
Fields: ...

Я не совсем понимаю, но никакой ссылки на объект-тип тут нет. Зато есть ссылка на таблицу методов. Далее, мы можем написать такой код, используя unsafe c#:

MethodTable* vmt = (MethodTable*)typeof(object).TypeHandler.Value.ToPointer();

Означает ли, что ссылка на объект-тип и таблица методов по сути одно и то же ? Если это так, то CLR определяет принадлежность экземпляра к классу именно по таблице методов, а сами объекты-типы в своих таблицах содержат информацию о собственных полях и наследуемых полях (для возможности полиморфизма) ?

Прошу поправьте меня, если я все неправильно понял. заранее благодарю.


Ответы (0 шт):