【问题标题】:location of storage of instance fields of reference type objects引用类型对象的实例字段的存储位置
【发布时间】:2012-09-23 11:14:11
【问题描述】:

我有一个疑问,假设在我的类(比如包含类)中我有一个字段实例,它是引用类型的对象(比如另一个类,称为内部类),在运行时包含的对象类是在堆上创建的,是包含类将整个内部类对象存储在其中,还是包含类将内部类的引用存储在其中?

    internal class ContaingClass
    {
       private InnerClass objInner; 
    }

ContainingClass 的对象会引用 objInner 还是应该存储整个 objInner 及其所有数据?

【问题讨论】:

    标签: c# .net class heap-memory


    【解决方案1】:

    在构造时,它将在字段中包含一个空引用(假设您的构造函数没有将其设置为任何内容)。该字段稍后可以分配给对实例的引用,但该实例的“内容”不会存储在 ContainingClass 的“内容”中。

    【讨论】:

      【解决方案2】:

      InnerClass 是引用类型时,它被存储为对实例的引用。

      这里是来自 Eric Lippert 的 an answer,它解释了执行期间发生的事情的详细信息。

      【讨论】:

      • 感谢您的回答,@PHeiberg:还有一个问题,如果内部实例变量是值类型,那么 ContainingClass 的对象会将其值存储在其中或引用装箱的值类型对象?
      • ContainingClass 将保存值类型的值,而不是引用。
      猜你喜欢
      • 1970-01-01
      • 2019-05-01
      • 2017-02-11
      • 1970-01-01
      • 2022-10-14
      • 1970-01-01
      • 1970-01-01
      • 2014-06-26
      • 1970-01-01
      相关资源
      最近更新 更多