我知道有一些差别,C#中值类型和引用类型之间有什么区别?
- 值类型的存储位置作为参考类型存储在托管堆上在栈上。
- 值类型变量直接包含其值,其中作为参考变量仅保持到被托管堆上创建的对象的位置的参考。
是否有任何其他区别,我错过......如果是这样,它们是什么?
我知道有一些差别,C#中值类型和引用类型之间有什么区别?
是否有任何其他区别,我错过......如果是这样,它们是什么?
请阅读:The stack is an implementation detail,不要以后再重复堆栈分配就是与引用类型的.NET区别值类型的鸭式布局。 CLR可以选择在任何想要的地方分配一个变量。
最重要的区别是在分配语义。将值类型分配给变量(或将其作为参数传递给方法)时,所有数据都将被复制。分配引用类型时,只复制引用 - 两个引用都指向内存中的同一个对象实例。
有点粗俗,但嘿,这是我学到的最好的方式,就像你对甘道夫生气并等待他用他的声音向你解释给你带来的烦恼一样,它倾向于坚持= d – Coops 2012-11-19 15:54:15
正如Aaronaught和Eric的博客文章中提到:
记住的规则,引用类型总是去堆,而值类型总是去他们宣称在哪里呢?如果值类型在方法之外声明,但在引用类型内部,它将被放置在堆中的引用类型中。
我觉得值隐含分配内存,但不引用它们必须被分配内存类型明确
这里有一些额外的差异:
问了很多次了,所以...... – 2010-03-10 06:20:53
@Wheat,快速搜索,不,这个问题没有被问到或直接回答。 – strager 2010-03-10 06:22:50
我没有时间在此刻完全回答这个问题 - 但我只是想指出,“值类型存储在堆栈上”是言过其实。请参阅http://pobox.com/~skeet/csharp/memory.html。有关引用类型与值类型的更多信息,请参阅http://pobox.com/~skeet/csharp/references.html – 2010-03-10 06:25:25