这个问题更多是出于好奇,而不是真正的问题。考虑以下代码(如果重要,请使用C#4.0):
class Program {
static Point myPoint = new Point(3, 5);
static void Main(string[] args) {
Console.WriteLine("Point Struct Before: " + myPoint);
object point = GetPoint();
Console.WriteLine("Point Object Before: " + point);
myPoint.X = 10;
Console.WriteLine("Point Struct After: " + myPoint);
Console.WriteLine("Point Object After: " + point);
}
static object GetPoint() {
return myPoint;
}
}
输出以下内容:
Point Struct Before: 3;5
Point Object Before: 3;5
Point Struct After: 10;5
Point Object After: 3;5
现在,这可以正常工作,这意味着将复制而不是引用
GetPoint()
返回的点。 (否则,最后一行也将显示为“ 10; 5”。)现在我的问题是:为什么这样做?编译器如何知道要复制还是引用对象?这是否意味着该决定是在运行时而不是编译期间完成的?
另外,这现在允许我将
point
设置为null
,而struct
不能设置为null
。结构是否自动转换为可为空的类型? 最佳答案
您正在观察称为boxing的过程。它实际上将值类型转换为引用类型。