C# 核心 3.1 ByRef 和 ByVal

标签 c# asp.net-core pass-by-reference pass-by-value

我想在 C# 核心中设置一个等于其他对象值的对象,而不是通过引用!

x.len=10;
val y=x;
y.len=x.len*2;

我期待 y.len设置为 20 x.len保持不变,但都y.lenx.len 20 ,我正在寻找断开连接的方法 xy .

我记得在 VB6 我们有类似 的东西ByRef ByVal 这给了我们控制这个东西的能力,C# Core 3.x 中是否有类似的东西?

最佳答案

I want to set an object equal to other object values in c# core, not by reference!



为此,您需要一个像结构这样的值类型,它不是在堆上分配的,或者对于引用类型,您需要一个深拷贝而不是浅拷贝。在 .Net C# 中,默认情况下,所有类都在堆上分配,是引用类型,当传递对象时,它要么是按值引用(这是另一个指向同一内存的指针),要么是按引用引用(指向指针的指针,它使用 ref和关键字)

Let's review the code


var y=x; ,查看结果,可以安全地假设 y 和 x 都是相同类型但都是引用类型。因此如果 value type不适合您,然后执行以下操作之一:

Create a deep copy by:


  • 序列化,最好是二进制,因为它的紧凑性,对于非循环对象层次结构序列化效果很好,当你反序列化时,它是一个新对象
  • 使用复制构造函数,将对象逐个属性、逐个字段复制到新的分配中

  • 一旦你这样做了,你会发现,当属性被修改时,一个对象不会修改另一个对象的浅拷贝

    关于C# 核心 3.1 ByRef 和 ByVal,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60757036/

    相关文章:

    c# - 在 nodatime 上添加两个句点

    c# - 在通过 C# 调用的动态查询中转义 '@' 符号

    c# - 为标签数组元素创建事件处理程序

    c# - ASP.NET 核心 : Create and Open PDF (in browser)

    c# - Ef 核心不跟踪子集合的更改

    c++ - 如何在C++中通过引用返回 vector

    c# - 在 C# 中通过引用传递对象的标准方法是什么

    c# - 使用 Linq to List 时没有得到不同的项目?

    asp.net-mvc - mvc 操作方法中泛型类型参数的 dot net core 自定义模型绑定(bind)

    C++ 将指针转换为对函数参数中基类指针的引用