關係:
強制轉換就包含有裝箱拆箱操作,裝箱就是把值型別轉換成引用型別,反之就是拆箱.
一: 裝箱和拆箱:
裝箱是把值型別轉換成引用型別,而拆箱是把引用型別轉換成值型別;
利用裝箱和拆箱功能,可通過允許值型別的任何值與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型別 引用型...