Ch02.數(shù)據(jù)類型-變量和常量_第1頁
Ch02.數(shù)據(jù)類型-變量和常量_第2頁
Ch02.數(shù)據(jù)類型-變量和常量_第3頁
Ch02.數(shù)據(jù)類型-變量和常量_第4頁
Ch02.數(shù)據(jù)類型-變量和常量_第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第2章數(shù)據(jù)類型、變量和常量為語言間互操作性提供基本框架的通用類型系統(tǒng)(CTS)的層次結(jié)構(gòu)值類型、引用類型及其差異裝箱和拆箱的基本概念變量的命名、聲明、賦值、分類和作用域預定義基本數(shù)據(jù)類型的使用類型轉(zhuǎn)換方法:隱式轉(zhuǎn)換、顯式轉(zhuǎn)換(強制轉(zhuǎn)換)和Convert類提供的類型轉(zhuǎn)換方法2.1數(shù)據(jù)類型通用類型系統(tǒng)(CTS)定義了如何在運行庫中聲明、使用和管理類型類別說明值類型簡單類型有符號整型:sbyte、short、int和

long無符號整型:byte、ushort、uint和

ulongUnicode字符型:charIEEE浮點型:float和

double高精度小數(shù)型:decimal布爾型:bool枚舉類型enumE{...}形式的用戶定義的類型結(jié)構(gòu)類型structS{...}形式的用戶定義的類型可以為

null的類型其他所有具有

null值的值類型的擴展引用類型類類型其他所有類型的最終基類:objectUnicode字符串型:stringclassC{...}形式的用戶定義的類型接口類型interfaceI{...}形式的用戶定義的類型

數(shù)組類型一維和多維數(shù)組,例如

int[]和

int[,]委托類型delegateintD(...)形式的用戶定義的類型2.1.2值類型值類型(valuetype)的變量在堆棧(Stack)中直接包含其數(shù)據(jù),每個變量都有自己的數(shù)據(jù)副本(除

ref和

out參數(shù)變量外),因此對一個變量的操作不影響另一個變量C#的值類型分為簡單類型(simpletype)、枚舉類型(enumtype)、結(jié)構(gòu)類型(structtype)。還可以為

null的類型(nullabletype)2.1.3引用類型引用類型(referencetype)的變量在堆棧(Stack)中存儲對數(shù)據(jù)(對象)的引用(地址),數(shù)據(jù)(對象)存儲在托管運行環(huán)境管理的堆(Heap)中。對于引用類型,兩個變量可能引用同一個對象,因此對一個變量的操作可能影響另一個變量所引用的對象C#的引用類型分為類類型(classtype)、接口類型(interfacetype)、數(shù)組類型(arraytype)和委托類型(delegatetype)【例2.1】值類型與引用類型之間的區(qū)別示例變量val1、val2為值類型;ref1、ref2為引用類型。比較其運行結(jié)果和內(nèi)存分配示意圖2.1.4裝箱和拆箱C#中所有的類型都繼承于System.Object根類型,而所有的值類型都繼承于System.ValueType類型通過裝箱(boxing)和拆箱(unboxing)機制,可以實現(xiàn)值類型和引用類型之間的轉(zhuǎn)換裝箱轉(zhuǎn)換是指將一個值類型隱式或顯式地轉(zhuǎn)換成一個object類型,或者把這個值類型轉(zhuǎn)換成一個被該值類型應用的接口類型(interface-type)拆箱轉(zhuǎn)換是指將一個對象類型顯式地轉(zhuǎn)換成一個值類型,或是將一個接口類型顯式地轉(zhuǎn)換成一個執(zhí)行該接口的值類型【例2.2】裝箱(boxing)和拆箱(unboxing)示例2.2變量-變量的命名規(guī)則變量名的第一個字符必須是字母、下劃線(“_”)或@,其后的字符可以是字母、下劃線或數(shù)字。注意,C#定義的關(guān)鍵字不能用作變量名。但可以定義@加關(guān)鍵字的變量名myVar、_strName、obj1、@namespace為正確的變量名99var、It'sOK、namespace為錯誤的變量名.NETFramework一般遵循兩種命名約定:PascalCase和camelCase在獲取變量的值之前,變量必須已明確賦值(definitelyassigned)2.2.2變量的聲明和賦值聲明變量:變量類型變量名;變量賦值:變量

