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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

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

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

double高精度小數型:decimal布爾型:bool枚舉類型enumE{...}形式的用戶定義的類型結構類型structS{...}形式的用戶定義的類型可以為

null的類型其他所有具有

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

數組類型一維和多維數組,例如

int[]和

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

ref和

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

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

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

@"hello“【例2.11】字符串類型變量示例2.4.8可以為null的類型可以為null的類型表示可被賦值為null值的值類型變量,其取值范圍為其基礎值類型正常范圍內的值,再加上一個null值。例如,bool?(Nullable<bool>)的值包括true、false或null可以為null的類型通常用于包含不可賦值的元素的數據類型可以為null的類型的聲明語法為T?x;或Nullable<T>x;其中的T為值類型。語法T?是Nullable<T>的簡寫。可以為null的類型賦值的方法與為一般值類型賦值的方法相同。例如:int?x=10;【例2.12】可以為null的類型示例2.5類型轉換隱式轉換只允許發生在從小的值范圍的類型到大的值范圍的類型的轉換,轉換后的數值大小不受影響,然而,從int、uint或long到float的轉換以及從long到double的轉換的精度可能會降低轉換源轉換目標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顯式轉換(強制轉換)顯式強制轉換調用轉換運算符,從一種類型轉換為另一種類型。如果未定義相應的轉換運算符,則強制轉換會失敗。可以編寫自定義轉換運算符,在用戶定義類型之間進行轉換顯式數值轉

溫馨提示

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

評論

0/150

提交評論