我知道什么是“拳”是:“拳击”如何在.NET中工作?
object myBox = 5;
现在,我希望增加我的知识。是为这个拳击操作创建的特殊类型?或者是System.Object
使用? .NET如何处理拳击?
我知道什么是“拳”是:“拳击”如何在.NET中工作?
object myBox = 5;
现在,我希望增加我的知识。是为这个拳击操作创建的特殊类型?或者是System.Object
使用? .NET如何处理拳击?
没有特殊类型;盒装值类型是运行时的实现细节。但要理解它的最简单的方法就是想象,有一种特殊类型:
class Box<T> where T : struct
{
T value;
}
凡型Box<T>
也实现了所有的方法,接口,等等,T的,不管是什么牛逼恰好是。所以,举个例子,你可以想象Box<int>
有一个方法ToString,它只是简单地调用int.ToString的值,然后返回结果。
拳击只是一种获取对非参考类型的引用的机制。你只需在盒子周围制作一个盒子,并获得盒子的参考。
谢谢你的回答。很像我一直在想的 – 2011-05-13 20:37:50
CLR处理拳击。
考虑在这种情况下会发生什么:
private void myUselessMethod()
{
int i = 5;
object o = i;
}
'i'
是值类型(一个Int32),并作为一个局部变量,是在栈上分配的,它仅配置4个字节,大概。 然后,i
被包装成对象,即盒装。 什么CLR(公共语言运行库)的作用:
我觉得最令人困惑的这个装箱/拆箱/引用类型/值类型的业务是什么,一方面,一切都是对象,甚至是值类型的对象,并System.Object
派生。另一方面,当一个对象被声明时,它总是一个引用类型。
所以
void myMethod(System.Object o)
{
doStuff();
}
void myCallingMethod()
{
int i = 5;
myMethod(i);
}
将盒I将它传递给myMethod的,即使i
是int,一个VALUETYPE,因此非常清楚的目的,由于值类型从System.Object
衍生得。
有关[拳击和拆箱]的详细信息,请参阅msdn(http://msdn.microsoft.com/zh-cn/library/yz2be5wk。aspx) – 2011-05-13 20:30:08
MSDN拥有您需要的所有信息。 http://msdn.microsoft.com/en-us/library/yz2be5wk.aspx – alexn 2011-05-13 20:30:19
是所有关于执行..我没有想到要查看MSDN内 – 2011-05-13 20:33:19