在C#它是可能的,而不关键字初始化数组的“新”象在下面的示例:数组初始化的“新”
int[] x = { 10, 20, 30 };
这是否意味着在阵列将在被初始化堆栈,因为关键字“新”是必要的初始化堆上的东西?
在C#它是可能的,而不关键字初始化数组的“新”象在下面的示例:数组初始化的“新”
int[] x = { 10, 20, 30 };
这是否意味着在阵列将在被初始化堆栈,因为关键字“新”是必要的初始化堆上的东西?
中间代码是相同的新的和没有新的初始化。
示例代码:
public class Class1
{
int[] a = new int[4];
}
public class Class2
{
int[] a = { 1, 2, 3, 4 };
}
编译:
(因为我没有必要点上传图片,你可以在ILDASM查看)
我想补充的东西这里更多。
堆栈中的内容是int数组的堆地址。让 说,当你将该数组传递给某个函数时,那么 传递的是Stack的heapAddress值。
句法糖不同于新的语言结构。它与其他阵列相同。 – 2014-10-08 08:23:18
您可能正在寻找stackalloc关键字http://msdn.microsoft.com/en-us/library/cx9s2sy4.aspx – 2014-10-08 08:25:03
如果您使用的是托管代码,那么不需要。为了分配内存,每个对象都需要'new'关键字。非托管代码是一个完全不同的野兽,并且可能存在如上所述的方式。我记得在某处读到有一种方法可以“推迟”构造函数,但仍然需要在对象处于可用状态之前的某个时刻调用它。 – 2014-10-08 08:31:04