2010-08-26 50 views

回答

2

這就是所謂的拳擊和拆箱。

int i = 5; 
object o = i; 
int j = (int)o; 

2

任何類型的值可以被轉換到參考類型,例如:

int myInt = 5; 
object obj = myInt; 
+2

但是記住,這是_not_等同於C結構'INT * OBJ = myInt'。盒裝參考是價值的_copy_,所以你不能突變原,而C基準實際上指向本地的內存地址,並可能允許原來的突變。如果您將指針傳遞到堆棧中的值並在調用方法退出後繼續使用,那麼也可能會讓應用程序崩潰。對於最後一個原因(除其他外),.NET不允許捕獲對值類型的引用並且_persisting_它。 – 2010-08-26 13:58:53

9

目的是什麼?

object intAsRef = 32; 

是一個int作爲參考類型。但是,這被稱爲拳擊(see here),通常被認爲是東西,以避免,而不是渴望。

在另一方面,如果你想參考值對象,這樣的方法,然後裏面你需要更改接收方法的簽名和電話,你可以改變它的值:

public void ChangeValueOfInt(ref int input) 
{ 
    input = 4; 
} 

int a = 2; 
ChangeValueOfInt(ref a); 
//a now equals 4 
+1

如果你想在'ref'參數不允許lambda表達式更改值,那麼你不得不使用拳。 – zionpi 2015-04-09 01:58:56

1

的過程被稱爲在.NET「拳擊」,它是指這樣的事實,即使值類型繼承的引用類型Object。在.NET中任何類型都可以轉換爲Object正是如此:

int myint = 0; 
object myIntAsRefType = myInt; 

您可以與其他引用類型做到這一點,還有:

Random rnd = new Random(); 
object rndAsObject = rnd; 

之前,你可以使用任何自己的方法或屬性,您必須取消它們裝箱:

if(myIntAsRefType is int) 
int myNewInt = myIntAsRefType as int; 

或者:

if(myIntAsRefType is int) 
int myNewInt = (int)myIntAsRefType; 
0

隨着裝箱和拆箱的幫助下,你可以將任何值類型引用類型。拳擊可以讓你把你的價值類型包裝在對象和UnBoxing相反。

拳擊

int i = 10; 
Object obj = (Object)i; 

拆箱

int j=(int)obj; 
相關問題