C#程序設計基礎課件_第1頁
C#程序設計基礎課件_第2頁
C#程序設計基礎課件_第3頁
C#程序設計基礎課件_第4頁
C#程序設計基礎課件_第5頁
已閱讀5頁,還剩97頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第3章C#程序設計基礎第3章C#程序設計基礎數(shù)據(jù)類型、運算符和表達式是編程的基礎。C#支持種類豐富的數(shù)據(jù)類型和運算符,這種特性使C#適用于廣泛的編程范圍。本章將介紹C#的基本語法,包括詞法結(jié)構(gòu)、數(shù)據(jù)類型、變量與常量、運算符和表達式等編程的基礎知識。2C#程序設計實用教程數(shù)據(jù)類型、運算符和表達式是編程的基礎。2C#程序設計實用教程3.1詞法結(jié)構(gòu)詞法是構(gòu)成程序設計語言的最基本單位。程序是由若干個語句構(gòu)成,而語句是由若干個具有特殊含義的單詞和運算符構(gòu)成的。所以學習一門編程語言,首先應該從詞法入手。3C#程序設計實用教程3.1詞法結(jié)構(gòu)詞法是構(gòu)成程序設計語言的最基本單位。3C#程3.1.1標識符標識符(identifier)是由程序開發(fā)人員為類型、方法、變量等所選擇的名字。C#的標識符應當使用字母或下劃線作為開頭,由字母、數(shù)字、下劃線(“_”)和美元符號(“$”)組成,不能包括空格、標點符號和運算符,而且標識符的名稱最好和實際的應用聯(lián)系起來,這樣可以使程序更容易理解,做到“見名知意”。比如,用來表示售貨員的標識符使用salesman比用people更容易理解。4C#程序設計實用教程3.1.1標識符標識符(identifier)是由程序開發(fā)3.1.1標識符下面是合法的標識符:Sum,average,_total,Student_name,Lotus_1_2_3下面是不合法的標識符:Abc-abc

//中間使用了減號而非下劃線3abc//以數(shù)字開頭Abcabc//中間有空格class//使用關鍵字作為標識符5C#程序設計實用教程3.1.1標識符下面是合法的標識符:5C#程序設計實用教程3.1.1標識符C#的標識符不能與關鍵字相同,但是可以使用“@”前綴來避免這種沖突。例如:@whilewhile上面兩個標識符中,第一個標識符是合法的,而第二個標識符不是合法的,因為while是關鍵詞。6C#程序設計實用教程3.1.1標識符C#的標識符不能與關鍵字相同,但是可以使用3.1.1標識符C#的標識符區(qū)別大小寫,例如下面的4個標識符是不同的:MembermemberMemBerMEMBER7C#程序設計實用教程3.1.1標識符C#的標識符區(qū)別大小寫,例如下面的4個標識3.1.2關鍵字

同C和C++語言一樣,C#也規(guī)定了很多關鍵字用于程序控制、數(shù)據(jù)說明或者其他功能,由于它們的特殊意義,所以這些關鍵字不能作為標識符使用。常用的關鍵詞如表3-1所示。8C#程序設計實用教程3.1.2關鍵字

同C和C++語言一樣,C#也規(guī)定了很多關3.2數(shù)據(jù)類型數(shù)據(jù)類型是用來定義現(xiàn)實生活中各種數(shù)據(jù)形式的標識符及其存儲形式。C#中數(shù)據(jù)類型主要分為兩大類:值類型和引用類型。在此,先講解這兩種類型,然后再討論數(shù)據(jù)類型之間的轉(zhuǎn)換。9C#程序設計實用教程3.2數(shù)據(jù)類型數(shù)據(jù)類型是用來定義現(xiàn)實生活中各種數(shù)據(jù)形式的標3.2.1值類型

C#的值類型包括3種:簡單類型、結(jié)構(gòu)類型和枚舉類型。簡單類型包括整數(shù)類型、浮點類型、小數(shù)類型、字符類型和布爾類型等。10C#程序設計實用教程3.2.1值類型

10C#程序設計實用教程3.2.1值類型

1.整數(shù)類型整數(shù)類型的數(shù)據(jù)值只能是整數(shù)。數(shù)學上的整數(shù)可以從負無窮大到正無窮大,由于計算機存儲單元的限制,程序語言提供的整數(shù)類型的值總是在一定的范圍內(nèi)。C#定義了8種整數(shù)類型,劃分的根據(jù)是這些類型所占存儲器的位數(shù)。例如,一個8位的整數(shù)類型可以表示28=256個數(shù)值。11C#程序設計實用教程3.2.1值類型

1.整數(shù)類型11C#程序設計實用教程3.2.1值類型

整數(shù)類型如表3-2所示。12C#程序設計實用教程3.2.1值類型

整數(shù)類型如表3-2所示。12C#程序設3.2.1值類型

2.浮點類型實數(shù)在C#中采用浮點類型的數(shù)據(jù)來表示。浮點類型的數(shù)據(jù)包括兩種:單精度浮點型(float)和雙精度浮點型(double),其區(qū)別在于取值范圍和精度不同。13C#程序設計實用教程3.2.1值類型

2.浮點類型13C#程序設計實用教程3.2.1值類型

浮點類型數(shù)據(jù)的精度(小數(shù)點后所保留的有效數(shù)字)和取值范圍如表3-3所示。14C#程序設計實用教程3.2.1值類型

