數(shù)據(jù)類型與流程控制課件_第1頁
數(shù)據(jù)類型與流程控制課件_第2頁
數(shù)據(jù)類型與流程控制課件_第3頁
數(shù)據(jù)類型與流程控制課件_第4頁
數(shù)據(jù)類型與流程控制課件_第5頁
已閱讀5頁,還剩111頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第2章數(shù)據(jù)類型與流程控制

第2章數(shù)據(jù)類型與流程控制

12.1數(shù)據(jù)類型

2.1.1C#數(shù)據(jù)類型的分類為了方便識別和處理,編程語言系統(tǒng)中的不同信息在計(jì)算機(jī)中具有不同的表示,占用不同的儲存空間,這些信息在語言系統(tǒng)中稱之為數(shù)據(jù)類型。C#中的數(shù)據(jù)類型和C++是類似的。但在C#中數(shù)據(jù)類型分為兩種:值類型和引用類型,如圖2-1所示。值類型包括一些數(shù)值類型(例如int和float)、char、枚舉類型和結(jié)構(gòu)類型。引用類型包括類、接口、委托(delegate)和數(shù)組類型。在C#中,內(nèi)置數(shù)據(jù)類型除了字符串(string)類型與對象(object)類型外,其余均為值類型。2.1數(shù)據(jù)類型2.1.1C#數(shù)據(jù)類型的分類22.1數(shù)據(jù)類型C#中的數(shù)據(jù)類型的劃分如圖2-1所示。2.1數(shù)據(jù)類型C#中的數(shù)據(jù)類型的劃分如圖2-1所示。32.1數(shù)據(jù)類型值類型和引用類型的區(qū)別在于:值類型變量直接存儲在堆棧中,且占用空間大小相對固定,變量直接包含他們的數(shù)據(jù),可以直接訪問其值,訪問速度快;而引用類型數(shù)據(jù)需要通過存儲在棧中的引用來間接訪問其值,實(shí)際內(nèi)容存儲在內(nèi)存的堆中,占用空間大小不固定,訪問速度慢。表2-1所示為值類型和引用類型的區(qū)別。

