C 裝箱,拆箱和強制轉換

2022-09-13 12:27:15 字數 1751 閱讀 4315

關係:

強制轉換就包含有裝箱拆箱操作,裝箱就是把值型別轉換成引用型別,反之就是拆箱.

一:  裝箱和拆箱:

裝箱是把值型別轉換成引用型別,而拆箱是把引用型別轉換成值型別;

利用裝箱和拆箱功能,可通過允許值型別的任何值與object 型別的值相互轉換,將值型別與引用型別鏈結起來.

例如: 

int val = 100; 

object obj = val; 

console.writeline (「物件的值 = ", obj); 

這是乙個裝箱的過程,是將值型別轉換為引用型別的過程

int val = 100; 

object obj = val; 

int num = (int) obj; 

console.writeline ("num: ", num); 

這是乙個拆箱的過程,是將值型別轉換為引用型別,再由引用型別轉換為值型別的過程

注意:被裝過箱的物件才能被拆箱;

二:   記憶體分配:

值型別只會在棧中分配。

引用型別分配記憶體與託管堆。

託管堆對應於垃圾**。

三:   強制轉換:

(引用)

1.任何一門程式語言均有相關資料型別。c#也不例外,其基本資料型別有int,short,long,float,double,string等。資料型別之間可以相互轉換。不過轉換過程要注意小型別能轉換成大型別,但大型別一般不能轉換成小型別,也就是說低精度無條件轉高精度,高精度轉低精度需要新增轉換條件

。如int型可以轉換成float型,但float型不一定可以轉換成int型,至少這在c,c++是這樣,但在c#中明顯有了改變.

例如:double dbl_num=12345678910.456;

int k = (int) dbl_num ;//此處運用了強制轉換

以上**如果在c,c++中強制轉換成int型,肯定會出錯,但現在在c#中卻不會出錯了,不過轉換後的值往往是溢位值,是不精通的。這點需要大家注意。

2.採用另一種方式轉換型別,如int.parse(),int32.parse()等採用方法來轉換.

string str="100";

int i=int.parse(str);

注意:str除掉引號的型別必須和*.parse的型別一致。如果將100改成100.78,即變成float型別,執行時將會報錯」輸入字串的格式不正確.」

3.採用字尾式轉換,如k.tostring(),一般運用於字串或日期等其它型別

int i=100;

string s=i.tostring();

4.採用convert類來實現轉換,該類基本支援所以型別之間的轉換

string str="100";

int i = convert.toint16(str);

注意:str除掉引號的型別必須和convert.*的型別一致。如果將100改成100.78,即變成float型別,執行時將會報錯」輸入字串的格式不正確.」

C 基礎 型別強制轉換,拆箱,裝箱

一 裝箱和拆箱 裝箱就是 將值型別轉換為引用型別。拆箱就是 將引用型別轉換為值型別。比如我們非常常用的 tostring 方法,就是典型的乙個裝箱的過程。再如下面的例子 int i 10 object y object i 這就是裝箱 int x int y 這是拆箱。二 物件的相等比較 在c 中,...

c 裝箱和拆箱

c 裝箱和拆箱 概念 裝箱 將值型別轉換為引用型別的過程叫做裝箱 值型別 引用型別 相反,拆箱 將引用型別轉換為值型別 叫做拆箱 引用型別 值型別 裝箱例子 int i 2008 object obj i console.writeline 1 i的值為,裝箱之後的值 i,obj i 927 con...

C 裝箱和拆箱

1 什麼是裝箱和拆箱 裝箱是將值型別轉換為引用型別 拆箱是將引用型別轉換為值型別 2 什麼時候需要裝箱?值型別是高效輕量的型別,因為預設情況下在堆上不包括他們的物件元件,然而,如果我們需要物件元件,這個時候就需要裝箱了。最常見的場景就是 乙個方法你希望能共用,設定的引數型別是object型別 引用型...