使用装箱和隐式转换使值类型的行为类似于引用类型

本文关键字:类型 引用类型 类似于 转换 | 更新日期: 2023-09-27 18:01:04

我想框住一个值类型并为其提供隐式转换。不幸的是,这样做会使它不再像引用类型一样运行,即

MyTnt i1 = 3; //MyValue has a field value = 3
MyInt i2 = 5; //value = 5
i1 = i2;      //both i1 and i2 = 5
i2 = 4;       //i1 = 5, i2 = 4; should be i1 = i2 = 4;

是否可以使用隐式转换编写装箱,使其在此处按预期运行?

使用装箱和隐式转换使值类型的行为类似于引用类型

我相信

你误解了一些观点。

一件事是创建引用来保存对象或值类型,另一件事是通过引用给出参数。

如果您通过某种方法通过引用传递它,i1也会4

public void X(int i2, ref MyInt i1)
{
   // When you define a ref parameter
   // you're not creating a new reference but you're
   // reusing the given one
   i1 = i2;
}
MyInt i1 = 4;
MyInt i2 = 0;     
// This would produce what you expect
X(i2, ref i1);
// Now i2 is 4