【问题标题】:Where goes a Value type in an instance [duplicate]实例中的值类型在哪里[重复]
【发布时间】:2015-07-19 15:14:59
【问题描述】:

众所周知,值类型存储在堆栈中。现在考虑一下:

class test
{
    public int Sum { get; set; }
    public string Name { get; set; }
}

然后创建一个实例如下:

test t = new test();
t.Sum = 10;
t.Name = "a string";

现在,实例及其属性如何存储在堆中? 因为我们有一个 int 应该存储在堆栈中。

【问题讨论】:

  • 你可能想检查这个link
  • This Eric Lippert 的帖子可能会让您感兴趣。

标签: c# oop heap-memory stack-memory


【解决方案1】:

我们知道值类型存储在堆栈中。

更好的说法是“值类型可以存储在堆栈中”。实际位置取决于上下文。

值类型的对象仅在您将这些对象创建为局部变量时存储在堆栈中。当您使值类型对象成为其他对象的一部分时,值类型对象将成为其“所有者”对象的一部分。根据所有者对象的类型,值类型的对象将被放置在动态内存中,如您的示例中,或者在堆栈中,如果 test 被声明为 struct

【讨论】:

  • 我认为我的实例的值类型变量存储在堆栈中,只是堆中的指针引用它们。谢谢
  • “只有当您将这些对象创建为局部变量时,值类型的对象才会存储在堆栈中。” — 即使这只是一个实现细节,也没有记录在案作为唯一的一个场景。在未来的 dotnet 框架中,值类型可以很容易地存储在堆中或其他地方。
猜你喜欢
  • 1970-01-01
  • 2012-05-04
  • 2011-10-12
  • 2015-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-20
相关资源
最近更新 更多