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

时间:2012-01-14 00:13:44

标签: cil

我所知道的唯一.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

1 个答案:

答案 0 :(得分:3)

在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;
}

然而,相反的方法是不可能的。如果您有一个引用类型,并且您创建了它的副本,则创建引用本身的副本,而不是引用的对象的副本。如果要复制引用的对象,则需要编写一个函数来自行复制。