为什么会这样:
public class BoolClass
{
public bool Value { get; set; }
}
class Program
{
static void Main(string[] args)
{
BoolClass bc1 = new BoolClass { Value = false };
BoolClass bc2 = bc1;
bc1.Value = true;
}
}
结果
bc2.Value == true
由于 bool
是我期望的值类型 bc2.Value == false
除非 bc2.Value
被装箱并存储在堆。
我在 Stack Overflow 上找到了这个方法来判断值是否被装箱
public static bool IsBoxed<T>(T value)
{
return
(typeof(T).IsInterface || typeof(T) == typeof(object)) &&
value != null &&
value.GetType().IsValueType;
}
但是它说它不是盒装的。我现在有点困惑,谁能给我解释一下?
最佳答案
Main
中只有一个 BoolClass
实例 - 用
BoolClass bc1 = new BoolClass { Value = false }
第二个变量 bc2
引用 BoolClass
的同一个实例,以及附加到该实例的所有属性。这是因为引用类型不会被复制。
因此,只有一个Value
属性,它属于BoolClass
实例。通过对实例的两个引用可以看到对该属性的任何操作。
关于c# - 为什么当值类型是引用类型的属性时,它的行为就像引用类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46489404/