【发布时间】:2008-12-21 20:20:59
【问题描述】:
我读到基类中的私有变量在技术上由子类继承,但不可访问。
如果这是正确的,为什么我们说它们是继承的,而假设它们只能通过反射来访问?
【问题讨论】:
标签: c# inheritance
我读到基类中的私有变量在技术上由子类继承,但不可访问。
如果这是正确的,为什么我们说它们是继承的,而假设它们只能通过反射来访问?
【问题讨论】:
标签: c# inheritance
子类化就是继承实现;和字段是一个实现细节。
这些字段确实存在,并且可以通过反射获得。但最终,通过任何 public/protected/etc 成员管理这些字段的状态是基类的工作。
但最终 - 如果基类为属性 Foo 声明了一个属性(和字段),那么当您设置该属性时,数据必须到某个地方。子类必须包含基类中的所有字段才能有意义。这对于基于字段的序列化框架(例如BinaryFormatter)也很重要。
【讨论】:
从某种意义上说,私有字段是继承的,它们在分配时会占用堆上的空间。但是,派生类不能直接访问它们。
【讨论】:
为什么我们说它们是遗传的……
就我个人而言,我不知道。我认为继承包括那些你可以在子类中访问的东西,而不是那些隐藏的东西。
我可以看到有人说要明确继承包括链上的所有元素,但我觉得它过于迂腐而且不是特别有用。
【讨论】: