Здравствуйте, Serginio1, Вы писали:
S>Ага, значит TypeHandle может быть как указателем на MethodTable, так и указателем на TypeDesc, в зависимости от типа объекта. Для массивов он указывает на TypeDesc. Тип object[][] — это массив, элементами которого являются object[], для которых TypeHandle=TypeDesc. Эта информация объясняет наш пример, но всё ещё остаются некоторые вопросы. Например: а как же отличить, на что именно указывает TypeHandle? Поможет нам в этом дальнейшее изучение исходников CLI:
S>Всё зависит от второго бита в адресе: нулевое значение определяет MethodTable, а единичное — TypeDesc. Если мы работаем с шестнадцатеричными адресами, то можно легко определить вид TypeHandle по последней цифре:
Это всё тебе потребуется, если ты ручками берёшь св-во TypeHandle.
Но компилятор не берёт ничего ручками, он берёт фиксированное смещение и ничего не делает с адресом VMT, т.е. не накладывает маску в попытке обнулить младший бит.