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類型,運行時將會報錯”輸入字符串的格式不正確.”

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM