編程入門:C#類型和C#變量
C#類型有兩種:值類型(value type)和引用類型(reference type)。值類型變量直接包括它們的數(shù)據(jù),而引用類型變量存儲的是它們的數(shù)據(jù)引用,后者被認(rèn)為是對象。對于引用類型,有可能兩個變量引用相同的對象,因此對其中一個變量的操作可能影響另一個對象引用的對象。對于值類型,每個變量都有自己的數(shù)據(jù)拷貝,因此對一個變量的操作不可能影響其他變量(ref和out參數(shù)變量例外)。
C#的值類型進(jìn)一步劃分為簡單類型(simple type)、枚舉類型(enum type)和結(jié)構(gòu)類型(struct type);C#的引用類型進(jìn)一步劃分為類類型(class type)、接口類型(interface type)、數(shù)組類型(array type)和委托類型(delegate type)。
表1.1為整個C#類型系統(tǒng)的概述。
表1.1 C#類型系統(tǒng)的概述
8個整型類型分別支持8位、16位、32位和64位整數(shù)的有符號或者無符號格式。
兩個浮點類型,float和double,分別用32位單精度和64位雙精度的IEEE754格式表示。
decimal是128位的數(shù)據(jù)類型,適合財金和貨幣方面的計算。
C#的bool類型用于表示布爾值——true或者false。
在C#中,字符和字符串的處理使用Unicode編碼。char類型表示16位的Unicode編碼單元,string類型表示16位的Unicode編碼單元的序列。
表1.2總結(jié)了C#的數(shù)值類型。
表1.2 C#的數(shù)值類型
C#程序使用類型聲明創(chuàng)建新類型。類型聲明指定新類型的名字和成員。有5種C#類型可由用戶自定義:類類型、結(jié)構(gòu)類型、接口類型、枚舉類型和委托類型。
類類型定義了一個數(shù)據(jù)結(jié)構(gòu),它包括數(shù)據(jù)成員(字段)和函數(shù)成員(方法、屬性及其他)。類類型支持繼承和多態(tài),即派生類能夠擴(kuò)展和特殊化基類的機(jī)制。
結(jié)構(gòu)類型與類類型相似,表示帶有數(shù)據(jù)成員和函數(shù)成員的結(jié)構(gòu)。然而,與類類型不同的是,結(jié)構(gòu)是值類型,不需要堆分配。結(jié)構(gòu)不支持用戶指定的繼承,所有的結(jié)構(gòu)類型隱式地繼承類型object。
接口類型定義了一個約定,作為一組函數(shù)成員命名的集合。實現(xiàn)接口的類或結(jié)構(gòu)必須提供接口函數(shù)成員的實現(xiàn)。接口可能從多個基接口繼承而來,類或結(jié)構(gòu)也可能實現(xiàn)多個接口。
枚舉類型是帶有命名常量的獨特類型。每個枚舉類型有一個底層的類型,它必須是8個整型類型之一。枚舉類型的值集與底層類型的值集相同。
委托類型通過特定的參數(shù)列表和返回類型表示對方法的引用。委托將方法處理為實體,實體能夠賦值給變量,并且當(dāng)做參數(shù)傳遞。委托類似于某些程序語言中的方法指針,不同之處在于,委托是面向?qū)ο蟮模⑶沂穷愋桶踩摹?/P>
C#支持任何類型的一維和多維數(shù)組。不同于其他類型,數(shù)組類型在它們被使用前不必聲明。事實上,數(shù)組類型的構(gòu)造是由某個類型名加上方括號。例如,int[]是int的一維數(shù)組,int[,]是int的二維數(shù)組,而int[][]是int的一維數(shù)組的一維數(shù)組。
C#類型系統(tǒng)是統(tǒng)一的,這樣任何類型的值都能夠被處理成對象。C#中每一個類型直接或者間接從object類繼承而來,并且object是所有類型最終的基類。值類型的值可以通過執(zhí)行裝箱(boxing)和取消裝箱(unboxing)的操作處理為對象。在下面的示例中,int被轉(zhuǎn)換為object,然后又轉(zhuǎn)回到int。
- using System;
- class Test
- {
- static void Main(){
- int i=123;
- object o=i; //裝箱
- int j=(int)o; //取消裝箱
- }
- }
當(dāng)值類型的值被強(qiáng)制類型轉(zhuǎn)換為object時,就會分配持有該值的對象實例(也稱為“箱子”),并且值也被拷貝到那個箱子里。相反地,當(dāng)object引用被強(qiáng)制類型轉(zhuǎn)換為值類型時,要檢查這個引用類型是否是當(dāng)前值類型的箱子,如果是的話,箱子中的值就會被拷貝出來。
C#統(tǒng)一的類型系統(tǒng)意味著值類型能夠“按需”轉(zhuǎn)換為對象。由于這種統(tǒng)一性,使用object類型的通用類庫,例如.NET框架中的集合類,能夠通過引用類型和值類型使用。
存在幾種C#變量,包括字段、數(shù)組元素、局部變量和參數(shù)。變量表示了存儲的位置,并且每一個變量都有一個類型,以決定什么樣的值能夠存入變量中,如表1.3所示。
表1.3 C#變量
C#類型和C#變量的知識就介紹到這里,希望對大家有用。
【編輯推薦】


















