Всем привет. Мне было очень интересно узнать как устроены классы, и однажды вечером я решил нарисовать схему.
На схеме изображено как далеко можно зайти следуя по ссылкам в только что созданном экземпляре класса (class, а не object), какой и сколько RTTI информации существует о классе его методах и свойствах.
Это всего лишь моё небольшое исследование, которое я провёл исключительно из интереса.
Для примера я взял класс с довольно простой иерархией, TUnicorn <- TPony <- TObject
Код можно посмотреть здесь, его совсем немного: http://pastebin.com/rTKkuT0U
Перед тем как показать схему:
1) Адреса заменил на константы вида $(YYY_ADDR_ZZ), в принципе на них обращать внимания не стоит, все указатели отметил стрелками (там где адреса должны совпадать, они совпадают).
2) Если структура пуста, она изображена без полей, для экономии места, например: TInterfaceTable пуста, т.к. в классах не реализован ни один интерфейс.
3) Во всей этой схеме есть 1 поле - назначение которого для меня загадка, ClassTable (отмечен фиолетовым) если Вы про него что-то знаете, дайте мне знать.
4) Структура TPropList сама по себе не существует, её в рантайме создал я, для получения списка свойств (но информация о самих свойствах, на которую есть указатели в этой таблице - существует всегда).
Собственно сама схема, трижды всё перепроверил, но ошибки не исключены: https://www.dropbox.com/sh/luewmnj8fi0d ... NtjZa?dl=0
Если обнаружили ошибки или неточности, дайте мне знать!
upd0: вернул картинку.