特性值類型引用類型變量中保存的內(nèi)容實(shí)際數(shù)據(jù)指向?qū)嶋H數(shù)據(jù)的引用指針內(nèi)存空間配置堆棧受管制的堆內(nèi)存需求較少較多執(zhí)行效率較快較慢內(nèi)存釋放時(shí)間點(diǎn)執(zhí)行超過定義變量的作用域時(shí)由垃圾回收機(jī)制負(fù)責(zé)回收2.1數(shù)據(jù)類型值類型和引用類型的區(qū)別在于:值類型變量直接42.1數(shù)據(jù)類型1.整數(shù)類型整數(shù)類型(也叫整型)表示無小數(shù)部分的數(shù)字。根據(jù)變量在內(nèi)存中所占的位數(shù)不同,C#將整型分為8種:字節(jié)型(sbyte)、無符號字節(jié)型(byte)、短整型(short)、無符號短整型(ushort)、整型(int)、無符號整型(uint)、長整型(long)、無符號長整型(ulong)。整型的說明及示例如表2-2所示。2.1數(shù)據(jù)類型1.整數(shù)類型52.1數(shù)據(jù)類型表2-2整數(shù)類型的關(guān)鍵字及說明關(guān)鍵字.NET類型說明示例sbyteSystem.Sbyte8位有符號整型,取值-128~127sbyteval=12;byteSystem.Byte8位無符號整型,取值0~255shortval=12;intSystem.Int3232位有符號整型,取值-231~231-1intval=12;uintSystem.UInt3232位無符號整型,取值0~232-1uintval1=12;uintval2=32U;shortSystem.Int1616位有符號整型,取值-215~215-1shortval1=12;ushortSystem.UInt1616位無符號整型,取值0~216-1ushortval1=12;longSystem.Int6464位有符號整型,取值-263~263-1longval1=12;longval2=12L;ulongSystem.UInt6464位無符號整型,取值0~264-1ulongval1=23;ulongval2=23U;ulongval3=56L;2.1數(shù)據(jù)類型表2-2整數(shù)類型的關(guān)鍵字及說明關(guān)鍵字.62.1數(shù)據(jù)類型2.實(shí)數(shù)類型C#中的實(shí)數(shù)類型有3種:float、double、decimal。其中double的取值范圍最廣,decimal取值范圍其次,但它的精度高。具體見表2-3。表2-3實(shí)數(shù)類型的關(guān)鍵字及說明關(guān)鍵字.NET類型說明示例floatSystem.Float32位單精度浮點(diǎn)型,±1.5×10-45~3.4×1038,精度為7位floatval=12.3F;doubleSystem.Double64位雙精度浮點(diǎn)型,±5.0×10-324~1.7×10308,精度為15~16位doubleval=23.12D;decimalSystem.Decimal128位小數(shù)類型,1.0×10-28到~7.9×1028精度為28~29位decimalval=1.23M;2.1數(shù)據(jù)類型2.實(shí)數(shù)類型關(guān)鍵字.NET類型說明72.1數(shù)據(jù)類型3.字符類型和字符串類型字符類型也叫字符型,用char表示,為單個(gè)Unicode字符,一個(gè)Unicode字符的標(biāo)準(zhǔn)長度為兩個(gè)字節(jié),它在機(jī)器中占16位,其范圍為0~65535。字符一般是用單引號括起來的一個(gè)字符,如:'a','A',也可以寫成轉(zhuǎn)義字符、十六進(jìn)制轉(zhuǎn)換碼或Unicode表示形式。此外,整數(shù)也可以顯式地轉(zhuǎn)換為字符。2.1數(shù)據(jù)類型3.字符類型和字符串類型82.1數(shù)據(jù)類型常用的轉(zhuǎn)義字符如表2-4所示。轉(zhuǎn)義符字符名字符的Unicode值轉(zhuǎn)義符字符名字符的Unicode值\'單引號0x0027\f換頁0x000c\"雙引號0x0022\n新行0x000A\\反斜杠0x005c\r回車0x000D\0空字符0x0000\t水平制表符0x0009\a警告(產(chǎn)生蜂鳴)0x0007\v垂直制表符0x000B\b退格0x00082.1數(shù)據(jù)類型常用的轉(zhuǎn)義字符如表2-4所示。轉(zhuǎn)義符字92.1數(shù)據(jù)類型4.布爾類型布爾型主要用于邏輯判斷,這種類型的數(shù)據(jù)只有true和false兩個(gè)值。在C++中,false相當(dāng)于0,true相當(dāng)于1。但在C#中,廢棄了這種不正規(guī)的表達(dá)方式,true值不能被任何非零值取代,將整數(shù)類型轉(zhuǎn)換為布爾類型是不合法的。例如:boolx=1;//錯(cuò)誤,不存在這種寫法booly=1;//錯(cuò)誤,不存在這種寫法boolx=true;//正確,可以被執(zhí)行2.1數(shù)據(jù)類型4.布爾類型102.1數(shù)據(jù)類型5.枚舉類型枚舉類型是值類型的一種特殊形式,它從System.Enum繼承而來,并為基礎(chǔ)類型的值(如Byte、Int32或UInt64)提供替代名稱。枚舉類型也是一種自定義數(shù)據(jù)類型,它允許用符號代表數(shù)據(jù)。枚舉是指程序中某個(gè)變量具有一組確定的值,通過“枚舉”可以將其值一一列出來。enum關(guān)鍵字用于聲明枚舉類型,基本格式如下:enum枚舉類型名{由逗號分隔的枚舉數(shù)標(biāo)識符};2.1數(shù)據(jù)類型5.枚舉類型112.1數(shù)據(jù)類型【例2-1】枚舉類型示例。usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;namespaceex01{classProgram{enumweek{monday,tuesday,wednesday,thursday,friday,saturday,sunday};staticvoidMain(string[]args){weekday=week.thursday;inta=(int)day;intb=(int)week.sunday;Console.WriteLine("a={0},b={1}",a,b);Console.ReadLine();}}}2.1數(shù)據(jù)類型【例2-1】枚舉類型示例。122.1數(shù)據(jù)類型6.結(jié)構(gòu)類型結(jié)構(gòu)類型是用戶自己定義的一種類型,它是由其他類型組合而成的,可包含構(gòu)造函數(shù)、常數(shù)、字段、方法、屬性、索引器等。結(jié)構(gòu)與類不同在于結(jié)構(gòu)為值類型而不是引用類型,并且結(jié)構(gòu)不支持繼承。結(jié)構(gòu)類型將在第4章講解。2.1數(shù)據(jù)類型6.結(jié)構(gòu)類型132.2不同數(shù)據(jù)類型之間的轉(zhuǎn)換2.2.1顯式轉(zhuǎn)換與隱式轉(zhuǎn)換1.隱式轉(zhuǎn)換C#是一個(gè)強(qiáng)類型的語言,它的數(shù)值類型有一些可以進(jìn)行隱式轉(zhuǎn)換,其他的必須顯式轉(zhuǎn)換,隱式轉(zhuǎn)換的類型只能是長度短的類型轉(zhuǎn)換成長的類型(見表2-5所示),例如int可以轉(zhuǎn)換成long,float,double,decimal;反之必須顯式的轉(zhuǎn)換。例如:inta=7;floatb=a;//隱式轉(zhuǎn)換a=(int)c;//顯示轉(zhuǎn)換2.2不同數(shù)據(jù)類型之間的轉(zhuǎn)換2.2.1顯式轉(zhuǎn)換與隱式142.2不同數(shù)據(jù)類型之間的轉(zhuǎn)換表2-5C#中支持的隱式轉(zhuǎn)換源類型目標(biāo)類型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.2不同數(shù)據(jù)類型之間的轉(zhuǎn)換表2-5C#中支持的隱式152.2不同數(shù)據(jù)類型之間的轉(zhuǎn)換2.顯式轉(zhuǎn)換顯式轉(zhuǎn)換又叫強(qiáng)制類型轉(zhuǎn)換,與隱式轉(zhuǎn)換相反,顯式轉(zhuǎn)換需要用戶明確地指定轉(zhuǎn)換類型,一般在不存在該類型的隱式轉(zhuǎn)換時(shí)才使用。格式如下:(類型標(biāo)識符)表達(dá)式其作用是將“表達(dá)式”值的類型轉(zhuǎn)換為“類型標(biāo)識符”的類型。例如:(int)1.23//把double類型的1.23轉(zhuǎn)換成int類型,結(jié)果為12.2不同數(shù)據(jù)類型之間的轉(zhuǎn)換2.顯式轉(zhuǎn)換162.2不同數(shù)據(jù)類型之間的轉(zhuǎn)換使用上面的顯示轉(zhuǎn)換不能用在bool和string類型上,如果希望string或者bool類型和整數(shù)類型之間的轉(zhuǎn)化可以使用一個(gè)方法Convert。格式如下:Convert.方法名(參數(shù))方法名是To數(shù)據(jù)類型形式,具體含義見表2-6。2.2不同數(shù)據(jù)類型之間的轉(zhuǎn)換使用上面的顯示轉(zhuǎn)換不能用在b172.2不同數(shù)據(jù)類型之間的轉(zhuǎn)換表2-6Convert.方法含義方法名含義ToBoolean將數(shù)據(jù)轉(zhuǎn)換成Boolean類型ToDataTime將數(shù)據(jù)轉(zhuǎn)換成日期時(shí)間類型ToInt16將數(shù)據(jù)轉(zhuǎn)換成16位整數(shù)類型ToInt32將數(shù)據(jù)轉(zhuǎn)換成32位整數(shù)類型ToInt64將數(shù)據(jù)轉(zhuǎn)換成64位整數(shù)類型ToNumber將數(shù)據(jù)轉(zhuǎn)換成Double類型ToObject將數(shù)據(jù)轉(zhuǎn)換成Object類型ToString將數(shù)據(jù)轉(zhuǎn)換成string類型ToBoolean將數(shù)據(jù)轉(zhuǎn)換成Boolean類型2.2不同數(shù)據(jù)類型之間的轉(zhuǎn)換表2-6Convert.182.2不同數(shù)據(jù)類型之間的轉(zhuǎn)換2.2.2裝箱和拆箱對于值類型和Object類型之間的轉(zhuǎn)換,可以用裝箱技術(shù)和拆箱技術(shù)來實(shí)現(xiàn)。C#中的任何類型的值都可以按照對象來處理,使用object類型的通用庫(如.NETFramework中的集合類)既可以用于引用類型,又可以用于值類型。(1)Object類Object類是所有類的基類,它是System命名空間下的一個(gè)類,C#中所有的類型都是直接或間接地從Object類繼承而來。因?yàn)樗撬袑ο蟮幕?,所以可把任何類型的值賦給它,例如,一個(gè)整型:objecttheObj=123;2.2不同數(shù)據(jù)類型之間的轉(zhuǎn)換2.2.2裝箱和拆箱192.2不同數(shù)據(jù)類型之間的轉(zhuǎn)換1.裝箱轉(zhuǎn)換裝箱轉(zhuǎn)換是指將一個(gè)值類型的數(shù)據(jù)隱式地轉(zhuǎn)換成一個(gè)對象類型的數(shù)據(jù)。把一個(gè)值類型裝箱,就是創(chuàng)建一個(gè)object類型的實(shí)例,并把該值類型的值復(fù)制給這個(gè)object實(shí)例。例如,下面語句就執(zhí)行了裝箱轉(zhuǎn)換:inti=123;objectobj=i;//裝箱轉(zhuǎn)換2.2不同數(shù)據(jù)類型之間的轉(zhuǎn)換1.裝箱轉(zhuǎn)換202.2不同數(shù)據(jù)類型之間的轉(zhuǎn)換上面的兩條語句中,第1條語句先聲明一個(gè)整型變量i并對其賦值,第2條語句則先創(chuàng)建一個(gè)object類型的實(shí)例obj,然后將i的值復(fù)制給obj。裝箱操作過程如圖2-2所示。在執(zhí)行裝箱轉(zhuǎn)換時(shí),也可以使用顯式轉(zhuǎn)換,如:objectobj=(object)i;2.2不同數(shù)據(jù)類型之間的轉(zhuǎn)換上面的兩條語句中,第1條語句212.2不同數(shù)據(jù)類型之間的轉(zhuǎn)換2.拆箱轉(zhuǎn)換拆箱轉(zhuǎn)換是指將一個(gè)對象類型的數(shù)據(jù)顯式地轉(zhuǎn)換成一個(gè)值類型數(shù)據(jù)。例如,下面語句就執(zhí)行了拆箱轉(zhuǎn)換:inti=123;objectobj=i;intj=(int)obj;//拆箱轉(zhuǎn)換拆箱操作的過程如圖2-3所示。拆箱轉(zhuǎn)換需要(而且必須)執(zhí)行顯式轉(zhuǎn)換,這是它與裝箱轉(zhuǎn)換的不同之處。2.2不同數(shù)據(jù)類型之間的轉(zhuǎn)換2.拆箱轉(zhuǎn)換222.3常量和變量2.3.1常量常量就是值在程序整個(gè)生命周期內(nèi)值始終不變的量。在聲明常量時(shí),要用到const關(guān)鍵字,和C++類似。常量在使用的過程中,不可以對其進(jìn)行賦值的改變,否則系統(tǒng)會自動報(bào)錯(cuò)。常量聲明的基本語法為:const[int/double/long/bool/string/……]常量名;下面是一個(gè)具體聲明常量的例子:constdoublePI=3.1415926;2.3常量和變量2.3.1常量232.3常量和變量2.3.2變量變量代表了存儲單元,每個(gè)變量都有一個(gè)數(shù)據(jù)類型。這決定了這個(gè)變量可以存儲什么值。在任何一種語言中,變量的命名都是有一定的規(guī)則的,當(dāng)然C#.NET也不例外,若在使用中定義了不符合一定規(guī)則的變量,C#.NET語言系統(tǒng)會自動報(bào)錯(cuò)。變量命名規(guī)則如下:(1)變量名的第一個(gè)字符必須是字母、下劃線("_")或者"@"。(2)除去第一個(gè)字母外,其余的字母可以是字母、數(shù)字、下劃線的組合。(3)不可以使用對C#編譯器而言有特定含義的名字(即C#語言的庫函數(shù)名稱和關(guān)鍵字名稱)作為變量名,如using、namespace、struct等等。2.3常量和變量2.3.2變量242.3常量和變量2.3.3變量的作用范圍(作用域)變量不但有類型,還有作用范圍。變量的作用范圍就是應(yīng)用程序中可以使用和操作變量的部分。變量的作用域和C++類似,分為局部作用域和類作用域。(1)局部作用域方法(即函數(shù))中聲明的任何變量都具有那個(gè)方法的作用域;一旦方法結(jié)束,它們也會消失,而且只能由那個(gè)方法內(nèi)部執(zhí)行的代碼來訪問。2.3常量和變量2.3.3變量的作用范圍(作用域)252.3常量和變量這些變量稱為局部變量(localvariable),因?yàn)樗鼈兙窒抻诼暶魉鼈兊哪莻€(gè)方法,不能在其他任何方法中使用。換言之不能使用局部變量在不同的方法之間共享信息。例如:classExample{voidfirstMethod(){intmyVar;...}voidanotherMethod(){myVar=42;//錯(cuò)誤–變量越界...}}2.3常量和變量這些變量稱為局部變量(localvar262.3常量和變量(2)類作用域在類中(但不在一個(gè)方法中)聲明的任何變量都具有那個(gè)類的作用域。例如:classExample{intmyField=0;voidfirstMethod(){myField=42;//正確

