метод, и присвоил Ivan к предку Object, который не содержит свойств как у объекта Person, но ска метод ToString() возвращает ту же строку что и объект Ivan, как так?
потому что ToString() - виртуальный метод, поэтому когда ты его вызываешь, то он обращается к виртуальной таблице, ну, а там уже у объекта NoName записан Ivan.ToString, потому что ты NoName присвоил Ivan, lol
тоесть сохраняется состояние метода из Ivan ? или метод выполняется заново но данные в ToString попадают из как ты говоришь виртуальной таблицы?
Что такое "состояние метода"?
просто если у Ivan нет этих свойств, а метод возвращает значение с этими свойствами, то компилятор по ссылке запомнил что этот метод должен вернуть или просто свойства где-то резервируются и при вызове они берутся из виртуального хранилища
Компилятор точно ничего не запомнил. Это происходит в runtime.
нет, там, скорее, берется указатель на метод из виртуальной таблицы конкретного класса, а так как у тебя ссылка на объект класса не person, то и забирается указатель из его таблицы
лучше просто прогугли виртуальные методы
Я вот пытаюсь нагуглить. Всё ещё не нахожу ответа, как именно объект связан со своими виртуальными таблицами.
У объекта хранится свой тип
Тогда понятно)
Обсуждают сегодня