c#赋值的问题

来源:百度知道 编辑:UC知道 时间:2024/05/31 11:57:40
请问,visual c# 2008中,执行a=b时,什么情况下,会新开辟一块内存,实现深层复制,什么情况下,会复制指针,即浅层复制?
另外,函数参数传递中fun(myclass A)
这样的参数A,传递的是指针还是副本?
没有指针啊。是深层复制和浅层复制的问题。我想说的是,"="在什么情况下实现深层复制,什么情况下浅层(也就是复针内存的指针)。

a=b
当b是值类型的时候, 会重新开辟一块内存
当b是引用类型时, 属于地址传递, 也就通常理解的指针传递

fun(myclass A)
当 myclass 的数据类型是引用类型时, 属于地址传递

你必须要理解什么是值类型, 什么是引用类型, 这个很重要

深层复制和浅层复制指的是引用类型中包含有其它引用类型数据, 在复制的时候是否连同内层引用类型一起复制

对象间的“=”都是浅层复制,只会把引用地址给新对象,实际是指向的同一内存区域。
值类型是一经创建就不允许修改的,所以值类型间运算都会开辟一块新的内存进行存储。
如果想实现深层的复制可以自己重写clone方法,创建新对象来进行付值。

自己的一点点心得,希望对你有帮助。

c#里面有的指针啊。不过不提倡使用而已!

“=”是赋值运算,不是复制吧?另外c#中有指针?你的问题搞不懂…

c#中有指针这一说?