...}voidanotherMethod(){myField=42;//正確...}}2.3常量和變量(2)類作用域272.4運(yùn)算符與表達(dá)式2.4.1運(yùn)算符運(yùn)算符指明了進(jìn)行運(yùn)算的類型,例如,加號(+)用于加法、減號(-)用于減法、星號(*)用于乘法、正斜杠(/)則用于除法等。1.算術(shù)運(yùn)算符算術(shù)運(yùn)算符包括:*(乘法運(yùn)算符)、/(除法運(yùn)算符)、%(求余運(yùn)算符,如7%3=1)、+(加法運(yùn)算符)、—(減法運(yùn)算符)、++(增量運(yùn)算符)和--(減量運(yùn)算符)。2.4運(yùn)算符與表達(dá)式2.4.1運(yùn)算符282.4運(yùn)算符與表達(dá)式增量和減量運(yùn)算符都是單目運(yùn)算符,運(yùn)算結(jié)果是將操作數(shù)增1或減1。這兩個(gè)運(yùn)算符都有前置和后置兩種形式。前置形式是指運(yùn)算符在操作數(shù)的前面,后置是指運(yùn)算符在操作數(shù)的后面。例如:a++;//等價(jià)于a=a+1;++a;//等價(jià)于a=a+1;a--;//等價(jià)于a=a-1;--a//等價(jià)于a=a-1;2.4運(yùn)算符與表達(dá)式增量和減量運(yùn)算符都是單目運(yùn)算符,運(yùn)算292.4運(yùn)算符與表達(dá)式注意:(1)C#語言算術(shù)表達(dá)式的乘號(*)不能省略。例如:數(shù)學(xué)式b2-4ac相應(yīng)的C++表達(dá)式應(yīng)該寫成:b*b-4*a*c。(2)C#語言表達(dá)式中只能出現(xiàn)字符集允許的字符。例如:數(shù)學(xué)πr2相應(yīng)的C++表達(dá)式應(yīng)該寫成:PI*r*r。(其中PI是已經(jīng)定義的符號常量)。(3)C#語言算術(shù)表達(dá)式只使用圓括號改變運(yùn)算的優(yōu)先順序(不要指望用{}或[])。可以使用多層圓括號,此時(shí)左右括號必須配對,運(yùn)算時(shí)從內(nèi)層括號開始,由內(nèi)向外依次計(jì)算表達(dá)式的值。2.4運(yùn)算符與表達(dá)式注意:302.4運(yùn)算符與表達(dá)式2.賦值運(yùn)算符賦值運(yùn)算符包括基本賦值運(yùn)算符(=)和復(fù)合賦值運(yùn)算符,復(fù)合賦值運(yùn)算符包括:^=、*=、/=、\=、+=、-=、<<=、>>=和&=。例如:inta=12,x=3,y;a+=a;//表示a=(a+a)=(12+12)=24;y*=x+2;//表示y=y*(x+2);而不是y=y*x+2;注意:賦值運(yùn)算符、復(fù)合賦值運(yùn)算符的優(yōu)先級比算術(shù)運(yùn)算符低。

2.4運(yùn)算符與表達(dá)式2.賦值運(yùn)算符312.4運(yùn)算符與表達(dá)式3.比較運(yùn)算符(1)比較數(shù)值。有六種比較運(yùn)算符可以用于比較數(shù)值,包括:==(相等)、!=(不等于)、<(小于)、<=(小于或等于)、>(大于)、>=(大于或等于)。(2)is運(yùn)算符is運(yùn)算符可以檢查對象是否與特定的類型兼容。例如,要檢查變量是否與object類型兼容。2.4運(yùn)算符與表達(dá)式3.比較運(yùn)算符322.4運(yùn)算符與表達(dá)式(3)as運(yùn)算符as運(yùn)算符用于執(zhí)行引用類型的顯式類型轉(zhuǎn)換。如果要轉(zhuǎn)換的類型與指定的類型兼容,轉(zhuǎn)換就會成功進(jìn)行;如果類型不兼容,as運(yùn)算符就會返回值null。如下面的代碼所示,如果object引用不指向string實(shí)例,把object引用轉(zhuǎn)換為string就會返回null:objecto1="SomeString";objecto2=5;strings1=o1asstring;//s1="SomeString"strings2=o2asstring;//s1=nullas運(yùn)算符允許在一步中進(jìn)行安全的類型轉(zhuǎn)換,不需要先使用is運(yùn)算符測試類型,再執(zhí)行轉(zhuǎn)換。2.4運(yùn)算符與表達(dá)式(3)as運(yùn)算符332.4運(yùn)算符與表達(dá)式4.字符串連接運(yùn)算符對于兩個(gè)字符串類型的變量,可以使用“+”運(yùn)算符實(shí)現(xiàn)字符串的連接。例如:stringstrTemp1,strTemp2;strTemp1="Hello";strTemp2="World.";MessageBox.Show(strTemp1+""+strTemp2);當(dāng)定義了兩個(gè)字符串型變量strTemp1和strTemp2并給它們分別賦值之后,就可以使用第4行的“+”運(yùn)算符把它們連接起來,并在中間夾了一個(gè)空格,形成"HelloWorld."字符串。2.4運(yùn)算符與表達(dá)式4.字符串連接運(yùn)算符342.4運(yùn)算符與表達(dá)式5.邏輯運(yùn)算符C#中常用的邏輯運(yùn)算符有:!(非)、&&(與)、||(或)。計(jì)算的結(jié)果仍然是布爾類型的true或false。與:C#中的符號為“&&”,表示必須滿足兩個(gè)條件。語法為“表達(dá)式1&&表達(dá)式2”?;颍篊#中的符號為“||”,表示滿足兩個(gè)條件中的任意一個(gè)即可。語法為“表達(dá)式1||表達(dá)式2”。2.4運(yùn)算符與表達(dá)式5.邏輯運(yùn)算符352.4運(yùn)算符與表達(dá)式6.typeof運(yùn)算符typeof運(yùn)算符用于獲得系統(tǒng)原型對象的類型,也就是Type對象。常與is運(yùn)算符連用,用于判斷某個(gè)變量是否為某一類型。每一個(gè)類都有一個(gè)GetType方法與它功能很相似。【例2-2】創(chuàng)建控制臺程序,演示typeof運(yùn)算符。2.4運(yùn)算符與表達(dá)式6.typeof運(yùn)算符362.4運(yùn)算符與表達(dá)式7.new運(yùn)算符new運(yùn)算符用于創(chuàng)建一個(gè)新的類型實(shí)例,它有3種形式:(1)對象創(chuàng)建表達(dá)式,用于創(chuàng)建一個(gè)類類型或值類型的實(shí)例。(2)數(shù)組創(chuàng)建表達(dá)式,用于創(chuàng)建一個(gè)數(shù)組類型實(shí)例。(3)委托創(chuàng)建表達(dá)式,用于創(chuàng)建一個(gè)新的委托類型實(shí)例。2.4運(yùn)算符與表達(dá)式7.new運(yùn)算符372.4運(yùn)算符與表達(dá)式2.4.2運(yùn)算符優(yōu)先級在一個(gè)表達(dá)式中出現(xiàn)多種運(yùn)算時(shí),將按照預(yù)先確定的順序計(jì)算并解析各個(gè)部分,這個(gè)順序稱為運(yùn)算符優(yōu)先級。C#中常用的運(yùn)算符的優(yōu)先級見表2-7所示。2.4運(yùn)算符與表達(dá)式2.4.2運(yùn)算符優(yōu)先級382.4運(yùn)算符與表達(dá)式2.4.3表達(dá)式表達(dá)式是一個(gè)或多個(gè)運(yùn)算的組合。C#的表達(dá)式與其他語言的表達(dá)式?jīng)]有顯著的區(qū)別。每個(gè)符合C#規(guī)則的表達(dá)式的計(jì)算都是一個(gè)確定的值。對于常量、變量的運(yùn)算和對于函數(shù)的調(diào)用都可以構(gòu)成最簡單的表達(dá)式。通常表達(dá)式涉及的內(nèi)容包括賦值計(jì)算以及真/假判斷等。一個(gè)賦值表達(dá)式至少應(yīng)有一個(gè)變量,以及一個(gè)賦給變量的值。這里要求所有的變量在使用前都必須初始化,否則C#編譯器將對未初始化的變量給出警告。2.4運(yùn)算符與表達(dá)式2.4.3表達(dá)式392.5控制臺應(yīng)用程序與格式化輸出2.5.1控制臺輸出Console.WriteLine()方法將指定的數(shù)據(jù)(后跟換行符)寫入標(biāo)準(zhǔn)輸出流(屏幕)。Console.WriteLine()方法類似于C語言的printf函數(shù),可以采用“{N[,M][:格式化字符串]}”的形式來格式化輸出項(xiàng),其中的參數(shù)含義如下?;ɡㄌ杮}:用來在輸出中插入變量的值。N:表示輸出變量的序號,變量的序號從0開始。2.5控制臺應(yīng)用程序與格式化輸出2.5.1控制臺輸402.5控制臺應(yīng)用程序與格式化輸出表2-8格式化字符串中字母含義字母含義C或cCurrency貨幣格式D或dDecimal十進(jìn)制格式(十進(jìn)制整數(shù))E或eExponent指數(shù)格式F或fFixedpoint固定精度格式G或gGeneral常用格式N或n用逗號分割千位的數(shù)字,比如1234將會被變成1,234P或pPercentage百分符號格式X或xHex16進(jìn)制格式R或rRound-trip圓整(只用于浮點(diǎn)數(shù))保證一個(gè)數(shù)字被轉(zhuǎn)化成字符串以后可以再被轉(zhuǎn)回成同樣的數(shù)字2.5控制臺應(yīng)用程序與格式化輸出表2-8格式化字符串412.5控制臺應(yīng)用程序與格式化輸出2.5.2控制臺輸入Console.ReadLine()方法從標(biāo)準(zhǔn)輸入流(鍵盤)讀取下一行字符。例如:Stringname=Console.ReadLine();由于ReadLine方法只能輸入字符串,為了輸入數(shù)值,需要進(jìn)行數(shù)據(jù)類型的轉(zhuǎn)換。C#中每種數(shù)據(jù)類型都是一個(gè)結(jié)構(gòu),它們都提供了Parse方法,以用于將數(shù)字的字符串表示形式轉(zhuǎn)換為等效數(shù)值。

2.5控制臺應(yīng)用程序與格式化輸出2.5.2控制臺輸入422.5控制臺應(yīng)用程序與格式化輸出2.5.3字符串的格式化輸出字符串格式String.Format作用是形成格式化的字符串,它和WriteLine都遵守同樣的格式化規(guī)則,采用“{N[,M][:格式化字符串]}”的形式來格式化輸出字符串。格式化字符串中字母含義見表2.5。例如:Strings=String.Format("123");Stringt=String.Format("{0}",123);Stringu=String.Format("{0:D3}",123);Console.WriteLine(s);Console.WriteLine(t);Console.WriteLine(u);2.5控制臺應(yīng)用程序與格式化輸出2.5.3字符串的格432.6C#流程控制語句2.6.1選擇語句選擇語句(條件語句)主要包括兩種類型,分別為if語句和switch語句。1.if語句if語句是最常用的選擇語句,它的功能是根據(jù)所給定的條件(常由關(guān)系、布爾表達(dá)式表示)是否滿足,決定是否執(zhí)行后面的操作。常用的if語句表達(dá)形式有3種:(1)if語句if(表達(dá)式){語句塊};功能:如果表達(dá)式的值為真(即條件成立),則執(zhí)行if語句所控制的語句塊;(2)if…else語句if(表達(dá)式){語句組1}else{語句組2}2.6C#流程控制語句2.6.1選擇語句442.6C#流程控制語句(3)嵌套if語句if語句中,如果內(nèi)嵌語句又是if語句,就構(gòu)成了嵌套if語句。if語句可實(shí)現(xiàn)二選一分支,而嵌套if語句則可以實(shí)現(xiàn)多選一的多路分支情況。if(表達(dá)式1){語句組1}elseif(表達(dá)式2){語句組2}elseif(表達(dá)式3){語句組3}……elseif(表達(dá)式n-1){語句組n-1}else{語句組n}2.6C#流程控制語句(3)嵌套if語句452.6C#流程控制語句2.switch語句當(dāng)分支情況很多時(shí),雖然if-else-if語句可以實(shí)現(xiàn),但多層的嵌套使程序變得冗長且不直觀。針對這種情況,C#與C/C++一樣,也提供了switch語句,用于處理多分支的選擇問題。switch語句的一般形式:switch(表達(dá)式){case常量表達(dá)式1:語句組1;break;case常量表達(dá)式2:語句組2;break;……case常量表達(dá)式n:語句組n;break;default:語句組n+1;break;}2.6C#流程控制語句2.switch語句462.6C#流程控制語句其中:“常量表達(dá)式”是“表達(dá)式”的計(jì)算結(jié)果,可以是整型數(shù)值、字符或字符串。switch語句的執(zhí)行過程:(1)首先計(jì)算switch后面的表達(dá)式的值。(2)將上述計(jì)算出的表達(dá)式的值依次與每一個(gè)case語句的常量表達(dá)式的值比較。如果沒有找到匹配的值,則進(jìn)入default,執(zhí)行語句組n+1;如果沒有default,則執(zhí)行switch語句后的語句;如果找到匹配的值,則執(zhí)行相應(yīng)的case語句組語句,執(zhí)行完該case語句組后,整個(gè)switch語句也就執(zhí)行完畢。因此,最多只執(zhí)行其中的一個(gè)case語句組,然后將執(zhí)行switch語句后的語句。2.6C#流程控制語句其中:472.6C#流程控制語句使用switch語句時(shí)需要注意以下幾點(diǎn):(1)switch條件表達(dá)式的值和每個(gè)case后面的常量表達(dá)式可以是string、int、char、enum或其他類型。特別是常量表達(dá)式可以是string類型,給程序員的開發(fā)帶來了很大方便。(2)每個(gè)case的語句序列可以用大括號括起來,也可以不括起來,但是case塊的最后一個(gè)語句一定是break語句,否則在編譯時(shí)將產(chǎn)生錯(cuò)誤。(3)當(dāng)找到符合條件表達(dá)式值得case語句時(shí),如果其后有語句序列,則它只會執(zhí)行此case中的語句序列,不會再對其他的case標(biāo)記進(jìn)行判斷。但是,如果某個(gè)case塊為空,則會從這個(gè)case塊直接跳到下一個(gè)case塊。2.6C#流程控制語句使用switch語句時(shí)需要注意以下482.6C#流程控制語句2.6.2循環(huán)語句C#中的3種循環(huán)語句:for,while,do…while和C++中是相同的。但是C#中添加了一種循環(huán)語句foreach,在對數(shù)組的輸出方面的使用非常靈活。1.while語句while語句是最常見的、用于執(zhí)行重復(fù)程序代碼的語句,在循環(huán)次數(shù)不固定時(shí)相當(dāng)有效。其聲明語法如下:while(表達(dá)式){

循環(huán)體}2.6C#流程控制語句2.6.2循環(huán)語句492.6C#流程控制語句2.dowhile語句dowhile循環(huán)與while循環(huán)類似,只要條件表達(dá)式為true,循環(huán)體就會不斷地重復(fù)執(zhí)行,但dowhile語句會先執(zhí)行一次循環(huán)體,然后判斷條件表達(dá)式是true或false。它對應(yīng)的循環(huán)體執(zhí)行一次(至少一次)或若干次。其聲明語法如下:do{

