Частные статические и переменные экземпляра наследуются в C # и почему? - PullRequest
4 голосов
/ 21 декабря 2008

Я прочитал, что закрытые переменные в базовом классе технически наследуются дочерними классами, но недоступны.

Если это правильно, почему мы говорим, что они наследуются, когда предположительно они могут быть доступны только посредством отражения?

Ответы [ 3 ]

11 голосов
/ 21 декабря 2008

Подклассы - это наследование реализации ; и поля являются подробностями реализации.

Поля действительно присутствуют и доступны через отражение. Но, в конечном счете, задача базовых классов - управлять состоянием этих полей через любых открытых / защищенных / и так далее членов.

Но в конечном итоге - если базовый класс объявляет свойство (и поле) для свойства Foo, то когда вы устанавливаете это свойство, данные должны куда-то идти. Подкласс должен включать в себя все поля из базового класса, чтобы иметь смысл. Это также важно для полевых платформ сериализации (таких как BinaryFormatter).

1 голос
/ 21 декабря 2008

Закрытые поля наследуются в том смысле, что они занимают место в куче при выделении. Однако производный класс не может получить к ним прямой доступ.

0 голосов
/ 21 декабря 2008

почему мы говорим, что они наследуются ...

Лично я нет. Я считаю, что наследование включает те вещи, к которым вы можете получить доступ в дочернем классе, а не те, которые скрыты.

Я мог видеть, как кто-то говорил, чтобы было ясно, что наследование включает в себя все элементы в цепочке, но это кажется мне чрезмерно педантичным и не особенно полезным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...