读书人

C#的数组一定是宣言在堆上面吗? 哪怕用

发布时间: 2013-09-05 16:02:07 作者: rapoo

C#的数组一定是声明在堆上面吗? 哪怕用初始化列表构造的也是?
int ai[]=new int{1,2,3}这个ai是在堆上面存在的,是吧。

然后如果是不用new直接int bi[]={1,2,3}也能编译运行。请问这个bi是存在于当前的调用栈上面(值类型)还是仍然被编译成了new的形式存在于堆上,是一个有引用计数的对象?

[解决办法]
.net 的数组其实是Aarry的子类
[解决办法]
查msdn 关于 Array
用reflect
一下子就清楚了
[解决办法]


int[] bi ={1,2,3};
if (bi is Array)
{
string typename = bi.ToString();
}

[解决办法]
两种 形式本质是一样的.
都在堆上.
[解决办法]
不一定是在堆上,只能说是默认在堆上,你可以指定stackalloc使之存放于栈上
至于你的例子,后面一个就是前面一个的语法糖而已
[解决办法]
引用:
不一定是在堆上,只能说是默认在堆上,你可以指定stackalloc使之存放于栈上
至于你的例子,后面一个就是前面一个的语法糖而已

stackalloc出来的不是.net的数组,它类似于c中一段内存

读书人网 >C#

热点推荐