简短回答:不行。你展示的代码是 int[] x = new [] { 10, 20, 30 } 的简写形式, 这又是 int[] x = new int[] { 10, 20, 30} 的简写形式, 而这也是 int[] x = new int[3]; x[0] = 10; x[1] = 20; x[2] = 30; 的简写形式。 (请参见 MSDN)实现上没有任何区别。唯一在堆栈上分配数组的方法是使用带有 stackalloc 关键字的不安全代码,正如评论中指出的那样。 以下是来自 MSDN 的示例:int* block = stackalloc int[100];
新初始化和未初始化的代码生成的中间代码是相同的。 示例代码: public class Class1 { int[] a = new int[4]; } public class Class2 { int[] a = { 1, 2, 3, 4 }; } 已编译: (由于我没有上传图片所需的必要点数,您可以在ildasm中查看它)
new
关键字来分配内存。非托管代码是完全不同的东西,可能存在一种方法来实现,就像上面说的那样。我记得在某个地方读过有一种方法可以“延迟”构造函数,但仍然需要在对象处于可用状态之前某个时刻调用它。 - Kyle Baran