Mer*_*tez 5 c# pass-by-reference pass-by-value asp.net-core
我想在 C# 核心中设置一个等于其他对象值的对象,而不是通过引用!
x.len=10;
val y=x;
y.len=x.len*2;
Run Code Online (Sandbox Code Playgroud)
我希望y.len设置为20,并x.len保持不变,但两者y.len和x.len是20,我正在寻找一种方式来断开x和y。
我记得在VB6 中我们有像ByRef和ByVal这样的东西,它们使我们能够控制这个东西,C# Core 3.x 中是否有类似的东西?
我想设置一个对象等于c#核心中的其他对象值,而不是通过引用!
为此,您需要一个像结构这样的值类型,它不是在堆上分配的,或者对于引用类型,您需要一个深复制而不是浅复制。在.Net C#中,所有类默认分配在堆上,都是引用类型,当传递对象时,它要么按值引用(这是指向同一内存的另一个指针),要么按引用引用(指向指针的指针,使用 ref并输出关键字)
我们来回顾一下代码
var y=x;,查看结果,可以安全地假设 y 和 x 具有相同类型,但都是引用类型。因此,如果value type这不适合您,请执行以下操作之一:
通过以下方式创建深层副本:
一旦你这样做了,你会发现与浅复制不同的是,当修改属性时,一个对象不会修改另一个对象