А как реализуется наследование в яп?
От: -n1l-  
Дата: 21.08.15 08:51
Оценка:
Меня тут озадачили на одном собеседовании вопросом, как собственно реализуется наследование в c#.
Самому стало интересно, сейчас усиленно гуглю на эту тему, но пока понять ничего не смог.
Может кто поможет? Никто не задавался таким вопросом?
Re: А как реализуется наследование в яп?
От: vmpire Россия  
Дата: 21.08.15 09:09
Оценка: 5 (1) +1
Здравствуйте, -n1l-, Вы писали:

N>Меня тут озадачили на одном собеседовании вопросом, как собственно реализуется наследование в c#.

N>Самому стало интересно, сейчас усиленно гуглю на эту тему, но пока понять ничего не смог.
N>Может кто поможет? Никто не задавался таким вопросом?
Может, как обычно, производный класс включает в себя все невиртуальные члены базового класса плюс таблицу виртуальных функций плюс ссылку нак объект типа?
Это было бы логично, довольно стандартная реализация.
Re: А как реализуется наследование в яп?
От: Don Reba Канада https://stackoverflow.com/users/49329/don-reba
Дата: 21.08.15 09:17
Оценка:
Здравствуйте, -n1l-, Вы писали:

N>Меня тут озадачили на одном собеседовании вопросом, как собственно реализуется наследование в c#.

N>Самому стало интересно, сейчас усиленно гуглю на эту тему, но пока понять ничего не смог.
N>Может кто поможет? Никто не задавался таким вопросом?

У символа производного типа прописывается ссылка на символ базового. Подробности наглядно описаны в исходниках Roslyn.
Ce n'est que pour vous dire ce que je vous dis.
Отредактировано 21.08.2015 9:23 Don Reba . Предыдущая версия .
Re: А как реализуется наследование в яп?
От: Sinix  
Дата: 21.08.15 09:48
Оценка: 6 (2) +1
Здравствуйте, -n1l-, Вы писали:

N>Меня тут озадачили на одном собеседовании вопросом, как собственно реализуется наследование в c#.


Тут вопрос надо уточнить. Потому что с точки зрения шарпа, с точки зрения il-метаданных, с точки зрения рантайма и с точки зрения бинарного кода ответы будут разные.

В максимально упрощённом виде всё стандартно: в заголовке объекта указатель на type info (ок, на method table на самом деле, но кто это помнит?). В method table хранятся все методы, определённые в самом классе и в его предках.
Дальше всё несложно (*под несложно — нюансов на пару статей, но снова, кто всё это помнит? ).

UPD. Основные моменты для CLR 2.0 собраны вот тут. Статья не без косяков, но в качестве стартовой точки пойдёт.
Отредактировано 21.08.2015 9:56 Sinix . Предыдущая версия .
Re[2]: А как реализуется наследование в яп?
От: -n1l-  
Дата: 21.08.15 10:00
Оценка:
Здравствуйте, vmpire, Вы писали:
V>Может, как обычно, производный класс включает в себя все невиртуальные члены базового класса плюс таблицу виртуальных функций плюс ссылку нак объект типа?
V>Это было бы логично, довольно стандартная реализация.
На какой объект типа? Свой или базового класса? Или обоих? А как тогда разрешается ссылка если она базового а объект в ней подается производного?
Re[3]: А как реализуется наследование в яп?
От: vmpire Россия  
Дата: 21.08.15 10:13
Оценка:
Здравствуйте, -n1l-, Вы писали:

N>Здравствуйте, vmpire, Вы писали:

V>>Может, как обычно, производный класс включает в себя все невиртуальные члены базового класса плюс таблицу виртуальных функций плюс ссылку нак объект типа?
V>>Это было бы логично, довольно стандартная реализация.
N>На какой объект типа? Свой или базового класса? Или обоих?
Свой
V>> А как тогда разрешается ссылка если она базового а объект в ней подается производного?
Никак Ибо тут ничего разрешать не надо.
Производный класс имеет дополнительные поля к базовому, а значит, поля базового тоже имеет, на том же месте в том же порядке.
Поэтому его просто можно использовать там же, где и базовый без каких-то специальных действий.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.