@Ken 给你完美的答案。这是如何使用struct
(值类型)获得相同的行为。
注意:可变值类型有非常不直观的行为,不要在家里尝试这个:)。
要获得与值类型类似的行为,您需要实现一些接口并通过接口设置属性,因为取消装箱struct
到它自己的类型将始终创建副本并且您将无法修改原始值。
void TortureMutableBoxedValueType()
{
object o1 = new IntWrapper(5);
object o2 = o1;
Console.WriteLine(((IValue)o1).Value); // outputs original 5
((IValue)o2).Value = 8;
Console.WriteLine(((IValue)o1).Value); // outputs new 8
}
interface IValue
{
int Value {get;set;}
}
// Don't use mutable value types - this is just sample.
public struct IntWrapper : IValue
{
int v;
public int Value { get { return v;} set {v = value;}}
public IntWrapper(int value) { v = value; }
}