循環(huán)體}while(條件表達(dá)式);2.6C#流程控制語句2.dowhile語句502.6C#流程控制語句【例2-6】創(chuàng)建控制臺程序,輸入兩個(gè)正整數(shù),求它們的最大公約數(shù)。分析:求最大公約數(shù)可以用“輾轉(zhuǎn)相除法”,方法如下:(1)比較兩數(shù),并使m大于n。(2)將m作被除數(shù),n作除數(shù),相除后余數(shù)為r。(3)將m←n,n←r;(4)若r=0,則m為最大公約數(shù),結(jié)束循環(huán)。若r≠0,執(zhí)行步驟步驟(2)和(3)。2.6C#流程控制語句【例2-6】創(chuàng)建控制臺程序,輸入兩512.6C#流程控制語句3.for語句與while、dowhile語句不同的是,for語句是按照預(yù)定的循環(huán)次數(shù)執(zhí)行循環(huán)體。其聲明語法如下:for(初始值;循環(huán)條件;更新值){

循環(huán)體}注意:可以使用逗號來分隔多于一個(gè)的初始迭代變量。

2.6C#流程控制語句3.for語句522.6C#流程控制語句3.foreach語句在C#中,新引進(jìn)了一種循環(huán)語句結(jié)構(gòu)foreach語句。用于對數(shù)組或集合中的每一個(gè)元素執(zhí)行循環(huán)體語句。foreach的語法格式:foreach(<變量類型><循環(huán)變量>in<數(shù)組或集合>){循環(huán)體;}功能:對數(shù)組或集合中的每一個(gè)元素執(zhí)行一遍循環(huán)體語句。具體使用見第3.1節(jié)。2.6C#流程控制語句3.foreach語句532.6C#流程控制語句2.6.3跳轉(zhuǎn)語句C#中的跳轉(zhuǎn)語句和C++中一樣有:goto,break,continue。1.break語句break語句的一般形式為:break;該語句只能用于兩種情況:(1)用在switch結(jié)構(gòu)中,當(dāng)某個(gè)case子句執(zhí)行完后,使用break語句跳出switch結(jié)構(gòu)。(2)用在循環(huán)結(jié)構(gòu)中,用break語句來結(jié)束循環(huán)。如果是多重循環(huán),break不是使程序跳出所有循環(huán),而只是使程序跳出break本身所在的循環(huán)。2.6C#流程控制語句2.6.3跳轉(zhuǎn)語句542.6C#流程控制語句3.goto語句goto語句和標(biāo)號語句一起使用,所謂標(biāo)號語句是用標(biāo)識符標(biāo)識的語句。goto語句它控制程序從goto語句所在的地方轉(zhuǎn)移到標(biāo)號語句處。goto語句會導(dǎo)致程序結(jié)構(gòu)混亂,可讀性降低,而且它所完成的功能完全可以用算法的三種基本結(jié)構(gòu)實(shí)現(xiàn),因此一般不提倡使用goto語句。2.6C#流程控制語句3.goto語句552.6C#流程控制語句2.6.4異常處理語句在編寫程序時(shí)不僅要關(guān)心程序的正常操作,也應(yīng)該把握在現(xiàn)實(shí)世界中可能發(fā)生的各類不可預(yù)期的事件:比如用戶錯(cuò)誤的輸入,內(nèi)存不夠,磁盤出錯(cuò),網(wǎng)絡(luò)資源不可用,數(shù)據(jù)庫無法使用等。在程序中經(jīng)常采用異常處理方法來解決這類現(xiàn)實(shí)問題。1.C#的異常處理語句——try-catch-finally2.6C#流程控制語句2.6.4異常處理語句562.6C#流程控制語句2.C#異常處理語句的格式try{可能引發(fā)異常程序代碼塊;}catch(異常類型1異常類對象1){

