andreycha
@andreycha

.NET: объекты-типы

Как известно, в процессе выполнения программы CLR создает в памяти объекты-типы, которые содержат в т.ч. таблицу методов.

Положим, есть два класса: Employee и Manager (наследник Employee). При создании экземпляра типа Manager, ссылка на объект-тип указывает на объект-тип Manager. При вызове метода у экземпляра Manager запись об этом методе сначала ищется сначала в таблице методов объекта-типа Manager, потом Employee. Однако в книге Рихтера говорится, что все объекты-типы ссылаются на базовый объект-тип Type.

Тогда каким образом происходит связь типов в цепочке наследования? Я думал, что объект-тип Manager будет ссылаться на Employee, а Employee в свою очередь на Type. Или тут задействуется другой механизм?
  • Вопрос задан
  • 3460 просмотров
Пригласить эксперта
Ответы на вопрос 3
@sergei-grigorev
Могу ошибиться с терминами, но принцип работы примерно следующий. Есть такая вещь как «виртуальная таблица». Если метод «виртуальный» (доступен для переопределения), то он заносится в эту таблицу. Затем, когда вы переопределяете этот метод в классе «наследнике», в эту таблицу заносится новый адрес. И даже если вы ссылаете используете ссылку на базовый тип, а на самом деле там наследник этого базового типа, то будет вызван метод наследника, благодаря этой таблице
Ответ написан
Kalantyr
@Kalantyr
Ответ дать затрудняюсь, но стало интересно — в связи с чем такой вопрос возник?
Ответ написан
bobermaniac
@bobermaniac
Объект-тип — это случайно не Type? Он не имеет отношения к таблице методов, он представляет метаданные.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы