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