異常處理代碼塊;}catch(異常類型n異常類對象n){處理異常類型n的異??刂拼a}finally{無論是否發(fā)生異常,均要執(zhí)行的代碼塊;}2.6C#流程控制語句2.C#異常處理語句的格式57演講完畢,謝謝觀看!演講完畢,謝謝觀看!58第2章數(shù)據(jù)類型與流程控制

第2章數(shù)據(jù)類型與流程控制

592.1數(shù)據(jù)類型

2.1.1C#數(shù)據(jù)類型的分類為了方便識別和處理,編程語言系統(tǒng)中的不同信息在計(jì)算機(jī)中具有不同的表示,占用不同的儲存空間,這些信息在語言系統(tǒng)中稱之為數(shù)據(jù)類型。C#中的數(shù)據(jù)類型和C++是類似的。但在C#中數(shù)據(jù)類型分為兩種:值類型和引用類型,如圖2-1所示。值類型包括一些數(shù)值類型(例如int和float)、char、枚舉類型和結(jié)構(gòu)類型。引用類型包括類、接口、委托(delegate)和數(shù)組類型。在C#中,內(nèi)置數(shù)據(jù)類型除了字符串(string)類型與對象(object)類型外,其余均為值類型。2.1數(shù)據(jù)類型2.1.1C#數(shù)據(jù)類型的分類602.1數(shù)據(jù)類型C#中的數(shù)據(jù)類型的劃分如圖2-1所示。2.1數(shù)據(jù)類型C#中的數(shù)據(jù)類型的劃分如圖2-1所示。612.1數(shù)據(jù)類型值類型和引用類型的區(qū)別在于:值類型變量直接存儲在堆棧中,且占用空間大小相對固定,變量直接包含他們的數(shù)據(jù),可以直接訪問其值,訪問速度快;而引用類型數(shù)據(jù)需要通過存儲在棧中的引用來間接訪問其值,實(shí)際內(nèi)容存儲在內(nèi)存的堆中,占用空間大小不固定,訪問速度慢。表2-1所示為值類型和引用類型的區(qū)別。

