c# vtable — это только часть таблицы методов типовых объектов.

Я изучаю аспекты clr в С# и читаю об этой теме в «clr через С# 4-е издание».

  1. Говорят, что каждый экземпляр типа имеет указатель на vtable, но в книге они не не различайте статические, нестатические и виртуальные методы. В соответствии с ним все методы объявляются в таблице методов с типом object. Поэтому я думаю, что имя «vtable» вводит в заблуждение, а таблица виртуальных методов на самом деле является лишь частью обычной таблицы методов в каждом объекте типа. Это правда?

  2. Это имело бы смысл, потому что при вызове виртуального метода также делается ссылка на объект, а затем clr проверяет тип объекта и вызывает метод, связанный с классом объектов. Или я ошибаюсь?

  3. Еще вопрос: статические и нестатические методы тоже есть в таблице методов. Насколько я понимаю, они различаются только по параметру. Нестатические методы связаны с объектами, поэтому при вызове этих методов передается указатель this, чтобы показать объект, который его вызвал. Статические методы не нуждаются в этом параметре. Я прав?

Я знаю, что это чисто теоретически, но я надеюсь, что есть люди, которые могут мне помочь!

Неужели никто?


person Julian Herbold    schedule 06.04.2014    source источник
comment
Я сам не могу дать точного ответа, но эта статья журнала MSDN очень информативна. msdn.microsoft.com/en-us/magazine/cc163791.aspx Это может тебе помочь.   -  person Jason Evans    schedule 10.04.2014
comment
В среде CLR она называется таблицей методов. И да, он содержит все методы, а не только виртуальные. Так что v-table действительно не подходящий термин. Основная причина в том, что джиттеру нужно знать, как компилировать вызов, что также важно для размышлений. Да, у статических методов нет скрытого аргумента this.   -  person Hans Passant    schedule 10.04.2014