Как известно, в процессе выполнения программы CLR создает в памяти объекты-типы, которые содержат в т.ч. таблицу методов.
Положим, есть два класса: Employee и Manager (наследник Employee). При создании экземпляра типа Manager, ссылка на объект-тип указывает на объект-тип Manager. При вызове метода у экземпляра Manager запись об этом методе сначала ищется сначала в таблице методов объекта-типа Manager, потом Employee. Однако в книге Рихтера говорится, что все объекты-типы ссылаются на базовый объект-тип Type.
Тогда каким образом происходит связь типов в цепочке наследования? Я думал, что объект-тип Manager будет ссылаться на Employee, а Employee в свою очередь на Type. Или тут задействуется другой механизм?
Могу ошибиться с терминами, но принцип работы примерно следующий. Есть такая вещь как «виртуальная таблица». Если метод «виртуальный» (доступен для переопределения), то он заносится в эту таблицу. Затем, когда вы переопределяете этот метод в классе «наследнике», в эту таблицу заносится новый адрес. И даже если вы ссылаете используете ссылку на базовый тип, а на самом деле там наследник этого базового типа, то будет вызван метод наследника, благодаря этой таблице
Тогда другой вопрос: где хранится эта таблица? Для каждого типа она своя? Рихтер утверждает, что в объекте-типе хранятся только определенные в этом типе методы, а все базовы методы — в базовом объекте-типе. Отсюда собственно и вопрос: как происходит эта связь наследник-родитель?
У каждого типа эта таблица своя. При вызове конструктора (а как мы знаем, сначала вызываются базовые конструкторы, а только потом наш), адрес этой таблицы может быть изменен. Соответственно он изменяет адрес таблицы на свою виртуальную таблицу
По Рихтеру объект-тип — это объект, единственный экземпляр которого создается на каждый тип, он содержит в себе значения статических полей, таблицу методов, а также указатель на объект-тип. Для всех объектов этот указатель ссылается на объект-тип Type, а сам объект-тип Type ссылается на себя. Книги под рукой нет, это примерно страница 105-110 во втором издании.