特性值類型引用類型變量中保存的內(nèi)容實(shí)際數(shù)據(jù)指向?qū)嶋H數(shù)據(jù)的引用指針內(nèi)存空間配置堆棧受管制的堆內(nèi)存需求較少較多執(zhí)行效率較快較慢內(nèi)存釋放時(shí)間點(diǎn)執(zhí)行超過定義變量的作用域時(shí)由垃圾回收機(jī)制負(fù)責(zé)回收2.1數(shù)據(jù)類型值類型和引用類型的區(qū)別在于:值類型變量直接622.1數(shù)據(jù)類型1.整數(shù)類型整數(shù)類型(也叫整型)表示無小數(shù)部分的數(shù)字。根據(jù)變量在內(nèi)存中所占的位數(shù)不同,C#將整型分為8種:字節(jié)型(sbyte)、無符號字節(jié)型(byte)、短整型(short)、無符號短整型(ushort)、整型(int)、無符號整型(uint)、長整型(long)、無符號長整型(ulong)。整型的說明及示例如表2-2所示。2.1數(shù)據(jù)類型1.整數(shù)類型632.1數(shù)據(jù)類型表2-2整數(shù)類型的關(guān)鍵字及說明關(guān)鍵字.NET類型說明示例sbyteSystem.Sbyte8位有符號整型,取值-128~127sbyteval=12;byteSystem.Byte8位無符號整型,取值0~255shortval=12;intSystem.Int3232位有符號整型,取值-231~231-1intval=12;uintSystem.UInt3232位無符號整型,取值0~232-1uintval1=12;uintval2=32U;shortSystem.Int1616位有符號整型,取值-215~215-1shortval1=12;ushortSystem.UInt1616位無符號整型,取值0~216-1ushortval1=12;longSystem.Int6464位有符號整型,取值-263~263-1longval1=12;longval2=12L;ulongSystem.UInt6464位無符號整型,取值0~264-1ulongval1=23;ulongval2=23U;ulongval3=56L;2.1數(shù)據(jù)類型表2-2整數(shù)類型的關(guān)鍵字及說明關(guān)鍵字.642.1數(shù)據(jù)類型2.實(shí)數(shù)類型C#中的實(shí)數(shù)類型有3種:float、double、decimal。其中double的取值范圍最廣,decimal取值范圍其次,但它的精度高。具體見表2-3。表2-3實(shí)數(shù)類型的關(guān)鍵字及說明關(guān)鍵字.NET類型說明示例floatSystem.Float32位單精度浮點(diǎn)型,±1.5×10-45~3.4×1038,精度為7位floatval=12.3F;doubleSystem.Double64位雙精度浮點(diǎn)型,±5.0×10-324~1.7×10308,精度為15~16位doubleval=23.12D;decimalSystem.Decimal128位小數(shù)類型,1.0×10-28到~7.9×1028精度為28~29位decimalval=1.23M;2.1數(shù)據(jù)類型2.實(shí)數(shù)類型關(guān)鍵字.NET類型說明652.1數(shù)據(jù)類型3.字符類型和字符串類型字符類型也叫字符型,用char表示,為單個(gè)Unicode字符,一個(gè)Unicode字符的標(biāo)準(zhǔn)長度為兩個(gè)字節(jié),它在機(jī)器中占16位,其范圍為0~65535。字符一般是用單引號括起來的一個(gè)字符,如:'a','A',也可以寫成轉(zhuǎn)義字符、十六進(jìn)制轉(zhuǎn)換碼或Unicode表示形式。此外,整數(shù)也可以顯式地轉(zhuǎn)換為字符。2.1數(shù)據(jù)類型3.字符類型和字符串類型662.1數(shù)據(jù)類型常用的轉(zhuǎn)義字符如表2-4所示。轉(zhuǎn)義符字符名字符的Unicode值轉(zhuǎn)義符字符名字符的Unicode值\'單引號0x0027\f換頁0x000c\"雙引號0x0022\n新行0x000A\\反斜杠0x005c\r回車0x000D\0空字符0x0000\t水平制表符0x0009\a警告(產(chǎn)生蜂鳴)0x0007\v垂直制表符0x000B\b退格0x00082.1數(shù)據(jù)類型常用的轉(zhuǎn)義字符如表2-4所示。轉(zhuǎn)義符字672.1數(shù)據(jù)類型4.布爾類型布爾型主要用于邏輯判斷,這種類型的數(shù)據(jù)只有true和false兩個(gè)值。在C++中,false相當(dāng)于0,true相當(dāng)于1。但在C#中,廢棄了這種不正規(guī)的表達(dá)方式,true值不能被任何非零值取代,將整數(shù)類型轉(zhuǎn)換為布爾類型是不合法的。例如:boolx=1;//錯(cuò)誤,不存在這種寫法booly=1;//錯(cuò)誤,不存在這種寫法boolx=true;//正確,可以被執(zhí)行2.1數(shù)據(jù)類型4.布爾類型682.1數(shù)據(jù)類型5.枚舉類型枚舉類型是值類型的一種特殊形式,它從System.Enum繼承而來,并為基礎(chǔ)類型的值(如Byte、Int32或UInt64)提供替代名稱。枚舉類型也是一種自定義數(shù)據(jù)類型,它允許用符號代表數(shù)據(jù)。枚舉是指程序中某個(gè)變量具有一組確定的值,通過“枚舉”可以將其值一一列出來。enum關(guān)鍵字用于聲明枚舉類型,基本格式如下:enum枚舉類型名{由逗號分隔的枚舉數(shù)標(biāo)識符};2.1數(shù)據(jù)類型5.枚舉類型692.1數(shù)據(jù)類型【例2-1】枚舉類型示例。usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;namespaceex01{classProgram{enumweek{monday,tuesday,wednesday,thursday,friday,saturday,sunday};staticvoidMain(string[]args){weekday=week.thursday;inta=(int)day;intb=(int)week.sunday;Console.WriteLine("a={0},b={1}",a,b);Console.ReadLine();}}}2.1數(shù)據(jù)類型【例2-1】枚舉類型示例。702.1數(shù)據(jù)類型6.結(jié)構(gòu)類型結(jié)構(gòu)類型是用戶自己定義的一種類型,它是由其他類型組合而成的,可包含構(gòu)造函數(shù)、常數(shù)、字段、方法、屬性、索引器等。結(jié)構(gòu)與類不同在于結(jié)構(gòu)為值類型而不是引用類型,并且結(jié)構(gòu)不支持繼承。結(jié)構(gòu)類型將在第4章講解。2.1數(shù)據(jù)類型6.結(jié)構(gòu)類型712.2不同數(shù)據(jù)類型之間的轉(zhuǎn)換2.2.1顯式轉(zhuǎn)換與隱式轉(zhuǎn)換1.隱式轉(zhuǎn)換C#是一個(gè)強(qiáng)類型的語言,它的數(shù)值類型有一些可以進(jìn)行隱式轉(zhuǎn)換,其他的必須顯式轉(zhuǎn)換,隱式轉(zhuǎn)換的類型只能是長度短的類型轉(zhuǎn)換成長的類型(見表2-5所示),例如int可以轉(zhuǎn)換成long,float,double,decimal;反之必須顯式的轉(zhuǎn)換。例如:inta=7;floatb=a;//隱式轉(zhuǎn)換a=(int)c;//顯示轉(zhuǎn)換2.2不同數(shù)據(jù)類型之間的轉(zhuǎn)換2.2.1顯式轉(zhuǎn)換與隱式722.2不同數(shù)據(jù)類型之間的轉(zhuǎn)換表2-5C#中支持的隱式轉(zhuǎn)換源類型目標(biāo)類型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.2不同數(shù)據(jù)類型之間的轉(zhuǎn)換表2-5C#中支持的隱式732.2不同數(shù)據(jù)類型之間的轉(zhuǎn)換2.顯式轉(zhuǎn)換顯式轉(zhuǎn)換又叫強(qiáng)制類型轉(zhuǎn)換,與隱式轉(zhuǎn)換相反,顯式轉(zhuǎn)換需要用戶明確地指定轉(zhuǎn)換類型,一般在不存在該類型的隱式轉(zhuǎn)換時(shí)才使用。格式如下:(類型標(biāo)識符)表達(dá)式其作用是將“表達(dá)式”值的類型轉(zhuǎn)換為“類型標(biāo)識符”的類型。例如:(int)1.23//把double類型的1.23轉(zhuǎn)換成int類型,結(jié)果為12.2不同數(shù)據(jù)類型之間的轉(zhuǎn)換2.顯式轉(zhuǎn)換742.2不同數(shù)據(jù)類型之間的轉(zhuǎn)換使用上面的顯示轉(zhuǎn)換不能用在bool和string類型上,如果希望string或者bool類型和整數(shù)類型之間的轉(zhuǎn)化可以使用一個(gè)方法Convert。格式如下:Convert.方法名(參數(shù))方法名是To數(shù)據(jù)類型形式,具體含義見表2-6。2.2不同數(shù)據(jù)類型之間的轉(zhuǎn)換使用上面的顯示轉(zhuǎn)換不能用在b752.2不同數(shù)據(jù)類型之間的轉(zhuǎn)換表2-6Convert.方法含義方法名含義ToBoolean將數(shù)據(jù)轉(zhuǎn)換成Boolean類型ToDataTime將數(shù)據(jù)轉(zhuǎn)換成日期時(shí)間類型ToInt16將數(shù)據(jù)轉(zhuǎn)換成16位整數(shù)類型ToInt32將數(shù)據(jù)轉(zhuǎn)換成32位整數(shù)類型ToInt64將數(shù)據(jù)轉(zhuǎn)換成64位整數(shù)類型ToNumber將數(shù)據(jù)轉(zhuǎn)換成Double類型ToObject將數(shù)據(jù)轉(zhuǎn)換成Object類型ToString將數(shù)據(jù)轉(zhuǎn)換成string類型ToBoolean將數(shù)據(jù)轉(zhuǎn)換成Boolean類型2.2不同數(shù)據(jù)類型之間的轉(zhuǎn)換表2-6Convert.762.2不同數(shù)據(jù)類型之間的轉(zhuǎn)換2.2.2裝箱和拆箱對于值類型和Object類型之間的轉(zhuǎn)換,可以用裝箱技術(shù)和拆箱技術(shù)來實(shí)現(xiàn)。C#中的任何類型的值都可以按照對象來處理,使用object類型的通用庫(如.NETFramework中的集合類)既可以用于引用類型,又可以用于值類型。(1)Object類Object類是所有類的基類,它是System命名空間下的一個(gè)類,C#中所有的類型都是直接或間接地從Object類繼承而來。因?yàn)樗撬袑ο蟮幕?,所以可把任何類型的值賦給它,例如,一個(gè)整型:objecttheObj=123;2.2不同數(shù)據(jù)類型之間的轉(zhuǎn)換2.2.2裝箱和拆箱772.2不同數(shù)據(jù)類型之間的轉(zhuǎn)換1.裝箱轉(zhuǎn)換裝箱轉(zhuǎn)換是指將一個(gè)值類型的數(shù)據(jù)隱式地轉(zhuǎn)換成一個(gè)對象類型的數(shù)據(jù)。把一個(gè)值類型裝箱,就是創(chuàng)建一個(gè)object類型的實(shí)例,并把該值類型的值復(fù)制給這個(gè)object實(shí)例。例如,下面語句就執(zhí)行了裝箱轉(zhuǎn)換:inti=123;objectobj=i;//裝箱轉(zhuǎn)換2.2不同數(shù)據(jù)類型之間的轉(zhuǎn)換1.裝箱轉(zhuǎn)換782.2不同數(shù)據(jù)類型之間的轉(zhuǎn)換上面的兩條語句中,第1條語句先聲明一個(gè)整型變量i并對其賦值,第2條語句則先創(chuàng)建一個(gè)object類型的實(shí)例obj,然后將i的值復(fù)制給obj。裝箱操作過程如圖2-2所示。在執(zhí)行裝箱轉(zhuǎn)換時(shí),也可以使用顯式轉(zhuǎn)換,如:objectobj=(object)i;2.2不同數(shù)據(jù)類型之間的轉(zhuǎn)換上面的兩條語句中,第1條語句792.2不同數(shù)據(jù)類型之間的轉(zhuǎn)換2.拆箱轉(zhuǎn)換拆箱轉(zhuǎn)換是指將一個(gè)對象類型的數(shù)據(jù)顯式地轉(zhuǎn)換成一個(gè)值類型數(shù)據(jù)。例如,下面語句就執(zhí)行了拆箱轉(zhuǎn)換:inti=123;objectobj=i;intj=(int)obj;//拆箱轉(zhuǎn)換拆箱操作的過程如圖2-3所示。拆箱轉(zhuǎn)換需要(而且必須)執(zhí)行顯式轉(zhuǎn)換,這是它與裝箱轉(zhuǎn)換的不同之處。2.2不同數(shù)據(jù)類型之間的轉(zhuǎn)換2.拆箱轉(zhuǎn)換802.3常量和變量2.3.1常量常量就是值在程序整個(gè)生命周期內(nèi)值始終不變的量。在聲明常量時(shí),要用到const關(guān)鍵字,和C++類似。常量在使用的過程中,不可以對其進(jìn)行賦值的改變,否則系統(tǒng)會自動報(bào)錯(cuò)。常量聲明的基本語法為:const[int/double/long/bool/string/……]常量名;下面是一個(gè)具體聲明常量的例子:constdoublePI=3.1415926;2.3常量和變量2.3.1常量812.3常量和變量2.3.2變量變量代表了存儲單元,每個(gè)變量都有一個(gè)數(shù)據(jù)類型。這決定了這個(gè)變量可以存儲什么值。在任何一種語言中,變量的命名都是有一定的規(guī)則的,當(dāng)然C#.NET也不例外,若在使用中定義了不符合一定規(guī)則的變量,C#.NET語言系統(tǒng)會自動報(bào)錯(cuò)。變量命名規(guī)則如下:(1)變量名的第一個(gè)字符必須是字母、下劃線("_")或者"@"。(2)除去第一個(gè)字母外,其余的字母可以是字母、數(shù)字、下劃線的組合。(3)不可以使用對C#編譯器而言有特定含義的名字(即C#語言的庫函數(shù)名稱和關(guān)鍵字名稱)作為變量名,如using、namespace、struct等等。2.3常量和變量2.3.2變量822.3常量和變量2.3.3變量的作用范圍(作用域)變量不但有類型,還有作用范圍。變量的作用范圍就是應(yīng)用程序中可以使用和操作變量的部分。變量的作用域和C++類似,分為局部作用域和類作用域。(1)局部作用域方法(即函數(shù))中聲明的任何變量都具有那個(gè)方法的作用域;一旦方法結(jié)束,它們也會消失,而且只能由那個(gè)方法內(nèi)部執(zhí)行的代碼來訪問。2.3常量和變量2.3.3變量的作用范圍(作用域)832.3常量和變量這些變量稱為局部變量(localvariable),因?yàn)樗鼈兙窒抻诼暶魉鼈兊哪莻€(gè)方法,不能在其他任何方法中使用。換言之不能使用局部變量在不同的方法之間共享信息。例如:classExample{voidfirstMethod(){intmyVar;...}voidanotherMethod(){myVar=42;//錯(cuò)誤–變量越界...}}2.3常量和變量這些變量稱為局部變量(localvar842.3常量和變量(2)類作用域在類中(但不在一個(gè)方法中)聲明的任何變量都具有那個(gè)類的作用域。例如:classExample{intmyField=0;voidfirstMethod(){myField=42;//正確

