1. 程式人生 > >C#裝箱,拆箱和強制轉換(轉)

C#裝箱,拆箱和強制轉換(轉)

出處: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型別,執行時將會報錯”輸入字串的格式不正確.”