C#裝箱,拆箱和強制轉換(轉)
阿新 • • 發佈:2018-11-06
出處:https://www.cnblogs.com/fengjiulin110120/p/6605739.html
關係:
強制轉換就包含有裝箱拆箱操作,裝箱就是把值型別轉換成引用型別,反之就是拆箱.
一: 裝箱和拆箱:
裝箱是把值型別轉換成引用型別,而拆箱是把引用型別轉換成值型別;
利用裝箱和拆箱功能,可通過允許值型別的任何值與Object 型別的值相互轉換,將值型別與引用型別連結起來.
例如:
int val = 100;
object obj = val;
Console.WriteLine (“物件的值 = {0}", obj);
這是一個裝箱的過程,是將值型別轉換為引用型別的過程
int val = 100;
object obj = val;
int num = (int) obj;
Console.WriteLine ("num: {0}", 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型別,執行時將會報錯”輸入字串的格式不正確.”