...}voidanotherMethod(){myField=42;//正確...}}2.3常量和變量(2)類作用域852.4運(yùn)算符與表達(dá)式2.4.1運(yùn)算符運(yùn)算符指明了進(jìn)行運(yùn)算的類型,例如,加號(+)用于加法、減號(-)用于減法、星號(*)用于乘法、正斜杠(/)則用于除法等。1.算術(shù)運(yùn)算符算術(shù)運(yùn)算符包括:*(乘法運(yùn)算符)、/(除法運(yùn)算符)、%(求余運(yùn)算符,如7%3=1)、+(加法運(yùn)算符)、—(減法運(yùn)算符)、++(增量運(yùn)算符)和--(減量運(yùn)算符)。2.4運(yùn)算符與表達(dá)式2.4.1運(yùn)算符862.4運(yùn)算符與表達(dá)式增量和減量運(yùn)算符都是單目運(yùn)算符,運(yùn)算結(jié)果是將操作數(shù)增1或減1。這兩個(gè)運(yùn)算符都有前置和后置兩種形式。前置形式是指運(yùn)算符在操作數(shù)的前面,后置是指運(yùn)算符在操作數(shù)的后面。例如:a++;//等價(jià)于a=a+1;++a;//等價(jià)于a=a+1;a--;//等價(jià)于a=a-1;--a//等價(jià)于a=a-1;2.4運(yùn)算符與表達(dá)式增量和減量運(yùn)算符都是單目運(yùn)算符,運(yùn)算872.4運(yùn)算符與表達(dá)式注意:(1)C#語言算術(shù)表達(dá)式的乘號(*)不能省略。例如:數(shù)學(xué)式b2-4ac相應(yīng)的C++表達(dá)式應(yīng)該寫成:b*b-4*a*c。(2)C#語言表達(dá)式中只能出現(xiàn)字符集允許的字符。例如:數(shù)學(xué)πr2相應(yīng)的C++表達(dá)式應(yīng)該寫成:PI*r*r。(其中PI是已經(jīng)定義的符號常量)。(3)C#語言算術(shù)表達(dá)式只使用圓括號改變運(yùn)算的優(yōu)先順序(不要指望用{}或[])??梢允褂枚鄬訄A括號,此時(shí)左右括號必須配對,運(yùn)算時(shí)從內(nèi)層括號開始,由內(nèi)向外依次計(jì)算表達(dá)式的值。2.4運(yùn)算符與表達(dá)式注意:882.4運(yùn)算符與表達(dá)式2.賦值運(yùn)算符賦值運(yùn)算符包括基本賦值運(yùn)算符(=)和復(fù)合賦值運(yùn)算符,復(fù)合賦值運(yùn)算符包括:^=、*=、/=、\=、+=、-=、<<=、>>=和&=。例如:inta=12,x=3,y;a+=a;//表示a=(a+a)=(12+12)=24;y*=x+2;//表示y=y*(x+2);而不是y=y*x+2;注意:賦值運(yùn)算符、復(fù)合賦值運(yùn)算符的優(yōu)先級比算術(shù)運(yùn)算符低。

2.4運(yùn)算符與表達(dá)式2.賦值運(yùn)算符892.4運(yùn)算符與表達(dá)式3.比較運(yùn)算符(1)比較數(shù)值。有六種比較運(yùn)算符可以用于比較數(shù)值,包括:==(相等)、!=(不等于)、<(小于)、<=(小于或等于)、>(大于)、>=(大于或等于)。(2)is運(yùn)算符is運(yùn)算符可以檢查對象是否與特定的類型兼容。例如,要檢查變量是否與object類型兼容。2.4運(yùn)算符與表達(dá)式3.比較運(yùn)算符902.4運(yùn)算符與表達(dá)式(3)as運(yùn)算符as運(yùn)算符用于執(zhí)行引用類型的顯式類型轉(zhuǎn)換。如果要轉(zhuǎn)換的類型與指定的類型兼容,轉(zhuǎn)換就會成功進(jìn)行;如果類型不兼容,as運(yùn)算符就會返回值null。如下面的代碼所示,如果object引用不指向string實(shí)例,把object引用轉(zhuǎn)換為string就會返回null:objecto1="SomeString";objecto2=5;strings1=o1asstring;//s1="SomeString"strings2=o2asstring;//s1=nullas運(yùn)算符允許在一步中進(jìn)行安全的類型轉(zhuǎn)換,不需要先使用is運(yùn)算符測試類型,再執(zhí)行轉(zhuǎn)換。2.4運(yùn)算符與表達(dá)式(3)as運(yùn)算符912.4運(yùn)算符與表達(dá)式4.字符串連接運(yùn)算符對于兩個(gè)字符串類型的變量,可以使用“+”運(yùn)算符實(shí)現(xiàn)字符串的連接。例如:stringstrTemp1,strTemp2;strTemp1="Hello";strTemp2="World.";MessageBox.Show(strTemp1+""+strTemp2);當(dāng)定義了兩個(gè)字符串型變量strTemp1和strTemp2并給它們分別賦值之后,就可以使用第4行的“+”運(yùn)算符把它們連接起來,并在中間夾了一個(gè)空格,形成"HelloWorld."字符串。2.4運(yùn)算符與表達(dá)式4.字符串連接運(yùn)算符922.4運(yùn)算符與表達(dá)式5.邏輯運(yùn)算符C#中常用的邏輯運(yùn)算符有:!(非)、&&(與)、||(或)。計(jì)算的結(jié)果仍然是布爾類型的true或false。與:C#中的符號為“&&”,表示必須滿足兩個(gè)條件。語法為“表達(dá)式1&&表達(dá)式2”?;颍篊#中的符號為“||”,表示滿足兩個(gè)條件中的任意一個(gè)即可。語法為“表達(dá)式1||表達(dá)式2”。2.4運(yùn)算符與表達(dá)式5.邏輯運(yùn)算符932.4運(yùn)算符與表達(dá)式6.typeof運(yùn)算符typeof運(yùn)算符用于獲得系統(tǒng)原型對象的類型,也就是Type對象。常與is運(yùn)算符連用,用于判斷某個(gè)變量是否為某一類型。每一個(gè)類都有一個(gè)GetType方法與它功能很相似。【例2-2】創(chuàng)建控制臺程序,演示typeof運(yùn)算符。2.4運(yùn)算符與表達(dá)式6.typeof運(yùn)算符942.4運(yùn)算符與表達(dá)式7.new運(yùn)算符new運(yùn)算符用于創(chuàng)建一個(gè)新的類型實(shí)例,它有3種形式:(1)對象創(chuàng)建表達(dá)式,用于創(chuàng)建一個(gè)類類型或值類型的實(shí)例。(2)數(shù)組創(chuàng)建表達(dá)式,用于創(chuàng)建一個(gè)數(shù)組類型實(shí)例。(3)委托創(chuàng)建表達(dá)式,用于創(chuàng)建一個(gè)新的委托類型實(shí)例。2.4運(yùn)算符與表達(dá)式7.new運(yùn)算符952.4運(yùn)算符與表達(dá)式2.4.2運(yùn)算符優(yōu)先級在一個(gè)表達(dá)式中出現(xiàn)多種運(yùn)算時(shí),將按照預(yù)先確定的順序計(jì)算并解析各個(gè)部分,這個(gè)順序稱為運(yùn)算符優(yōu)先級。C#中常用的運(yùn)算符的優(yōu)先級見表2-7所示。2.4運(yùn)算符與表達(dá)式2.4.2運(yùn)算符優(yōu)先級962.4運(yùn)算符與表達(dá)式2.4.3表達(dá)式表達(dá)式是一個(gè)或多個(gè)運(yùn)算的組合。C#的表達(dá)式與其他語言的表達(dá)式?jīng)]有顯著的區(qū)別。每個(gè)符合C#規(guī)則的表達(dá)式的計(jì)算都是一個(gè)確定的值。對于常量、變量的運(yùn)算和對于函數(shù)的調(diào)用都可以構(gòu)成最簡單的表達(dá)式。通常表達(dá)式涉及的內(nèi)容包括賦值計(jì)算以及真/假判斷等。一個(gè)賦值表達(dá)式至少應(yīng)有一個(gè)變量,以及一個(gè)賦給變量的值。這里要求所有的變量在使用前都必須初始化,否則C#編譯器將對未初始化的變量給出警告。2.4運(yùn)算符與表達(dá)式2.4.3表達(dá)式972.5控制臺應(yīng)用程序與格式化輸出2.5.1控制臺輸出Console.WriteLine()方法將指定的數(shù)據(jù)(后跟換行符)寫入標(biāo)準(zhǔn)輸出流(屏幕)。Console.WriteLine()方法類似于C語言的printf函數(shù),可以采用“{N[,M][:格式化字符串]}”的形式來格式化輸出項(xiàng),其中的參數(shù)含義如下?;ɡㄌ杮}:用來在輸出中插入變量的值。N:表示輸出變量的序號,變量的序號從0開始。2.5控制臺應(yīng)用程序與格式化輸出2.5.1控制臺輸982.5控制臺應(yīng)用程序與格式化輸出表2-8格式化字符串中字母含義字母含義C或cCurrency貨幣格式D或dDecimal十進(jìn)制格式(十進(jìn)制整數(shù))E或eExponent指數(shù)格式F或fFixedpoint固定精度格式G或gGeneral常用格式N或n用逗號分割千位的數(shù)字,比如1234將會被變成1,234P或pPercentage百分符號格式X或xHex16進(jìn)制格式R或rRound-trip圓整(只用于浮點(diǎn)數(shù))保證一個(gè)數(shù)字被轉(zhuǎn)化成字符串以后可以再被轉(zhuǎn)回成同樣的數(shù)字2.5控制臺應(yīng)用程序與格式化輸出表2-8格式化字符串992.5控制臺應(yīng)用程序與格式化輸出2.5.2控制臺輸入Console.ReadLine()方法從標(biāo)準(zhǔn)輸入流(鍵盤)讀取下一行字符。例如:Stringname=Console.ReadLine();由于ReadLine方法只能輸入字符串,為了輸入數(shù)值,需要進(jìn)行數(shù)據(jù)類型的轉(zhuǎn)換。C#中每種數(shù)據(jù)類型都是一個(gè)結(jié)構(gòu),它們都提供了Parse方法,以用于將數(shù)字的字符串表示形式轉(zhuǎn)換為等效數(shù)值。

2.5控制臺應(yīng)用程序與格式化輸出2.5.2控制臺輸入1002.5控制臺應(yīng)用程序與格式化輸出2.5.3字符串的格式化輸出字符串格式String.Format作用是形成格式化的字符串,它和WriteLine都遵守同樣的格式化規(guī)則,采用“{N[,M][:格式化字符串]}”的形式來格式化輸出字符串。格式化字符串中字母含義見表2.5。例如:Strings=String.Format("123");Stringt=String.Format("{0}",123);Stringu=String.Format("{0:D3}",123);Console.WriteLine(s);Console.WriteLine(t);Console.WriteLine(u);2.5控制臺應(yīng)用程序與格式化輸出2.5.3字符串的格1012.6C#流程控制語句2.6.1選擇語句選擇語句(條件語句)主要包括兩種類型,分別為if語句和switch語句。1.if語句if語句是最常用的選擇語句,它的功能是根據(jù)所給定的條件(常由關(guān)系、布爾表達(dá)式表示)是否滿足,決定是否執(zhí)行后面的操作。常用的if語句表達(dá)形式有3種:(1)if語句if(表達(dá)式){語句塊};功能:如果表達(dá)式的值為真(即條件成立),則執(zhí)行if語句所控制的語句塊;(2)if…else語句if(表達(dá)式){語句組1}else{語句組2}2.6C#流程控制語句2.6.1選擇語句1022.6C#流程控制語句(3)嵌套if語句if語句中,如果內(nèi)嵌語句又是if語句,就構(gòu)成了嵌套if語句。if語句可實(shí)現(xiàn)二選一分支,而嵌套if語句則可以實(shí)現(xiàn)多選一的多路分支情況。if(表達(dá)式1){語句組1}elseif(表達(dá)式2){語句組2}elseif(表達(dá)式3){語句組3}……elseif(表達(dá)式n-1){語句組n-1}else{語句組n}2.6C#流程控制語句(

溫馨提示

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

最新文檔

評論

0/150

提交評論