C#數(shù)據(jù)類型簡(jiǎn)單介紹
C#有很多值得學(xué)習(xí)的地方,這里我們主要介紹C#數(shù)據(jù)類型,包括介紹結(jié)構(gòu)數(shù)據(jù)類型是C#的一種內(nèi)置數(shù)據(jù)類型等方面。
C#中的值型變量和引用型變量是有區(qū)別的
與C++一樣,C#也是一種強(qiáng)類型編程語(yǔ)言。C#數(shù)據(jù)類型被分為了二大類:C#語(yǔ)言本身所固有的數(shù)據(jù)類型和用戶自定義數(shù)據(jù)類型,這一點(diǎn)也與C++相似。
此外,C#語(yǔ)言還把變量分為值類型和引用類型。除非是被包含在一個(gè)引用類型中,值類型變量的值保留在棧中,這一點(diǎn)與C++中的變量非常相似。引用類型的變量也是棧的一種,它的值是堆中對(duì)象的地址,與C++中的指針?lè)浅5叵嗨啤V殿愋妥兞康闹当恢苯觽鬟f給方法,引用型變量在被作為參數(shù)傳遞給方法時(shí),傳遞的是索引。
類和界面可以創(chuàng)建引用類變量,但需要指出的是,結(jié)構(gòu)數(shù)據(jù)類型是C#的一種內(nèi)置數(shù)據(jù)類型,同時(shí)也是一種值型的數(shù)據(jù)類型。
注意隱性的C#數(shù)據(jù)類型轉(zhuǎn)換
Boxing和unboxing是使值型數(shù)據(jù)類型被當(dāng)作索引型數(shù)據(jù)類型使用的二個(gè)過(guò)程。值型變量可以被包裝進(jìn)一個(gè)對(duì)象中,然后再被解包回值型變量。包括內(nèi)置數(shù)據(jù)類型在內(nèi)的所有C#數(shù)據(jù)類型都可以被隱性地轉(zhuǎn)化為一個(gè)對(duì)象。包裝一個(gè)值型變量就會(huì)生成一個(gè)對(duì)象的實(shí)例,然后將變量拷貝到實(shí)例中。
Boxing是隱性的,如果在需要索引型數(shù)據(jù)類型的地方使用了值型數(shù)據(jù)類型的變量,值型變量就會(huì)隱性地轉(zhuǎn)化為索引型數(shù)據(jù)類型的變量。Boxing會(huì)影響代碼執(zhí)行的性能,因此應(yīng)當(dāng)盡量避免,尤其是在數(shù)據(jù)量較大的時(shí)候。
如果要將一個(gè)打包的對(duì)象轉(zhuǎn)換回原來(lái)的值型變量,必須顯性地對(duì)它進(jìn)行解包。解包需要二個(gè)步驟:首先對(duì)對(duì)象實(shí)例進(jìn)行檢查,確保它們是由值型的變量被包裝成的;第二步將實(shí)例中的值拷貝到值型變量中。為了確保解包成功,被解包的對(duì)象必須是通過(guò)打包一個(gè)值型變量的值生成的對(duì)象的索引。
- using System;
 - public class UnboxingTest
 - {
 - public static void Main()
 - {
 - int i = 123;
 - //打包
 - object o = i;
 - // 解包(必須是顯性的)
 - int j = (int) o;
 - Console.WriteLine("j: {0}", j);
 - }
 - }
 
如果被解包的對(duì)象是無(wú)效的,或是一個(gè)不同數(shù)據(jù)類型對(duì)象的索引,就會(huì)產(chǎn)生InvalidCastException異外。
【編輯推薦】















 
 
 
 
 
 
 