浮點類型數(shù)據(jù)的精度(小數(shù)點后所保留的有3.2.1值類型

3.小數(shù)類型小數(shù)類型(decimal)數(shù)據(jù)是高精度的類型數(shù)據(jù),占用16個字節(jié),主要是為了滿足需要高精度的財務和金融方面的計算。小數(shù)類型數(shù)據(jù)的取值范圍和精度如下:小數(shù)類型:取值范圍在±1.0x10-28~7.9x1028之間,精度為29位數(shù)。要注意的是,小數(shù)類型數(shù)據(jù)的后面必須跟m或者M后綴來表示它是decimal類型的,如3.15m,0.35m等,否則就會被視為標準的浮點類型數(shù)據(jù),導致數(shù)據(jù)類型不匹配。15C#程序設計實用教程3.2.1值類型

3.小數(shù)類型15C#程序設計實用教程3.2.1值類型

提示:在C#中,可以通過給數(shù)值常數(shù)加后綴的方法來指定數(shù)值常數(shù)的類型,可以使用的數(shù)值常數(shù)后綴有以下幾種:(1)u(或者U)后綴:加在整型常數(shù)后面,代表該常數(shù)是uint類型或者ulong類型。(2)l(或者L)后綴:加在整型常數(shù)后面,代表該常數(shù)是long類型或者ulong類型。(3)ul(或者uL、Ul、UL、lu、lU、LU)后綴:加在整型常數(shù)后面,代表該常數(shù)是ulong類型。16C#程序設計實用教程3.2.1值類型

提示:在C#中,可以通過給數(shù)值常數(shù)加后3.2.1值類型

(4)f(或者F)后綴:加在任何一種數(shù)值常數(shù)后面,代表該常數(shù)是float類型。(5)d(或者D)后綴:加在任何一種數(shù)值常數(shù)后面,代表該常數(shù)是double類型。(6)m(或者M)后綴:加在任何一種數(shù)值常數(shù)后面,代表該常數(shù)是decimal類型。17C#程序設計實用教程3.2.1值類型

(4)f(或者F)后綴:加在任何一種數(shù)3.2.1值類型

示例如下:137f代表float類型的數(shù)值137.0137u代表unit類型的數(shù)值137137.2m代表decimal類型的數(shù)值137.2137.22d代表double類型的數(shù)值137.22137代表int類型的數(shù)值13718C#程序設計實用教程3.2.1值類型

示例如下:18C#程序設計實用教程3.2.1值類型

4.字符類型C#中的字符類型數(shù)據(jù)采用Unicode字符集。字符類型的類型標識符是char,因此也可稱為char類型。凡是在單引號中的一個字符,就構(gòu)成一個字符常數(shù),如下所示:'a'、'o'、'*'、'9'在表示一個字符常數(shù)時,單引號內(nèi)的有效字符必須有且只能有一個,并且不能是單引號或者反斜杠(\)等。為了表示單引號和反斜杠等特殊的字符常數(shù),提供了轉(zhuǎn)義符,在需要表示這些特殊常數(shù)的地方,可以使用轉(zhuǎn)義符來替代這些特殊的字符。常用的轉(zhuǎn)義符如表3-4所示。19C#程序設計實用教程3.2.1值類型

4.字符類型19C#程序設計實用教程3.2.1值類型

常用的轉(zhuǎn)義符如表3-4所示。20C#程序設計實用教程3.2.1值類型

常用的轉(zhuǎn)義符如表3-4所示。20C#程3.2.1值類型

5.布爾類型布爾類型數(shù)據(jù)用于表示邏輯真和邏輯假,布爾類型的類型標識符是bool。布爾類型常數(shù)只有兩種值:true(代表“真”)和false(代表“假”)。21C#程序設計實用教程3.2.1值類型

5.布爾類型21C#程序設計實用教程3.2.2引用類型

在C#中,引用類型的引入主要是因為值類型比較簡單,不能描述結(jié)構(gòu)復雜、抽象能力比較強的數(shù)據(jù)。引用類型,其含義是該類型的變量不直接存儲所包含的值,而是存儲當前引用值的地址,因此引用類型數(shù)據(jù)的值會隨所指向的值的不同而變化,同一個數(shù)據(jù)也可以有多個引用。這與簡單類型數(shù)據(jù)是不同的,簡單類型數(shù)據(jù)存儲的是自身的值,而引用類型存儲的是將自身的值所直接指向到某個對象的值。它就像一面鏡子一樣,雖然從鏡子可以看到物體,但物體并不在鏡子中,只不過是物體的反射而已。22C#程序設計實用教程3.2.2引用類型

在C#中,引用類型的引入主要是因為3.2.2引用類型

C#的引用類型有4種:類類型、數(shù)組類型、接口類型和委托類型。類(class)是面向?qū)ο缶幊痰幕締挝?。它是一種包含數(shù)據(jù)成員、函數(shù)成員的數(shù)據(jù)結(jié)構(gòu)。類的數(shù)據(jù)成員有常量、域和事件,函數(shù)成員包括方法、屬性、構(gòu)造函數(shù)和析構(gòu)函數(shù)等。下面將介紹經(jīng)常用到的兩個類:object(對象類型)和string(字符串類型)。23C#程序設計實用教程3.2.2引用類型

C#的引用類型有4種:類類型、數(shù)組3.2.2引用類型

1.object類在C#中,object類是系統(tǒng)提供的基類型,是所有類型的基類,所有的類型都直接或間接派生于對象類型。因此,對于任何一個object變量,均可以賦給任何類型的值。intx1=10;objectobj1;obj1=x1;Objectobj2="string";對于object類型的變量,聲明時必須使用object關鍵字。24C#程序設計實用教程3.2.2引用類型

1.object類24C#程序設3.2.2引用類型

2.string類在C#中,有一個用于操作字符串數(shù)據(jù)的string類,string類直接派生于object類,且它是被密封的,這意味著不能從其派生出類。一個字符串是被一對雙引號所包含的一系列字符。例如,"Helloworld!"就是一個字符串。string類的用法十分簡單:stringstr1="Hello,";stringstr2="China!“;25C#程序設計實用教程3.2.2引用類型

2.string類25C#程序設3.2.2引用類型

合并字符串也很簡單:stringstr3=str1+str2;如果想訪問單個字符,所要做的就是訪問下標:charc=str3[0];當比較兩個字符串是否相等時,簡單地使用“==”比較操作符。if(str1==str2){...}26C#程序設計實用教程3.2.2引用類型

合并字符串也很簡單:26C#程序設3.2.2引用類型

C#支持以下兩種形式的字符串常數(shù)。(1)常規(guī)字符串常數(shù)。放在雙引號間的一串字符,就是一個常規(guī)字符串常數(shù)。如前面所示的,即為常規(guī)字符串常數(shù)。除了普通的字符,一個字符串常數(shù)也允許包含一個或多個轉(zhuǎn)義符。例如在下例中,使用了\n和\t轉(zhuǎn)義符。27C#程序設計實用教程3.2.2引用類型

C#支持以下兩種形式的字符串常數(shù)。3.2.2引用類型

【例3-1】在字符串中,轉(zhuǎn)義符的應用示范。程序代碼如下:usingSystem;

classStringDemo{staticvoidMain(){Console.WriteLine("Firstline\nSecondline");//使用\n轉(zhuǎn)義符產(chǎn)生新的一行Console.WriteLine("A\tB\tC");//使用\t轉(zhuǎn)義符排列輸出Console.WriteLine("D\tE\tF");}}程序運行的結(jié)果如圖3-1所示。28C#程序設計實用教程3.2.2引用類型

【例3-1】在字符串中,轉(zhuǎn)義符的應3.2.2引用類型

【例3-1】在字符串中,轉(zhuǎn)義符的應用示范。程序運行的結(jié)果如圖3-1所示。29C#程序設計實用教程3.2.2引用類型

【例3-1】在字符串中,轉(zhuǎn)義符的應3.2.2引用類型

(2)逐字字符串常數(shù)。

逐字字符串常數(shù)以“@”開頭,后跟一對雙引號,在雙引號中放入字符。如:@"中國人";@"Helloworld!“;30C#程序設計實用教程3.2.2引用類型

(2)逐字字符串常數(shù)。30C#程序3.2.2引用類型

逐字字符串常數(shù)同常規(guī)字符串常數(shù)的區(qū)別在于,在逐字字符串常數(shù)的雙引號中,每個字符都代表其原始的含義,在逐字字符串常數(shù)中不能使用轉(zhuǎn)義字符。即,逐字字符串常數(shù)中雙引號內(nèi)的內(nèi)容在被接受時是不變的,并且可以跨越多行。所以,在逐字字符串中,以“\”開始的字符被當作正常的字符處理,而不是轉(zhuǎn)義符。但是要注意的是,如果要包含雙引號(“),就必須在一行中使用兩個雙引號(”“)。31C#程序設計實用教程3.2.2引用類型

逐字字符串常數(shù)同常規(guī)字符串常數(shù)的區(qū)3.2.2引用類型

(2)逐字字符串常數(shù)。stringstr1="hello,China";//定義規(guī)則字符串常數(shù):hello,Chinastringstr2=@“hello,China”;//定義逐字字符串常數(shù):hello,Chinastringstr3="hello\tworld";//helloworldstringstr4=@"hello\tworld";//hello\tworldstringstr5="Jacksaid\"Hello\"toyou";//Jacksaid"Hello"toyoustringstr6=@"Jacksaid""Hello""toyou";//Jacksaid"Hello"toyou32C#程序設計實用教程3.2.2引用類型

(2)逐字字符串常數(shù)。32C#程序3.2.2引用類型

簡單來說,常規(guī)字符串要對字符串的轉(zhuǎn)義序列進行解釋,而逐字字符串除了對雙引號進行解釋之外,對其它字符,無需解釋,用戶定義成什么樣,顯示結(jié)果就是什么樣。33C#程序設計實用教程3.2.2引用類型

簡單來說,常規(guī)字符串要對字符串的轉(zhuǎn)3.2.2引用類型

【例3-2】如何定義規(guī)則字符串和逐字字符串。程序代碼如下所示:usingSystem;

classStringDemo{staticvoidMain(){stringstr1=@"oneline\\twoline\n\tthreeline";stringstr2="oneline\\twoline\n\tthreeline";Console.WriteLine(str1);Console.WriteLine("--------------");Console.WriteLine(str2);}}34C#程序設計實用教程3.2.2引用類型

【例3-2】如何定義規(guī)則字符串和逐3.2.2引用類型

【例3-2】如何定義規(guī)則字符串和逐字字符串。程序的運行結(jié)果如圖3-2所示。35C#程序設計實用教程3.2.2引用類型

【例3-2】如何定義規(guī)則字符串和逐

3.2.3類型轉(zhuǎn)換

數(shù)據(jù)類型在一定條件下是可以相互轉(zhuǎn)換的,如將int類型數(shù)據(jù)轉(zhuǎn)換成double類型數(shù)據(jù)。在C#中,允許兩種轉(zhuǎn)換方式:隱式轉(zhuǎn)換(implicitconversions)和顯式轉(zhuǎn)換(explicitconversions)。36C#程序設計實用教程

3.2.3類型轉(zhuǎn)換

數(shù)據(jù)類型在一定條件下是可以相互

3.2.3類型轉(zhuǎn)換

1.隱式轉(zhuǎn)換隱式轉(zhuǎn)換是系統(tǒng)默認的,不需要加以聲明就可以進行轉(zhuǎn)換。在隱式轉(zhuǎn)換過程中,編譯器不需要對轉(zhuǎn)換進行詳細的檢查就能安全地執(zhí)行轉(zhuǎn)換,例如數(shù)據(jù)從int類型到long類型的轉(zhuǎn)換。37C#程序設計實用教程

3.2.3類型轉(zhuǎn)換

1.隱式轉(zhuǎn)換37C#程序設計

3.2.3類型轉(zhuǎn)換

1.隱式轉(zhuǎn)換其中,從int,uint或long到float以及從long到double的轉(zhuǎn)換可能會導致精度下降,但決不會引起數(shù)量上的丟失。其它的隱式數(shù)值轉(zhuǎn)換則不會有任何信息丟失。隱式數(shù)據(jù)轉(zhuǎn)換的使用方法如下所示:inta=10;//a為整型數(shù)據(jù)longb=a;//b為長整型數(shù)據(jù)doublec=a;//c為雙精度浮點型數(shù)據(jù)38C#程序設計實用教程

3.2.3類型轉(zhuǎn)換

1.隱式轉(zhuǎn)換38C#程序設計

3.2.3類型轉(zhuǎn)換

2.顯式轉(zhuǎn)換顯式轉(zhuǎn)換又稱為強制類型轉(zhuǎn)換,與隱式轉(zhuǎn)換相反,顯式轉(zhuǎn)換需要用戶明確地指定轉(zhuǎn)換類型。顯式轉(zhuǎn)換可以將一數(shù)值類型強制轉(zhuǎn)換成另一種數(shù)據(jù)類型,其格式如下:(類型標識符)表達式上式的含義為:將表達式的值的類型轉(zhuǎn)換為類型標識符的類型。比如:(int)5.17//把double類型的5.17轉(zhuǎn)換成int類型39C#程序設計實用教程

3.2.3類型轉(zhuǎn)換

2.顯式轉(zhuǎn)換39C#程序設計

3.2.3類型轉(zhuǎn)換

這種類型轉(zhuǎn)換有可能會丟失信息或?qū)е庐惓伋?,轉(zhuǎn)換按照下列規(guī)則進行:(1)對于從一種整型到另一種整型的轉(zhuǎn)換,編譯器將針對轉(zhuǎn)換進行溢出檢測,如果沒有發(fā)生溢出,轉(zhuǎn)換成功,否則拋出一個轉(zhuǎn)換異常。(2)對于從float,double或decimal到整型的轉(zhuǎn)換,將通過舍入到最接近的整型值作為轉(zhuǎn)換的結(jié)果。如果這個整型值超出了目標類型的值域,則將拋出一個轉(zhuǎn)換異常。40C#程序設計實用教程

3.2.3類型轉(zhuǎn)換

這種類型轉(zhuǎn)換有可能會丟失信息或

3.2.3類型轉(zhuǎn)換

(3)對于從double到float的轉(zhuǎn)換,double值通過舍入取最接近的float值。如果這個值太小,結(jié)果將變成正0或負0;如果這個值太大,將變成正無窮或負無窮。(4)對于從float或double到decimal的轉(zhuǎn)換,將轉(zhuǎn)換成小數(shù)形式并通過舍入取到小數(shù)點后28位。如果值太小,則結(jié)果為0;如果太大以致不能用小數(shù)表示,或是無窮或Null,則將拋出轉(zhuǎn)換異常。(5)對于從decimal到float或double的轉(zhuǎn)換,小數(shù)的值通過舍入取最接近的值。這種轉(zhuǎn)換可能會丟失精度,但不會引起異常。41C#程序設計實用教程

3.2.3類型轉(zhuǎn)換

(3)對于從double到fl

3.2.3類型轉(zhuǎn)換

顯式數(shù)據(jù)轉(zhuǎn)換的使用方法如下所示:(int)7.18m//decimal類型的數(shù)值7.18轉(zhuǎn)換為int類型的數(shù)值7轉(zhuǎn)換的結(jié)果為7。C#中還經(jīng)常要進行string類型和其他簡單類型的轉(zhuǎn)換,這里需要使用框架類庫中提供的一些方法。42C#程序設計實用教程

3.2.3類型轉(zhuǎn)換

顯式數(shù)據(jù)轉(zhuǎn)換的使用方法如下所示

3.2.3類型轉(zhuǎn)換

3.string類型轉(zhuǎn)換為其他類型整型、浮點型、字符型和布爾類型都對應有一個結(jié)構(gòu)類型,該結(jié)構(gòu)類型中提供parse方法,可以把string類型轉(zhuǎn)換成相應的類型。例如,要把string類型轉(zhuǎn)換成int類型,則有相應的int.parse(string)方法,如:stringstr="123";inti=int.Parse(str);則i的值為123。43C#程序設計實用教程

3.2.3類型轉(zhuǎn)換

3.string類型轉(zhuǎn)換為其

3.2.3類型轉(zhuǎn)換

4.其他類型轉(zhuǎn)換為string類型計算后的數(shù)據(jù)如果要以文本的方式輸出,如在文本框中顯示計算后的數(shù)據(jù),則需要將數(shù)值數(shù)據(jù)轉(zhuǎn)換成string類型,轉(zhuǎn)換方法是執(zhí)行ToString方法。例如:intj=5*8;stringstr="5*8的積是:"+j.ToString();除了使用相應類的Parse()方法之外,還可以使用System.Convert類的對應方法將數(shù)字轉(zhuǎn)換為相應的值。44C#程序設計實用教程

3.2.3類型轉(zhuǎn)換

4.其他類型轉(zhuǎn)換為strin

3.2.4裝箱與拆箱

裝箱(boxing)和拆箱(unboxing)是C#類型系統(tǒng)中重要的概念。它允許將任何類型的數(shù)據(jù)轉(zhuǎn)換為對象,同時也允許任何類型的對象轉(zhuǎn)換到與之兼容的數(shù)據(jù)類型。經(jīng)過裝箱操作,使得任何類型的數(shù)據(jù)都可以看做是對象的類型系統(tǒng)。反之,拆箱是裝箱的逆過程。必須注意的是:裝箱轉(zhuǎn)換和拆箱轉(zhuǎn)換過程中必須遵循類型兼容的原則,否則轉(zhuǎn)換會失敗。45C#程序設計實用教程

3.2.4裝箱與拆箱

裝箱(boxing)

3.2.4裝箱與拆箱

1.裝箱轉(zhuǎn)換裝箱轉(zhuǎn)換是指將一個值類型的數(shù)據(jù)隱式地轉(zhuǎn)換成一個對象類型(object)的數(shù)據(jù),或者把這個值類型數(shù)據(jù)隱式轉(zhuǎn)換成一個被該值類型數(shù)據(jù)對應的接口類型數(shù)據(jù)。把一個值類型裝箱,就是創(chuàng)建一個object類型的實例,并把該值類型的值復制給該object。例如,下面的語句就執(zhí)行了裝箱轉(zhuǎn)換:inti=108;objectobj=i;上面的語句中,第1條語句先聲明一個整型變量i并對其賦值,第2條語句則先創(chuàng)建一個object類型的實例obj,然后將i的值復制給obj。46C#程序設計實用教程

3.2.4裝箱與拆箱

1.裝箱轉(zhuǎn)換46C#

3.2.4裝箱與拆箱

在執(zhí)行裝箱轉(zhuǎn)換時,也可以使用顯式轉(zhuǎn)換,例如:inti=120;objectobj=(object)i;47C#程序設計實用教程

3.2.4裝箱與拆箱

在執(zhí)行裝箱轉(zhuǎn)換時,也

3.2.4裝箱與拆箱

【例3-3】演示裝箱轉(zhuǎn)換。程序代碼如下:usingSystem;

classBoxingDemo{staticvoidMain(){Console.WriteLine("裝箱轉(zhuǎn)換演示:");inti=120;objectobj=i;i=300;Console.WriteLine("obj={0}",obj);Console.WriteLine("i={0}",i);}}48C#程序設計實用教程

3.2.4裝箱與拆箱

【例3-3】演示裝箱

3.2.4裝箱與拆箱

【例3-3】演示裝箱轉(zhuǎn)換。該程序執(zhí)行后,輸出結(jié)果如下:裝箱轉(zhuǎn)換演示:obj=120i=300說明:從上面的輸出結(jié)果可知,通過裝箱轉(zhuǎn)換,可以把一個整型值復制給一個object類型的實例,而被裝箱的整型變量自身的數(shù)值并不會受到裝箱的影響。49C#程序設計實用教程

3.2.4裝箱與拆箱

【例3-3】演示裝箱

3.2.4裝箱與拆箱

2.拆箱轉(zhuǎn)換和裝箱相反,拆箱轉(zhuǎn)換是指將一個對象類型的數(shù)據(jù)顯式地轉(zhuǎn)換成一個值類型數(shù)據(jù),或者將一個接口類型顯式地轉(zhuǎn)換成一個執(zhí)行該接口的值類型數(shù)據(jù)。拆箱操作包括兩步,首先檢查對象實例,確保其是給定值類型的一個裝箱值,然后把實例的值復制到值類型數(shù)據(jù)中。50C#程序設計實用教程

3.2.4裝箱與拆箱

2.拆箱轉(zhuǎn)換50C#

3.2.4裝箱與拆箱

例如,下面的語句就執(zhí)行了拆箱轉(zhuǎn)換:objectobj=225;inti=(int)obj;上面的語句在執(zhí)行過程中,首先檢查obj這個object實例的值是否為給定值類型的裝箱值,由于obj的值為225,給定的值類型為整型,所以滿足拆箱轉(zhuǎn)換的條件,會將obj的值復制給整型變量i。需要注意的是,拆箱轉(zhuǎn)換必須需要執(zhí)行顯式轉(zhuǎn)換,這是與裝箱轉(zhuǎn)換不同之處。51C#程序設計實用教程

3.2.4裝箱與拆箱

例如,下面的語句就執(zhí)

3.2.4裝箱與拆箱

【例3-4】演示拆箱轉(zhuǎn)換。程序代碼如下:usingSystem;

classUnboxingDemo{staticvoidMain(){inti=225;objectobj=i;//裝箱轉(zhuǎn)換intj=(int)obj;//拆箱轉(zhuǎn)換Console.WriteLine("i={0}\nobj={1}\nj={2}",i,obj,j);}}52C#程序設計實用教程

3.2.4裝箱與拆箱

【例3-4】演示拆

3.2.4裝箱與拆箱

【例3-4】演示拆箱轉(zhuǎn)換。該程序執(zhí)行后,輸出結(jié)果如下:i=225obj=225;j=22553C#程序設計實用教程

3.2.4裝箱與拆箱

【例3-4】演示拆箱3.4結(jié)構(gòu)類型1.結(jié)構(gòu)類型的聲明結(jié)構(gòu)類型由若干“成員”組成的。數(shù)據(jù)成員稱為字段,每個字段都有自已的數(shù)據(jù)類型。聲明結(jié)構(gòu)類型的一般格式如下:

struct結(jié)構(gòu)類型名稱

{ [字段訪問修飾符]數(shù)據(jù)類型字段1; [字段訪問修飾符]數(shù)據(jù)類型字段2; ... [字段訪問修飾符]數(shù)據(jù)類型字段n;};一般情況下,字段訪問修飾符是public,并且不可以省略。補充:補充:例如,以下聲明一個具有姓名和年齡的結(jié)構(gòu)體類型Student:structStudent //聲明結(jié)構(gòu)類型Student{publicintxh; //學號

publicstringxm; //姓名

publicstringxb; //性別

publicintnl; //年齡

publicstringbh; //班號};例如,以下聲明一個具有姓名和年齡的結(jié)構(gòu)體類型Student:2.結(jié)構(gòu)類型變量的定義聲明一個結(jié)構(gòu)類型后,可以定義該結(jié)構(gòu)類型的變量(簡稱為結(jié)構(gòu)變量)。定義結(jié)構(gòu)變量的一般格式如下:

結(jié)構(gòu)類型結(jié)構(gòu)變量;

例如,在前面的結(jié)構(gòu)類型Student聲明后,定義它的兩個變量如下:

Students1,s2;2.結(jié)構(gòu)類型變量的定義3.結(jié)構(gòu)變量的使用1)訪問結(jié)構(gòu)變量字段訪問結(jié)構(gòu)變量字段的一般格式如下:

結(jié)構(gòu)變量名.字段名例如,s1.xh表示結(jié)構(gòu)變量s1的學號,s2.xm表示結(jié)構(gòu)變量s2的姓名。結(jié)構(gòu)體變量的字段可以在程序中單獨使用,與普通變量完全相同。2)結(jié)構(gòu)變量的賦值結(jié)構(gòu)變量的賦值有兩種方式。結(jié)構(gòu)變量的字段賦值:使用方法與普通變量相同。結(jié)構(gòu)變量之間賦值:要求賦值的兩個結(jié)構(gòu)變量必須類型相同。例如:

s1=s2;這樣s2的所有字段值賦給s1的對應字段。3.結(jié)構(gòu)變量的使用【例3.2】設計一個控制臺程序說明結(jié)構(gòu)類型的應用。usingSystem;namespaceProj3_2{classProgram{structStudent//結(jié)構(gòu)類型聲明應放在Main函數(shù)的外面

{ publicintxh; //學號

publicstringxm;//姓名

publicstringxb; //性別

publicintnl; //年齡

publicstringbh; //班號

}【例3.2】設計一個控制臺程序說明結(jié)構(gòu)類型的應用。usin

staticvoidMain(string[]args){Students1,s2; //定義兩個結(jié)構(gòu)類型變量

s1.xh=101; s1.xm="李明"; s1.xb="男"; s1.nl=20; s1.bh="07001"; Console.WriteLine("學號:{0},姓名:{1},性別:{2},年齡:{3},

班號:{4}",s1.xh,s1.xm,s1.xb,s1.nl,s1.bh); s2=s1; //將結(jié)構(gòu)變量s1賦給s2 s2.xh=108; s2.xm="王華"; Console.WriteLine("學號:{0},姓名:{1},性別:{2},年齡:{3},

班號:{4}",s2.xh,s2.xm,s2.xb,s2.nl,s2.bh);}}}staticvoidMain(string

3.3常量和變量

正確定義和使用常量及變量,會使開發(fā)人員在編程過程中減少錯誤,提高程序開發(fā)效率。60C#程序設計實用教程3.3常量和變量

正確定義和使用常量及變量,會使開發(fā)人員

3.3.1常量

常量是指那些基于可讀格式的固定數(shù)值,在程序的運行過程中其值是不可改變的。通過關鍵字const來聲明常量,其格式如下:const類型標識符常量名=表達式;類型標識符指示所定義的常量的數(shù)據(jù)類型,常量名必須是合法的標識符,在程序中通過常量名來訪問該常量。如下例所示:constdoublePI=3.14159265;上面的語句就定義了一個double類型的常量PI,它的值是3.14159265。61C#程序設計實用教程

3.3.1常量

常量是指那些基于可讀格式

3.3.1常量

常量有如下特點:(1)程序中,常量只能被賦予初始值。一旦賦予一個常量初始值,這個常量的值在程序的運行過程中就不允許改變,即無法對一個常量賦值。(2)定義常量時,表達式中的運算符對象只允許出現(xiàn)常量,不能有變量存在。例如:inta=20;constintb=30;constintc=b+25;//正確,因為b是常量constintk=a+45;//錯誤,表達式中不允許出現(xiàn)變量c=150;//錯誤,不能修改常量的值62C#程序設計實用教程

3.3.1常量

常量有如下特點:62C#

3.3.2變量

變量是程序運行過程中用于存放數(shù)據(jù)的存儲單元。變量的值在程序的運行過程中是可以改變的。1.變量的定義在定義變量時,首先必須給每一個變量起名,稱為變量名,以便區(qū)分不同的變量。變量名必須是合法的標識符。為了保存不同類型的數(shù)據(jù),除了變量名之外,在定義變量時,還必須為每個變量指定數(shù)據(jù)類型,變量的類型決定了存儲在變量中的數(shù)值的類型。對于一個變量的定義,變量名和變量類型缺一不可。C#中,采用如下格式定義一個變量:類型標識符變量名1,變量名2,變量名3,…..63C#程序設計實用教程

3.3.2變量

變量是程序運行過程

3.3.2變量

變量定義如下例所示:inti,j,k;

//同時聲明多個int類型相同的變量,在類型的后面用逗號分割變量名floatfSum;stringstrName,strAddress;注意:任何變量在使用前,必須先定義,后使用。64C#程序設計實用教程

3.3.2變量

變量定義如下例所示:6

3.3.2變量

2.變量的賦值變量是一個能保存某種類型的具體數(shù)據(jù)的內(nèi)存單元,可以通過變量名來訪問這個具體的內(nèi)存單元。變量的賦值,就是把數(shù)據(jù)保存到變量中的過程。給一個變量賦值的格式如下:變量名=表達式;這里的表達式同數(shù)學中的表達式是類似的,如9+10、4+a-c都是表達式。單個常數(shù)或者變量,也可以構(gòu)成表達式。由單個常數(shù)或者變量構(gòu)成的表達式的值,就是由這個常數(shù)或者變量本身。變量賦值的意義是:首先計算表達式的值,然后將這個值賦予變量。65C#程序設計實用教程

3.3.2變量

2.變量的賦值65C

3.3.2變量

比如,定義了兩個double類型的變量dblTotalScore、dblAverageScore和一個int類型的變量nStudentCount:doubledblTotalScore,dblAverageScore;intnStudentCount;66C#程序設計實用教程

3.3.2變量

比如,定義了兩個do

3.3.2變量

2.變量的賦值下面給dblTotalScore、nStudentCount賦值,應該寫成:dblTotalScore=2000;nStudentCount=20;如果要讓dblAverageScore的值等于dblTotalScore的值除以nStudentCount,應該寫成:dblAverageScore=dblTotalScore/nStudentCount;67C#程序設計實用教程

3.3.2變量

2.變量的賦值67C

3.3.2變量

在程序中,可以給一個變量多次賦值。變量的當前值等于最近一次給變量所賦的值。如:nStudentCount=20;//此時nStudentCount等于20nStudentCount=70;

//此時nStudentCount等于70nStudentCount=nStudentCount+15;//此時nStudentCount等于8568C#程序設計實用教程

3.3.2變量

在程序中,可以給一個

3.3.2變量

在對變量進行賦值時,表達式的值的類型必須同變量的類型相同。對于string類型的變量strName和int類型的變量nScore:stringstrName;intnScore;則下面的賦值語句是正確的:strName="Jim";strName="Xiaobao";nScore=100;但是,以下的賦值語句是錯誤的:strName=120;//不能把整數(shù)賦予字符串變量nScore="Hello";

//不能把字符串賦予整形變量69C#程序設計實用教程

3.3.2變量

在對變量進行賦值時

3.3.2變量

3.變量的初始化在定義變量的同時,也可以對變量賦值,稱為變量的初始化。在C#中,對變量進行初始化的格式如下所示:類型標識符變量名=表達式;例如:intnStudentCount=150;//定義一個int類型變量nStudentCount,并將其賦予初始值為15070C#程序設計實用教程

3.3.2變量

3.變量的初始化70C補充:

理解引用類型的變量引用表示所使用的是變量或?qū)ο蟮牡刂范皇亲兞炕驅(qū)ο蟊旧?。當聲明引用類型變量時,程序只是分配了存放這個引用的存儲空間。要想創(chuàng)建對象并把對象的存儲地址賦給該變量,就需要使用new操作符。例如:

MyClassvar; //MyClass是已定義的類或類型

var=newMyClass();數(shù)組示例:

int[]a=newint[3]{1,2,3};for(inti=0;i<3;i++)Console.Write("{0}",a[i]);補充:理解引用類型的變量usingSystem;usingSystem.Collections.Generic;usingSystem.Text;namespace理解引用類型的變量{classProgram{staticvoidMain(string[]args){int[]a={1,2,3,4,5};for(inti=0;i<a.Length;i++){Console.Write(a[i]+"");}Console.WriteLine();int[]b=a;for(inti=0;i<b.Length;i++){b[i]*=2;}for(inti=0;i<a.Length;i++){Console.Write(a[i]);}Console.WriteLine();}}}usingSystem;

3.4運算符和表達式

運算符是表示各種不同運算的符號,運算符和運算緊密相關。表達式由變量、常數(shù)和運算符組成,是用運算符將運算對象連接起來的運算式,是基本的對數(shù)據(jù)進行運算和加工的表示形式。表達式的計算結(jié)果是表達式的返回值。使用不同的運算符連接運算對象,其返回值的類型是不同的。73C#程序設計實用教程

3.4運算符和表達式

運算符是表示各種不同運算的符號

3.4.1運算符

根據(jù)運算符所要求的操作數(shù)的個數(shù),運算符分為“一元運算符”、“二元運算符”和“多元運算符”。一元運算符是指只有一個操作數(shù)的運算符,比如“++”運算符、“--”運算符等。二元運算符是指有二個操作數(shù)的運算符,比如“+”運算符、“*”運算符等。在C#中,還有一個三元運算符,即“?:”運算符,它有三個操作數(shù)。根據(jù)運算的類型,運算符又分為以下幾類:算術(shù)運算符、賦值運算符、關系運算符、邏輯運算符、條件運算符和其他運算符。74C#程序設計實用教程

3.4.1運算符

根據(jù)運算符所要求的

3.4.1運算符

1.算術(shù)運算符算術(shù)運算符用于對操作數(shù)進行算術(shù)運算,C#中的算術(shù)運算符及其功能如表3-5所示。75C#程序設計實用教程

3.4.1運算符

1.算術(shù)運算符75

3.4.1運算符

(1)除法運算符和模運算符需要說明的是,盡管+、-、*和/這些運算符的意義和數(shù)學上的運算符是一樣的。但是,對于除法運算符來說,整數(shù)相除的結(jié)果也應該為整數(shù),比如7/5和9/5的結(jié)果都為1,而不是1.4及1.8,計算結(jié)果要舍棄小數(shù)部分??梢酝ㄟ^模運算符%來獲得這個除法的余數(shù)。運算符%可以應用于整數(shù)和浮點類型,例如,10%3的結(jié)果為1,10.0%3.0的結(jié)果為1。76C#程序設計實用教程

3.4.1運算符

(1)除法運算符和

3.4.1運算符

【例3-5】/和%運算符的示例。程序代碼如下:usingSystem;

classDivAndModDemo{staticvoidMain(){intnResult,nRemainder;doubledblResult,dblRemainder;nResult=10/3;nRemainder=10%3;dblResult=10.0/3.0;dblRemainder=10.0%3.0;Console.WriteLine("10/3={0},10%3={1}\n",nResult,nRemainder);Console.WriteLine("10.0/3.0={0},10.0%3.0={1}",dblResult,dblRemainder);}}77C#程序設計實用教程

3.4.1運算符

【例3-5】/和%

3.4.1運算符

【例3-5】/和%運算符的示例。程序的執(zhí)行結(jié)果如圖3-3所示:78C#程序設計實用教程

3.4.1運算符

【例3-5】/和%

3.4.1運算符

(2)自增運算符和自減運算符在C#中,還有兩種特殊的算術(shù)運算符:++(自增運算符)和--(自減運算符),其作用是使變量的值自動增加1或者減去1。x=x+1和x++的作用是一樣的,x=x-1和x--的作用也是一樣的。++(自增運算符)和--(自減運算符)都是一元運算符,只能用于變量,而不能用于常量或表達式,例如,12++或--(x+y)都是錯誤的。自增和自減運算符可以在操作數(shù)前面(前綴),也可以在操作數(shù)后面(后綴)。例如:++x;//前綴格式x++;//后綴格式79C#程序設計實用教程

3.4.1運算符

(2)自增運算符和

3.4.1運算符

當自增或自減運算符的前綴和后綴格式用在一個表達式中時,存在著區(qū)別。當一個自增或自減運算符在它的操作數(shù)前面(前綴格式)時,將在取得操作數(shù)的值前執(zhí)行自增或自減操作,并將其用于表達式的其它部分。如果運算符在操作數(shù)年的后面(后綴格式),將先取得操作數(shù)的值,然后進行自增或自減運算。比如下面的例子:x=11;y=++x;在這種情況下,y被賦值為12。但是,如果代碼如果改為:x=11;y=x++;那么,y被賦值為11。在兩種情況下,最終x都被賦值為12。80C#程序設計實用教程

3.4.1運算符

當自增或自減運算符

3.4.1運算符

【例3-6】自增運算符的示例。usingSystem;

classTest{staticvoidMain(){intx=5;inty=x++;Console.WriteLine("y={0}",y);y=++x;Console.WriteLine("y={0}",y);}}81C#程序設計實用教程

3.4.1運算符

【例3-6】自增運

3.4.1運算符

【例3-6】自增運算符的示例。該程序的運行結(jié)果如圖3-4所示。說明:第一次對于x是先使用后自增,所以輸出的結(jié)果為5,第二次對于x是先自增后使用,所以輸出的結(jié)果為7。82C#程序設計實用教程

3.4.1運算符

【例3-6】自增運

3.4.1運算符

2.賦值運算符賦值運算符用于將一個數(shù)據(jù)賦予一個變量,賦值操作符的左操作數(shù)必須是一個變量,賦值結(jié)果是將一個新的數(shù)值存放在變量所指示的內(nèi)存空間中。常用的賦值運算符如表3-6所示。83C#程序設計實用教程

3.4.1運算符

2.賦值運算符83

3.4.1運算符

其中,“=”是簡單的賦值運算符,它的作用是將右邊的數(shù)值賦值給左邊的變量,數(shù)值可以是常量,也可以是表達式。例如,x=18或者x=10-x都是允許的,它們分別執(zhí)行了一次賦值操作。除了簡單的賦值運算符之外,其他的賦值運算符都是復合的賦值運算符,是在“=”之前加上其他運算符。復合賦值運算符的運算很簡單,例如x*=10等價于x=x*10,它是對變量進行一次自乘操作。復合賦值運算符的結(jié)合方向為自右向左。可以把表達式的值通過復合賦值運算符賦予變量,這時復合賦值運算符右邊的表達式是作為一個整體參加運算,相當于表達式有括號。例如,i/=j*12+10相當于i/=(j*12+10),它與i=i/(j*12+10)是等價的。84C#程序設計實用教程

3.4.1運算符

其中,“=”是簡單

3.4.1運算符

在C#中,可以對變量進行連續(xù)賦值,此時,賦值操作符是右關聯(lián)的,這意味著從右向左運算符被分組。例如,x=y=z等價于x=(y=z)。85C#程序設計實用教程

3.4.1運算符

在C#中,可以對變

3.4.1運算符

3.關系運算符關系用于創(chuàng)建一個表達式,該表達式用來比較兩個對象,并返回布爾值。關系運算符就是用于在程序中比較兩個對象的大小。關系運算符如表3-7所示。86C#程序設計實用教程

3.4.1運算符

3.關系運算符8

3.4.1運算符

一個關系運算符兩邊的運算對象如果是數(shù)據(jù)類型的對象,是比較兩個數(shù)的大?。蝗绻亲址蛯ο?,則比較兩個字符的Unicode編碼的大小。比如,字符a的Unicode編碼小于b的編碼,則關系表達式'a'>'b'的結(jié)果為false。關系運算可以和算術(shù)運算混合起來使用,此時,關系運算符兩邊的運算對象可以是算術(shù)表達式的值,在C#中,是先求表達式的值,然后將這些值做關系運算。例如:4+8>6-3//結(jié)果是true87C#程序設計實用教程

3.4.1運算符

一個關系運算符兩邊usingSystem;usingSystem.Collections.Generic;usingSystem.Text;namespaceConsoleApplication1{classProgram{staticvoidMain(string[]args){chara1='a';chara2='b';boolbl=a1<a2;Console.WriteLine(Convert.ToInt16(a1));Console.WriteLine(bl);Console.ReadLine();}}}usingSystem;

3.4.1運算符

4.邏輯運算符邏輯運算符用于表示兩個布爾值的邏輯關系,邏輯運算結(jié)果是布爾類型。C#中,邏輯運算符如表3-8所示。89C#程序設計實用教程

3.4.1運算符

4.邏輯運算符8

3.4.1運算符

邏輯非運算的結(jié)果是原來運算結(jié)果的逆,如果原來運算結(jié)果為false,則經(jīng)過邏輯非運算后,結(jié)果為true。邏輯與運算的含義是,只有兩個運算對象都為true,運算結(jié)果才為true,如果只有其中一個是false,結(jié)果就為false。邏輯或運算的含義是,只有兩個運算對象中有一個為true,運算結(jié)果就為true,只有兩個運算對象都為false,結(jié)果才為false。90C#程序設計實用教程

3.4.1運算符

邏輯非運算的結(jié)果是

3.4.1運算符

邏輯運算的規(guī)律總結(jié)如表3-9所示。當需要多個判定條件時,可以方便地使用邏輯運算符把關系表達式連接起來。如果表達式中同時存在著多個邏輯運算符,邏輯非的優(yōu)先級最高,邏輯與的優(yōu)先級高于邏輯或。91C#程序設計實用教程

3.4.1運算符

邏輯運算的規(guī)律總結(jié)

3.4.1運算符

5.位運算符位運算是指二進制位的運算,每個二進制都是由0或1組成,進行位運算時,依次取運算對象的每一個位,進行位運算。位運算符如圖3-10所示。在此表中,設x=6,其二進制表示為00000110;y=10,其二進制表示為00001010。92C#程序設計實用教程

3.4.1運算符

5.位運算符92usingSystem;namespaceConsoleApplication3{classProgram{staticvoidMain(string[]args){intx=2;intx1=Transfer(x);Console.WriteLine("移位前的x為:{0}",x1);Console.WriteLine("請輸入要移動的位數(shù):");inty=x<<int.Parse(Console.ReadLine());intx2=Transfer(y);Console.WriteLine("移位后的x為:{0}",x2);Console.ReadLine();}///<summary>///十進制轉(zhuǎn)換為二進制

///</summary>///<paramname="num10"></param>///<returns></returns>publicstaticintTransfer(intnum10){intnum2;stringstr=null;while(num10>0){num2=num10%2;num10=num10/2;str=num2.ToString()+str;}num2=int.Parse(str);ret

溫馨提示

  • 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

提交評論