版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第2章C#語(yǔ)法基礎(chǔ)在上一章里讀者接觸到了第一個(gè)C#應(yīng)用程序,雖只是簡(jiǎn)單地在控制臺(tái)輸出了一句問(wèn)候語(yǔ),但它卻充分體現(xiàn)了VisualStudio2008的易用性及C#語(yǔ)言的特點(diǎn)。理解了C#的用途之后,就可以學(xué)習(xí)如何使用它。本章將介紹C#的基本語(yǔ)法知識(shí),通過(guò)本章學(xué)習(xí),讀者將了解以下內(nèi)容:理解C#中的數(shù)據(jù)類型。理解常量和變量的含義及用法。理解數(shù)據(jù)類型轉(zhuǎn)換的含義。會(huì)運(yùn)用常用的運(yùn)算符和表達(dá)式。2.1C#數(shù)據(jù)類型應(yīng)用任何一種程序語(yǔ)言,需要充分了解它提供的數(shù)據(jù)類型,這樣才能明白它的功能與限制,以便選擇合適的數(shù)據(jù)類型來(lái)處理不同的數(shù)據(jù)。例如在平時(shí)生活中,我們會(huì)用整數(shù)來(lái)表達(dá)東西的數(shù)量,而在工程、金融領(lǐng)域我們要用到很高精度小數(shù)。但對(duì)計(jì)算機(jī)來(lái)說(shuō),數(shù)據(jù)的含義更要寬泛些,比如說(shuō)一句話、一個(gè)字符等,對(duì)計(jì)算機(jī)來(lái)說(shuō)都是數(shù)據(jù)。計(jì)算機(jī)會(huì)用不同的方式來(lái)處理它遇到的不同類型的數(shù)據(jù)。2.1.1通用類型系統(tǒng)簡(jiǎn)介通用類型系統(tǒng)(CommonTypeSystem,CTS)是一個(gè)所有.NET語(yǔ)言都支持的數(shù)據(jù)類型的集合,它定義了如何在運(yùn)行庫(kù)中聲明、使用和管理類型,確保這些語(yǔ)言可以相互傳送數(shù)據(jù),體現(xiàn)在.NET語(yǔ)言的互操作性。例如在C#中聲明int類型的數(shù)據(jù)和在VB.NET中聲明的Integer類型數(shù)據(jù),實(shí)際上是通用類型系統(tǒng)中的System.Int32的一個(gè)實(shí)例。將數(shù)據(jù)類型內(nèi)置于.NETFramework中的好處是,可以把所有的基本數(shù)據(jù)類型看作是支持某些方法的類,例如,要把inti轉(zhuǎn)換成string,可以寫如下代碼:stringstr=i.toString();在C#語(yǔ)言里,有多種數(shù)據(jù)類型(Type)。根據(jù)數(shù)據(jù)產(chǎn)生時(shí)在內(nèi)存中存放的方式,.Net將整個(gè)系統(tǒng)的數(shù)據(jù)類型分成兩大類——值類型和引用類型。值類型直接包含數(shù)據(jù)。每個(gè)值類型變量都包含有它自己的數(shù)據(jù)備份,因此對(duì)一個(gè)值類型變量的操作不會(huì)影響其他變量。引用類型包含指向?qū)ο髮?shí)例的引用或指針。兩個(gè)引用類型的變量可以指向同一個(gè)對(duì)象實(shí)例,因此對(duì)一個(gè)引用變量的操作會(huì)影響其他引用變量。可以通過(guò)下面一個(gè)例子來(lái)加深讀者對(duì)值類型的引用類型的理解。2.1.2值類型【本節(jié)示例參考:\源代碼\chapter2\2.1.1\ValueTypeExample】大多數(shù)編程語(yǔ)言都提供內(nèi)置的數(shù)據(jù)類型(比如整數(shù)和浮點(diǎn)數(shù)),這些數(shù)據(jù)類型會(huì)在作為參數(shù)傳遞時(shí)被復(fù)制(也就是說(shuō),它們通過(guò)值來(lái)傳遞)。在.NET框架中,這些數(shù)據(jù)類型稱為值類型。值類型通常是像整數(shù)這樣的簡(jiǎn)單類型。C#中的值類型包含整數(shù)型、浮點(diǎn)型、布爾型、字符型等。表2.2列出了預(yù)定義的簡(jiǎn)單值類型。2.1.3引用類型【本節(jié)示例參考:\源代碼\chapter2\2.1.2\RefTypeExample】引用類型的變量又稱為對(duì)象,可存儲(chǔ)對(duì)實(shí)際數(shù)據(jù)的引用。類似于在儲(chǔ)物柜里存放的是該物品的地址信息。C#支持兩個(gè)引用類型,如表2.4所示。2.2常量和變量變量名表示一條信息的名稱。其實(shí)在之前的程序代碼中,已經(jīng)接觸到過(guò)變量,比如在上一節(jié)示例中使用到的a、b、c等,都是string類型的變量。變量的值在程序運(yùn)行過(guò)程中可以改變。而常量是一旦定義好后,在程序運(yùn)行過(guò)程中其值不變的量。2.2.1變量的聲明和初始化C#是一種“強(qiáng)類型”編程語(yǔ)言,在聲明變量時(shí)必須指明它的數(shù)據(jù)類型。聲明變量的作用之一是告訴編譯器要為變量分配多少內(nèi)存空間。就像要將一個(gè)物品存進(jìn)儲(chǔ)物間,應(yīng)該事先讓保管員知道,這個(gè)物品有多大,以便分配合適大小的儲(chǔ)物柜。大了會(huì)浪費(fèi)空間,小了東西放不下,會(huì)造成不必要的錯(cuò)誤。聲明變量的格式如下:數(shù)據(jù)類型變量名;比如,下面的代碼聲明了一個(gè)int型的變量i:inti;變量聲明后,可在程序運(yùn)行中,給變量i賦值,或者可以在聲明的時(shí)候給變量賦初值。一個(gè)變量聲明以后可以多次賦值。在初始化時(shí)對(duì)變量賦值采用下面的格式:數(shù)據(jù)類型變量名=初始值;doubletotal=34.3D;2.2.2變量命名規(guī)范及編碼規(guī)則在C#中,對(duì)變量的命名有一些限制,包括以下規(guī)則:變量名必須以字母開頭。變量只能有字母、數(shù)字、下劃線。不能包含空格、標(biāo)點(diǎn)等。且不能由數(shù)字開頭。變量名不得與C#中的關(guān)鍵字同名。變量名不得與C#中的庫(kù)函數(shù)同名。下面給出了一些合法和不合法的變量名:string3str;//不合法,以數(shù)字開頭floattotalcount;//不合法,變量名包含空格intprod2; //合法doubleMain;//不合法,與Main函數(shù)同名doublefloat;//因?yàn)閒loat是關(guān)鍵字,不能用作變量名2.2.3變量的作用域【本節(jié)示例參考:\源代碼\chapter2\2.2.3\ScopeExample】作用域(scope)是指由一個(gè)代碼塊或者語(yǔ)言結(jié)構(gòu)約束起來(lái)的分層上下文。簡(jiǎn)單理解,變量的作用域指可以訪問(wèn)某個(gè)變量的代碼區(qū)域。只有在變量被聲明的代碼塊中,它才能被訪問(wèn)到,一旦程序執(zhí)行超過(guò)某個(gè)代碼塊,則該代碼塊中聲明的所有過(guò)程級(jí)變量都會(huì)越界,不能再被訪問(wèn)到。下面的示例演示了在變量的作用域外訪問(wèn)變量的情形:for(inti=0;i<10;i++){Console.WriteLine(i);//i在這個(gè)循環(huán)里有效}Console.WriteLine("lastvalueofiinloop{0}",i);//在循環(huán)外輸出i的值會(huì)出錯(cuò)2.2.4聲明和使用常量常量就是值固定不變的量。在C#中,可以用const關(guān)鍵字來(lái)聲明一個(gè)常量。在程序設(shè)計(jì)中,往往把一些經(jīng)常用到而值不太可能改變的量定義為常量,而不是直接使用其數(shù)值。例如在計(jì)算和圓相關(guān)的問(wèn)題時(shí),就可以把圓周率定義常量。常量的聲明方式如下:constintPI=3.14;//常量一旦聲明,在程序運(yùn)行中就不能再改變其值注意:和C++不同,在C#中,只能把局部變量和字體段(即類里面定義的變量)聲明為常量。常量有如下特征:常量必須在聲明時(shí)初始化。指定了其值后,就不能再修改了。常量值必須能在編譯時(shí)用于計(jì)算。因皮,不能用從一個(gè)變量中提取的值來(lái)初始化常量。常量總是靜態(tài)的(用static關(guān)鍵字修飾)。但事實(shí)上,在聲明常量的時(shí)候不允許包含修飾符。如下面的一組定義:constinti; //錯(cuò)誤,沒(méi)有初始化constinti=3;//正確constintj=5*i;//正確,編譯器知道i的值intp=3;constintq=p*4;//錯(cuò)誤,不能用變量值來(lái)初始化常量2.3數(shù)據(jù)類型轉(zhuǎn)換所有值類型和引用類型都由一個(gè)名為object的基本類發(fā)展而來(lái)。在C#中還可以通過(guò)隱性轉(zhuǎn)換(不會(huì)造成數(shù)據(jù)丟失)或顯性轉(zhuǎn)換(可能造成數(shù)據(jù)丟失或降低精確度)來(lái)改變數(shù)據(jù)類型。2.3.1裝箱和拆箱【本節(jié)示例參考:\源代碼\chapter2\2.3.1\BoxingExample】任何值類型、引用類型可以和object類型之間進(jìn)行轉(zhuǎn)換。裝箱是值類型到object類型或到此值類型所實(shí)現(xiàn)的任何接口類型的隱式轉(zhuǎn)換,拆箱是從object類型到值類型或從接口類型到實(shí)現(xiàn)該接口的值類型的顯式轉(zhuǎn)換。簡(jiǎn)言之,裝箱就是將值類型轉(zhuǎn)換為引用類型;反之,就是拆箱。如代碼2-4所示,展示了一個(gè)簡(jiǎn)單的裝箱拆箱操作。代碼2-4裝箱和拆笨:BoxingExample.cs1 inti=10;2 objectobj=i;//隱式裝箱3 objectobj2=(object)i;//顯式裝箱4 if(objisint)//判斷obj是否為int型5 {6 Console.WriteLine("OK");7 }8 Console.WriteLine(obj.GetType()); //System.Int322.3.2隱式類型轉(zhuǎn)換只要能保證值不會(huì)發(fā)生變化,類型轉(zhuǎn)換就可以自動(dòng)進(jìn)行。如下面的一段代碼:bytex=12;bytey=25;bytem=x+y;//錯(cuò)誤intn=x+y;//正確該段代碼先聲明兩個(gè)byte類型的數(shù)據(jù),然后將這兩個(gè)byte數(shù)據(jù)相加到另一個(gè)byte類型數(shù)據(jù)中,這步操作會(huì)提示錯(cuò)誤,而將byte型數(shù)據(jù)相加到一個(gè)int型數(shù)據(jù)中,程序運(yùn)行通過(guò)。這是因?yàn)?,把兩個(gè)byte值相加,應(yīng)返回int型結(jié)果,而不是另一個(gè)byte。因?yàn)閎yte包含的數(shù)據(jù)只能有8個(gè)位的存儲(chǔ)空間,即其值的范圍只能在0~255之間,所以把兩個(gè)byte值相加,很容易得到一個(gè)不在這個(gè)范圍里的數(shù)據(jù)。而用int型的數(shù)據(jù)來(lái)存儲(chǔ)兩個(gè)byte型數(shù)據(jù)相加的結(jié)果范圍足夠大,不會(huì)有數(shù)據(jù)丟失的危險(xiǎn)。在這種情況下,編譯器能順利地通過(guò)轉(zhuǎn)換,不用用戶指定對(duì)數(shù)據(jù)的轉(zhuǎn)換。2.3.3顯式類型轉(zhuǎn)換使用顯式類型轉(zhuǎn)換,能夠把一種基本數(shù)據(jù)類型轉(zhuǎn)換成另一種基本數(shù)據(jù)類型。類型轉(zhuǎn)換時(shí)把轉(zhuǎn)換的目標(biāo)類型名放在轉(zhuǎn)換值之前的小括號(hào)里,例如:doublex=12.5d;inti=(int)(x+1);將double型的x加上1轉(zhuǎn)換成int型數(shù)據(jù),賦給int型變量i,最后i的結(jié)果是13。在轉(zhuǎn)換過(guò)程中,小數(shù)點(diǎn)后面的所有數(shù)據(jù)都丟失,損失了精度。讀者需要注意,如果對(duì)這個(gè)double型的數(shù)據(jù)要進(jìn)行多次運(yùn)算,最好先不要進(jìn)行轉(zhuǎn)換,以免誤差累積,造成更大的誤差。在上一節(jié)的例子中,將byte型的x和y相加,其值會(huì)自動(dòng)轉(zhuǎn)換成int型的,如果用戶非要讓運(yùn)算結(jié)果還是byte型,這時(shí)候也會(huì)要用到顯式類型轉(zhuǎn)換,如下面代碼:bytex=12;bytey=18;bytem=(byte)(x+y);//顯式類型轉(zhuǎn)換,將int型的結(jié)果轉(zhuǎn)換成byte型2.4運(yùn)算符和表達(dá)式C#提供大量運(yùn)算符,這些運(yùn)算符指定在表達(dá)式中執(zhí)行哪些操作的符號(hào)。例如常見(jiàn)的+、-、*、/、==、!=、<、>、<=、>=、binary+、binary-、^、&、|、~、++、--和sizeof()等。此外,很多運(yùn)算符可被用戶重載,以便在應(yīng)用到用戶定義的類型時(shí)更改這些運(yùn)算符的含義。表達(dá)式的運(yùn)算符指示對(duì)表達(dá)式的數(shù)據(jù)進(jìn)行什么樣的操作。2.4.1算術(shù)運(yùn)算符C#中的算術(shù)運(yùn)算符主要是對(duì)操作數(shù)進(jìn)行基本的數(shù)學(xué)運(yùn)算,包含+、-、*、/、%。其中%叫模式運(yùn)算符,主要作用是給出除法運(yùn)算的余數(shù),如:7%2=1//表示7除2的余數(shù)是1這里要注意運(yùn)算符+,它除了可以表示進(jìn)行加法運(yùn)算外,還可以實(shí)現(xiàn)字符串連接運(yùn)算的功能。這實(shí)際上是對(duì)運(yùn)算符的一個(gè)重載。例如在前面章節(jié)中的示例代碼中有這樣的代碼段:stringc="h";c+="ello";第二行代碼等價(jià)于:c=c+"ello";這里的運(yùn)算符+實(shí)際上已不能叫做算術(shù)運(yùn)算符了,而應(yīng)該是一個(gè)字符串連接運(yùn)算符,詳細(xì)內(nèi)容請(qǐng)參照第3章。2.4.2比較運(yùn)算符C#中的比較運(yùn)算符有==、!﹦、<>、<﹦、>﹦。C#比較運(yùn)算符常用于判斷某個(gè)條件是否成立。例如在前面的代碼里有這樣的代碼段:stringa="hello";stringb=a;Console.WriteLine(a==b);//判斷a和b是否相等。其返回結(jié)果為true或false在程序設(shè)計(jì)中,經(jīng)常會(huì)根據(jù)某個(gè)變量的值來(lái)決定程序執(zhí)行流程,在判斷值的取值或取值范圍時(shí),就要用到比較運(yùn)算符。詳細(xì)內(nèi)容可以參考第4章程序設(shè)計(jì)流程章節(jié)的知識(shí)。2.4.3條件運(yùn)算符【本節(jié)示例參考:\源代碼\chapter2\2.4.3\PriorityTest】條件運(yùn)算符(也叫三元運(yùn)算符或是三目運(yùn)算符)是C#里唯一的一個(gè)三元運(yùn)算符。它實(shí)際上是if-else結(jié)構(gòu)的簡(jiǎn)寫形式。它可以先判斷一個(gè)條件,如果條件為真,就返回第一個(gè)值,如果條件為假,則返回第二個(gè)值。其語(yǔ)法格式如下:條件?值1:值2;假如有這樣一個(gè)表達(dá)式:a>b?1:02.4.4賦值運(yùn)算符賦值運(yùn)算符的作用,是將某個(gè)初始值或是經(jīng)過(guò)運(yùn)算的值賦給某個(gè)變量。C#里的賦值運(yùn)算符有:=、+=、-=、*=、/=、%=、&=、|=、^=、<<=、>>=。除第一項(xiàng)外的其他賦值運(yùn)算符都是簡(jiǎn)化的操作符,如x+=y,它等價(jià)于x=x+y。這種簡(jiǎn)化的操作符都需要兩個(gè)操作數(shù),用于執(zhí)行算術(shù)、邏輯和接位運(yùn)算,改變第一個(gè)操作數(shù)的值。2.4.5邏輯運(yùn)算符邏輯運(yùn)算符有&、|、!、^、~、&&、||。其中&和|執(zhí)行按位的“與”和“或”,而~和^執(zhí)行按位的“非”和“異或”。&&和||執(zhí)行布爾的“與”和“或”,而!執(zhí)行布爾的“非”。讀者要注意區(qū)分位運(yùn)算和布爾運(yùn)算。位運(yùn)算是將運(yùn)算的數(shù)據(jù)相應(yīng)的二進(jìn)制數(shù)據(jù)進(jìn)行相應(yīng)的計(jì)算。各種二進(jìn)制數(shù)運(yùn)算的結(jié)果如下表2.6所示。2.4.6表達(dá)式表達(dá)式(expression)由操作數(shù)和運(yùn)算符構(gòu)成。表達(dá)式的運(yùn)算符標(biāo)明在操作數(shù)上運(yùn)用了哪種操作。運(yùn)算符可以是+、-、*、/等。操作數(shù)可以包括字面值、字段、局部變量和表達(dá)式。當(dāng)表達(dá)式包括多個(gè)運(yùn)算符時(shí),運(yùn)算符的優(yōu)先級(jí)控制各個(gè)運(yùn)算符執(zhí)行的順序。例如,表達(dá)式x+y*z將以x+(y*z)的形式計(jì)算,原因就是運(yùn)算符“*”的優(yōu)先級(jí)高于運(yùn)算符“+”。表2.8總結(jié)了C#的運(yùn)算符,運(yùn)算符的分類排列是按其優(yōu)先級(jí)從高到低的次序。同一分類的運(yùn)算符具有相同的優(yōu)先級(jí)。2.5小結(jié)學(xué)完本章后,讀者將了解以下內(nèi)容。(1)C#中的數(shù)據(jù)類型包括值類型和引用類型。值類型又包含常用的13種簡(jiǎn)單數(shù)據(jù)類型,而常用的引用類型包含了object類型和string類型。(2)C#要求在使用變量或常量之前必須要先聲明,并且初始化。常量和變量都有特定的數(shù)據(jù)類型。對(duì)于數(shù)據(jù)類型的選擇,需要考慮定義的常量或變量將要存儲(chǔ)的數(shù)據(jù)的范圍,以便選擇合適的數(shù)據(jù)類型。(
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 質(zhì)量生產(chǎn)檢查制度
- 2026青海西寧城西區(qū)西部礦業(yè)集團(tuán)有限公司黨務(wù)工作部門業(yè)務(wù)崗位選聘5人參考考試試題附答案解析
- 酒廠生產(chǎn)廠長(zhǎng)規(guī)章制度
- 2026湖南長(zhǎng)沙市雨花區(qū)中雅培粹雙語(yǔ)中學(xué)合同制教師招聘參考考試題庫(kù)附答案解析
- 生產(chǎn)體系交付管理制度
- 生產(chǎn)企業(yè)招聘制度
- 2026甘肅白銀市平川區(qū)容通水務(wù)有限公司招聘9人備考考試題庫(kù)附答案解析
- 生產(chǎn)車間雙面膠管理制度
- 2026河南鄭州管城回族區(qū)嵩陽(yáng)學(xué)校(小學(xué)部)招聘3人參考考試題庫(kù)附答案解析
- 造紙廠鍋爐安全生產(chǎn)制度
- 眼部艾灸課件
- 學(xué)堂在線 雨課堂 學(xué)堂云 實(shí)繩結(jié)技術(shù) 期末考試答案
- 低空經(jīng)濟(jì)應(yīng)用場(chǎng)景:創(chuàng)新與挑戰(zhàn)
- 乘務(wù)長(zhǎng)崗位面試技巧與實(shí)戰(zhàn)經(jīng)驗(yàn)分享
- 氣道濕化方法與指南
- 國(guó)家電力安全生產(chǎn)課件
- 2025年四川公務(wù)員面試真題及答案
- 安裝吊扇施工方案
- 分紅、年金、萬(wàn)能保險(xiǎn)測(cè)試題附答案
- GB/T 46456.3-2025信息技術(shù)設(shè)備互連智能家居互聯(lián)互通第3部分:局域互聯(lián)通用要求
- 國(guó)家基層高血壓防治管理指南 2025版圖文解讀
評(píng)論
0/150
提交評(píng)論