【问题标题】:Memory allocation for object in inheritance in C#C#中继承对象的内存分配
【发布时间】:2018-06-15 07:45:10
【问题描述】:

我对在继承的情况下如何完成对象分配感到困惑 考虑下面的代码。

class Base
{
}
class Derived : Base
{
// some code
}

如果我们这样做,则从 main 开始

Derived d = new Derived();

Base b = new Derived();

这两种情况在堆中的内存分配是多少。 派生对象是在基础对象内部还是它们都在彼此旁边

【问题讨论】:

  • 由于两个对象都是用“new”创建的,它们在内存中会有不同的地址。
  • 将 b 声明为 Base 的事实并没有改变对象是什么,只是改变了它的处理方式。
  • 我认为这与继承无关。如果您创建了Derived 的实例并将其分配给接口类型的变量,则同样适用。它仍然是Derived

标签: c# .net oop inheritance heap-memory


【解决方案1】:

两个对象的内存分配看起来完全一样。两个对象都属于同一类型Derived

当然,每个对象都会在堆上分配到自己的空间中。

创建对象时重要的是用于构造对象的类(类型),而不是存储对象的引用类型。

每个对象都作为完整的实体存在,但您可以将其视为继承自它的所有类的所有部分的摘要。在某种程度上Derived 对象实例包含Base 对象实例内部。反之亦然。

【讨论】:

    【解决方案2】:

    在这两种情况下,您都实例化了具体 Derived 类的对象,因此两者的内存占用量相同 - 您使用 Base 和 Derived 类的引用来引用它们,但您在两个 cade 中实例化 Derived 类。

    但至于为您的问题提供一般性答案 - 是的,派生类的内存实例包含其基类的所有成员。

    【讨论】:

      猜你喜欢
      • 2011-01-18
      • 2019-11-11
      • 2015-08-27
      • 2010-12-26
      • 2016-05-12
      • 2013-01-04
      • 2021-03-03
      • 1970-01-01
      相关资源
      最近更新 更多