=要賦的值;C#變量被訪問之前必須被初始化;否則編譯時會報錯。因此,不可能訪問一個未初始化變量【例2.3】變量的聲明和賦值示例2.2.3變量的分類C#中,變量分為七種類型:靜態(tài)變量(staticvariables)、非靜態(tài)變量(也即實例變量instancevariables)、數(shù)組元素(arrayelements)、值參數(shù)(valueparameters)、引用參數(shù)(referenceparameters)、輸出參數(shù)(outputparameters)和局部變量(localvariables)2.2.4變量的作用域1.局部變量的作用域局部變量存在于表示聲明該變量的塊語句或方法結(jié)束的封閉花括號之前的作用域內(nèi)在for、while或類似語句中聲明的局部變量存在于該循環(huán)體內(nèi)2.局部變量的作用域沖突同名的局部變量不能在同一作用域內(nèi)聲明兩次3.字段和局部變量的作用域沖突在類的方法中可以定義與已定義的字段名相同的局部變量,而不產(chǎn)生沖突【例2.4】變量的作用域示例2.3常量在聲明和初始化變量時,在變量的前面加上關(guān)鍵字const,就可以把該變量指定為一個常量。常量的命名規(guī)則一般采用大寫字母常量必須在聲明時初始化;指定了其值后,不能再對其進行賦值修改;常量總是靜態(tài)的,但不必(不允許)包含修飾符static【例2.5】常量的聲明和賦值示例2.4預定義數(shù)據(jù)類型C#的內(nèi)置值類型表示基本數(shù)據(jù)類型,包括整型、浮點類型、decimal類型、bool類型和字符類型。C#支持兩個預定義的引用類型:object和string2.4.1整型C#支持8個預定義整數(shù)類型,如表2-2所示,分別支持8位、16位、32位和64位整數(shù)值的有符號和無符號的形式【例2.6】整型變量示例名稱CTS類型說明范圍sbyteSystem.SByte8位有符號整數(shù)–128到127shortSystem.Int1616位有符號整數(shù)–32768到32767intSystem.Int3232位有符號整數(shù)–2147483648到2147483647longSystem.Int6464位有符號整數(shù)–9223372036854775808到9223372036854775807byteSystem.Byte8位無符號整數(shù)0到255ushortSystem.Uint1616位無符號整數(shù)0到65535uintSystem.Uint3232位無符號整數(shù)0到4294967295ulongSystem.Uint6464位無符號整數(shù)0到184467440737095516152.4.2浮點類型C#支持2種浮點數(shù)據(jù)類型(float和double),用于包含小數(shù)的計算【例2.7】浮點類型變量示例名稱CTS類型說明位數(shù)范圍(大致)floatSystem.Single32位單精度浮點數(shù)7±1.5×10-45到±3.4×1038doubleSystem.Double64位雙精度浮點數(shù)15/16±5.0×10-324到±1.7×103082.4.3decimal類型C#支持高精度小數(shù)類型(decimal),如表2-6所示。decimal數(shù)據(jù)類型一般用于財務計算,即可以用較大的精確度來表示貨幣值【例2.8】decimal類型變量示例名稱CTS類型說明位數(shù)范圍(大致)decimalSystem.Decimal128位高精度十進制數(shù)表示法28/29±1.0×10-28到±7.9×10282.4.4bool類型C#的bool數(shù)據(jù)類型用于邏輯運算,包含bool值true或false【例2.9】布爾類型變量示例名稱CTS類型說明值boolSystem.Boolean布爾類型true或false2.4.5字符類型C#的char數(shù)據(jù)類型用于保存單個字符的值C#語言中,字符使用單引號括起來(例如'A');也可以使用4位16進制的Unicode值(例如'\u0041'),帶有數(shù)據(jù)類型轉(zhuǎn)換的整數(shù)值(例如(char)65),或16進制數(shù)('\x0041')表示它們。特殊符號則需要使用轉(zhuǎn)義序列表示【例2.10】字符類型變量示例名稱CTS類型說明值charSystem.Char字符類型表示一個16位的(Unicode)字符2.4.6object類型object類型是C#編程語言的類層次結(jié)構(gòu)的根類型,object是System.Object的別名,所有的類型都隱含地最終派生于System.Object類object類型主要可以用于兩個目的:可以使用object引用綁定任何類型的對象;object類型執(zhí)行許多基本的一般用途的方法,包括Equals()、GetHashCode()、GetType()和ToString()等名稱CTS類說明objectSystem.Object根類型,CTS中的其他類型都是從它派生而來的(包括值類型)2.4.7string類型C#字符串處理使用string(System.String的別名)類型表示零或更多Unicode字符組成的序列string是引用類型C#支持兩種形式的字符串正則字符串(regularstring)包含在雙引號中的零個或多個字符組成(如"hello"),并且可以包含簡單轉(zhuǎn)義序列(如表示制表符的\t)、十六進制轉(zhuǎn)義序列和Unicode轉(zhuǎn)義序列原義字符串(verbatimstring)由@字符后跟開始的雙引號字符、零個或多個字符以及結(jié)束的雙引號字符組成。一個簡單的示例就是

@"hello“【例2.11】字符串類型變量示例2.4.8可以為null的類型可以為null的類型表示可被賦值為null值的值類型變量,其取值范圍為其基礎(chǔ)值類型正常范圍內(nèi)的值,再加上一個null值。例如,bool?(Nullable<bool>)的值包括true、false或null可以為null的類型通常用于包含不可賦值的元素的數(shù)據(jù)類型可以為null的類型的聲明語法為T?x;或Nullable<T>x;其中的T為值類型。語法T?是Nullable<T>的簡寫??梢詾閚ull的類型賦值的方法與為一般值類型賦值的方法相同。例如:int?x=10;【例2.12】可以為null的類型示例2.5類型轉(zhuǎn)換隱式轉(zhuǎn)換只允許發(fā)生在從小的值范圍的類型到大的值范圍的類型的轉(zhuǎn)換,轉(zhuǎn)換后的數(shù)值大小不受影響,然而,從int、uint或long到float的轉(zhuǎn)換以及從long到double的轉(zhuǎn)換的精度可能會降低轉(zhuǎn)換源轉(zhuǎn)換目標sbyteshort、int、long、float、double或decimalbyteshort、ushort、int、uint、long、ulong、float、double或decimalshortint、long、float、double或decimalushortint、uint、long、ulong、float、double或decimalintlong、float、double或decimaluintlong、ulong、float、double或decimallongfloat、double或decimalulongfloat、double或decimalcharushort、int、uint、long、ulong、float、double或decimalfloatdouble2.5.2顯式轉(zhuǎn)換(強制轉(zhuǎn)換)顯式強制轉(zhuǎn)換調(diào)用轉(zhuǎn)換運算符,從一種類型轉(zhuǎn)換為另一種類型。如果未定義相應的轉(zhuǎn)換運算符,則強制轉(zhuǎn)換會失敗??梢跃帉懽远x轉(zhuǎn)換運算符,在用戶定義類型之間進行轉(zhuǎn)換顯式數(shù)值轉(zhuǎn)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論