Являются ли частные статические переменные и экземпляры, унаследованные на С#, и почему?

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

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

3 ответа

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

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

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


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


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

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

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

licensed under cc by-sa 3.0 with attribution.