.NET IL 是否支持按引用或按值复制?

发布于 2024-12-27 05:13:50 字数 303 浏览 0 评论 0原文

我所知道的唯一 .NET 语言是 C#。在 C# 中,您可以编写 lhs=rhs ,如果它是一个结构,它将按值复制,如果是一个类,它会按引用复制。

.NET CLI 是否支持对任何类型的对象执行任一操作?我可以创建一个 struct Pt { int x, y; } 并做类似的事情

Pt pt
var pt_ref=&pt
pt_ref.x=99 //pt.x is now 99
var pt_cpy=pt
pt_cpy.x=88 //nothing else has changed

The only .NET language i know is C#. In C# you can write lhs=rhs and if its a struct it will copy by value, if a class it copies by reference.

Does the .NET CLI support doing either on any type of object? Can i create a struct Pt { int x, y; } and do something like

Pt pt
var pt_ref=&pt
pt_ref.x=99 //pt.x is now 99
var pt_cpy=pt
pt_cpy.x=88 //nothing else has changed

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

笛声青案梦长安 2025-01-03 05:13:50

在 IL 级别,对值类型的引用是可能的。 C# 不允许使用它们(参数中除外,使用 ref 关键字),但在 C++/CLI 中您可以编写示例:

value struct Pt
{
    int x;
    int y;
};

void f()
{
    Pt pt;
    Pt% ptRef = pt;
    ptRef.x = 99;
    Pt ptCpy = pt;
    ptCpy.x = 88;
}

但是,反之则不可能。如果您有一个引用类型,并且创建了该类型的副本,那么您将创建该引用本身的副本,而不是所引用对象的副本。如果要复制引用的对象,需要自己写一个函数来复制。

At the IL level references to value types are a possibility. C# disallows them (except in parameters, using the ref keyword), but in C++/CLI you can write your example:

value struct Pt
{
    int x;
    int y;
};

void f()
{
    Pt pt;
    Pt% ptRef = pt;
    ptRef.x = 99;
    Pt ptCpy = pt;
    ptCpy.x = 88;
}

However, the other way around is not possible. If you have a reference type, and you create a copy of that, you create a copy of the reference itself, not of the referenced object. If you want to copy the referenced object, you need to write a function to copy it yourself.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文