我知道什麼是「拳」是:「拳擊」如何在.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