在堆上结构?

时间:2014-06-23 23:16:21

标签: c# class struct stack heap

所以我有这个:

class SimpleDateStructureDemo
{

  struct Date
  {
    public int year;
    public int month;
    public int day;
  }

  static void Main()
  {
    ...
  }

}

然后我看到一个例子,说该对象是在堆上分配的:

Date dateMoonWalk = new Date();

我认为类是ref类型,结构是值类型。最后,您可以通过使用new,对吗?

在堆上创建结构类型对象

2 个答案:

答案 0 :(得分:3)

  

你可以通过使用new来创建一个结构类型对象,对吗?

不,如果你在Main内部这样做,一般来说,它不会在堆上分配。但是,您可以通过多种方式在堆上分配结构,包括将其用作类中的字段,在闭包中使用它等。

new Date语法只是将结构初始化为默认值(清零),但实际上并没有改变它的分配方式和位置。

答案 1 :(得分:3)

在这种情况下,

new与堆上的分配无关

  

new运算符还用于值类型调用默认构造函数

http://msdn.microsoft.com/en-us/library/fa0ab757.aspx