struct
都会自动成为System.ValueType
的子类,而System.ValueType
是System.Object
的子类。但当我们将一些struct
分配给对象类型的引用时,它会被装箱。例如:struct A
{
public int i;
}
A a;
object obj = a; // boxing takes place here
所以我的问题是:如果 A
是 System.Object
的后代,编译器不能将其向上转型为对象类型而不是装箱吗?
ToString
这样的东西,将其强制转换为System.Object
或者说,在一个静态类型为IComparable
的装箱整数上调用IComparable.CompareTo
。我认为这里需要进行vtable查找,不是吗? - Mehrdad Afshari2.ToString()
是否会将2
装箱。顺便问一下,有没有可能仅通过C#代码来证明这个事实?我的意思是,除了反汇编或者深入挖掘WinDbg
之外...System.Object
没有提供一个可以改变装箱值的方法,我不知道如何证明这一点。 - Mehrdad Afshari