为什么System.Int32是struct而System.String是class

时间:2014-01-09 13:29:53

标签: c# class struct

从我开始c#编程的角度来看,这在我的脑海中确实是一个问题。

为什么intstruct类型

enter image description here

stringclass类型

enter image description here

2 个答案:

答案 0 :(得分:11)

因为int具有固定长度,而string长度是可变的。因此,编译器可以为int保留一个固定区域(主要在堆栈上),并且必须为堆上的string char数组维护一个灵活的缓冲区。

答案 1 :(得分:2)

int是值类型,string是引用类型。当您将值传递给方法或将它们分配给新变量时,值(通过值)传递值(复制),依此类推。引用类型仅复制引用。

对于像int或浮点数这样的小对象,复制很快,但在某些时候复制操作的成本变得昂贵,因此引用比始终复制值更可取。

尽管string也是不可变的,就像大多数值类型一样(是否存在任何可变值类型?)因为字符串可能非常大,所以它们不适合传递值。