C面向?qū)ο蟪绦蛟O(shè)計知識點匯集_第1頁
C面向?qū)ο蟪绦蛟O(shè)計知識點匯集_第2頁
C面向?qū)ο蟪绦蛟O(shè)計知識點匯集_第3頁
C面向?qū)ο蟪绦蛟O(shè)計知識點匯集_第4頁
C面向?qū)ο蟪绦蛟O(shè)計知識點匯集_第5頁
已閱讀5頁,還剩52頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

C#面向?qū)ο蟪绦蛟O(shè)計知識點匯集第一章:C#入門1.namespace關(guān)鍵字namespace即命名空間,是定義命名空間的關(guān)鍵字,命名空間包含類,是類的組織方式。namespace命名空間名{…//類的定義}2.using關(guān)鍵字using關(guān)鍵字用于導(dǎo)入命名空間using命名空間名;3.class關(guān)鍵字class即類,是定義類的關(guān)鍵字。C#中必須用類來組織程序的變量和方法。4.Main()方法C#程序必須且只能包含一個Main()方法,它是程序的入口點。staticvoidMain(string[]args){}staticvoidMain(){}staticintMain(string[]args){}staticintMain(){}5.行輸出方法語句“Console.WriteLine("Hello.NET!");”的功能是向顯示屏輸出雙引號之間的字符串。語句“Console.ReadLine();”的功能是輸入一個字符串6.C#程序結(jié)構(gòu)C#程序的組成要素如下:1)命名空間:命名空間包含一個或多個類。2)類。3)方法:方法必須包含在某一個類中,作為類的一個成員,每個程序有且僅有一個Main()方法。4)語句:語句是C#應(yīng)用程序中執(zhí)行操作的命令。C#中的語句必須用分號“;”結(jié)束。5)關(guān)鍵字:關(guān)鍵字也叫保存字,是對C#有特定意義的字符串。6)大括號:在C#中,括號“{”和“}”是一種范圍標志,表達代碼層次的一種方式。

7.C#程序書寫格式1)縮進2)字母大小寫C#是大小寫敏感的語言,它把同一字母的大小寫當作兩個不同的字符對待。3)程序注釋(1)單行注釋,以雙斜線“//”開始,一直到本行尾部,均為注釋內(nèi)容。(2)多行注釋,以“/*”開始,以“*/”結(jié)束,可以注釋多行,也可以注釋一行代碼中間的一部分,比較靈活。(3)文檔注釋,使用“///”,若有多行文檔注釋,每一行都用“///”開頭。8.Console類Console類是System命名空間中預(yù)定義的一個類,用于實現(xiàn)控制臺的基本輸入輸出。編寫一個控制臺應(yīng)用程序,輸入字符串“Ilovethisgame!”,在屏幕上輸出。usingSystem;usingSystem.Collections.Generic;usingSystem.Text;namespaceHello.NET{classProgram{staticvoidMain(string[]args){Console.WriteLine("IlovethisGame!");}}}相關(guān)知識及注意事項1.對象、類、屬性和方法類和對象2)屬性每個對象都有自己的特性和行為,對象的靜態(tài)特性稱為對象的屬性3)方法方法是對象的行為特性,是一段可以完畢特定功能的代碼2.事件和事件驅(qū)動事件就是預(yù)先定義好的、能被對象辨認的動作。通過隨時響應(yīng)用戶或系統(tǒng)觸發(fā)的事件,并做出相應(yīng)響應(yīng)的機制就叫做事件驅(qū)動機制。3.窗體對象4.控件對象按鈕控件按鈕(Button)控件用于接受用戶的操作信息,激發(fā)相應(yīng)的事件,按鈕是用戶與程序交互的重要方法之一。文本框控件文本框(TextBox)控件用于獲取用戶輸入的信息或向用戶顯示文本信息,圖1.17用于顯示信息的白色框就是文本框5.控件的基本操作有兩種方法:第一種是按住Shift鍵或Ctrl鍵不放,然后單擊每個要選擇的控件;第二種是把光標移到窗體中的適當位置,然后拖動鼠標畫出一個矩形,選中矩形內(nèi)的控件(涉及邊線所通過的控件)。1.填空題(1).NET框架具有兩個重要組件:____________________和____________________。(2)使用VS.NET開發(fā)的每一個應(yīng)用程序稱為__________,它可以涉及一個或多個__________。(3)命名空間是類的組織方式,C#提供了關(guān)鍵字__________來聲明命名空間,提供了關(guān)鍵字____________________來導(dǎo)入命名空間;假如要使用某個命名空間中的類,還需要添加對該命名空間所在__________的引用。(4)C#語言程序必須包含并且只能包含一個的方法(函數(shù))是__________,它是程序的入口點。(5)C#程序中的語句必須以__________作為語句結(jié)束符。(6)Console類是System命名空間中的一個類,用于實現(xiàn)控制臺的基本輸入輸出,該類中有兩個常用的方法,一個是功能為“輸出一行文本”的方法____________________,另一個是功能為“輸入一行文本”的方法____________________。2.選擇題(1)下面__________是C#中的單行注釋。A./*注釋內(nèi)容*/B.//注釋內(nèi)容C.///注釋內(nèi)容D.Note注釋內(nèi)容(2)C#中以__________作為源文獻的擴展名。A..cB..cppC..csD..exe(3)關(guān)于C#程序書寫格式,以下說法錯誤的是___.A.縮進在程序中是必須的B.C#是大小寫敏感的語言,它把同一字母的大小寫當作兩個不同的字符對待C.注釋是給程序員看的,不會被編譯,也不會生成可執(zhí)行代碼D.在C#中,大括號“{”和“}”是一種范圍標志,大括號可以嵌套3.簡答題(1)簡述C#程序的組成要素。答:C#程序的組成要素如下:命名空間、類、方法、語句、關(guān)鍵字、大括號“{”和“}”。(2)簡述Windows應(yīng)用程序編程環(huán)節(jié)。答:在VS.NET中開發(fā)Windows窗體應(yīng)用程序的環(huán)節(jié)如下:

新建項目;

設(shè)計程序界面,涉及添加控件和設(shè)立控件屬性;

編寫代碼;

保存程序;

運營調(diào)試程序。(3)簡述對事件驅(qū)動機制的理解。答:當用戶或系統(tǒng)觸發(fā)事件時,對象就會響應(yīng)事件,實現(xiàn)特定的功能,這種通過隨時響應(yīng)用戶或系統(tǒng)觸發(fā)的事件,并做出相應(yīng)響應(yīng)的機制就叫做事件驅(qū)動機制。響應(yīng)事件時執(zhí)行的代碼稱為事件解決程序。開發(fā)應(yīng)用程序時編程人員的重要工作之一就是針對控件也許被觸發(fā)的事件設(shè)計適當?shù)氖录鉀Q程序。第二章:C#語法基礎(chǔ)1.常量與變量有的量在過程中不起變化,就把其稱為常量;有的量在過程中是變化的,也就是可以取不同的數(shù)值,就把其稱為變量。在C#中程序設(shè)計人員可以根據(jù)程序設(shè)計的需要,給存放常量和變量的內(nèi)存地址取一個故意義的名字,分別叫做常量名和變量名??梢酝ㄟ^const關(guān)鍵字來定義常量,語法如下:const數(shù)據(jù)類型標記符常量名=數(shù)值或表達式;說明一旦定義常量,就要賦初值,且這個常量的值在程序運營過程中是不允許改變的。定義常量時,表達式中的運算符對象只允許出項常量和常數(shù),不允許出現(xiàn)變量。(3)不管常量和變量,都必須先定義后使用。變量的定義和賦值語法如下:數(shù)據(jù)類型標記符變量名[=數(shù)值或表達式];說明:(1)語法中的[]表達可選,就是說[]中的內(nèi)容寫或不寫都不會導(dǎo)致語法錯誤。(2)在對變量進行賦值時,數(shù)值或表達式的值類型必須同變量的類型相同。2.C#變量命名規(guī)則為變量起名時要遵守C#語言的規(guī)定。(1)變量名必須以字母開頭。(2)變量名只能由字母、數(shù)字和下劃線組成,而不能包含空格、標點符號、運算符等其他符號。(3)變量名不能與C#中的關(guān)鍵字名稱相同。(4)變量名不能與C#中的庫函數(shù)名稱相同。(5)允許在變量名前加前綴“@”。說明:可以使用前綴“@”加上關(guān)鍵字作為變量的名稱。這重要是為了與其他語言進行交互時避免沖突。由于前綴“@”事實上并不是名稱的一部分,其他的編程語言就會把它作為一個普通的變量名。在其他情況下,不推薦使用前綴“@”作為變量名的一部分。3.變量的定義和賦值語法如下:數(shù)據(jù)類型標記符變量名[=數(shù)值或表達式];說明:(1)語法中的[]表達可選,就是說[]中的內(nèi)容寫或不寫都不會導(dǎo)致語法錯誤。(2)在對變量進行賦值時,數(shù)值或表達式的值類型必須同變量的類型相同。假如數(shù)值或表達式的值類型與變量的類型不相同,但數(shù)值或表達式的值類型所表達的數(shù)值范圍比被賦值變量的類型所表達的范圍要小,是允許賦值的。事實上C#在內(nèi)部進行了一次數(shù)值類型的轉(zhuǎn)換,這種轉(zhuǎn)換叫隱式轉(zhuǎn)換。關(guān)于數(shù)據(jù)類型和隱式轉(zhuǎn)換將在后面講述。數(shù)值類型涉及:整數(shù)類型、字符類型、浮點數(shù)類型、布爾類型、結(jié)構(gòu)類型、枚舉類型。引用類型涉及:類類型(如string類)、數(shù)組類型、接口類型、代理類型。C#的數(shù)據(jù)類型體系如圖所示。4.整數(shù)類型C#有8種整數(shù)類型:(1)短字節(jié)型(sbyte)有符號8位整數(shù)(2)字節(jié)型(byte)無符號8位整數(shù)(3)短整型(short)有符號16位整數(shù)(4)無符號短整型(ushort)無符號16位整數(shù)(5)整型(int)有符號32位整數(shù)(6)無符號整型(uint)無符號32位整數(shù)(7)長整型(long)有符號64位整數(shù)(8)無符號長整型(ulong)無符號64位整數(shù)5.浮點數(shù)類型C#支持3種基本浮點數(shù):(1)表達單精度的float,精度7位(2)表達雙精度的double,精度15-16位(3)表達財務(wù)計算用途的decimal,精度29位在程序中書寫一個十進制的數(shù)值常數(shù)時,C#默認按照如下方法判斷一個數(shù)值常數(shù)屬于哪種C#數(shù)值類型。(1)假如一個數(shù)值常數(shù)不帶小數(shù)點,如3456,則這個常數(shù)的類型是個整數(shù)。(2)對于一個屬于整型的數(shù)值常數(shù),C#按如下順序判斷該數(shù)的類型:int,uint,long,ulong。(3)假如一個數(shù)值常數(shù)帶小數(shù)點,如1.2,則該常數(shù)的類型是浮點型中的double類型。可以通過在數(shù)值常數(shù)后加后綴的方法來指定數(shù)值常數(shù)的類型。u(或U)后綴:加在整型常數(shù)后面,代表該常數(shù)是uint類型或ulong類型,具體哪種,由常數(shù)的實際值決定。C#優(yōu)先匹配uint類型。(2)

l(或L)后綴:加在整型常數(shù)后面,代表該常數(shù)是long類型或ulong類型,具體哪種,由常數(shù)的實際值決定。C#優(yōu)先匹配long類型。(3)

ul(或uL、Ul、UL、lu、lU、LU)后綴:加在整型常數(shù)后面,代表該常數(shù)是ulong類型。(4)

f(或F)后綴:加在任何一個數(shù)值常數(shù)后面,代表該常數(shù)是float類型。(5)

d(或D)后綴:加在任何一個數(shù)值常數(shù)后面,代表該常數(shù)是double類型。(6)

m(或M)后綴:加在任何一個數(shù)值常數(shù)后面,代表該常數(shù)是decimal類型。假如所指定的數(shù)據(jù)符號不能用指定類型表達,在編譯時會產(chǎn)生錯誤。當用兩種浮點型執(zhí)行運算時,可以產(chǎn)生以下的值:正零和負零、+Infinity和-Infinity(正無窮大或負無窮大)、NaN(非數(shù)字值Not-a-Number)。6.字符類型用來表達字符數(shù)據(jù)常量時,共有以下幾種不同的表達方式。(1)用單引號將單一個字符涉及起來,例如:'A'、'n'、'u'。(2)用本來的數(shù)值編碼來表達字符數(shù)據(jù)常量,例如:'a'是97,'v'是118。(3)還可以直接通過十進制轉(zhuǎn)義符(前綴\x)或Unicode表達法(前綴\u)表達字符數(shù)據(jù)常量,例如:'\x0032'、'\u5495'。(4)C#提供了轉(zhuǎn)義符,用來在程序中指代特殊的控制字符:(見p36)\’\’’\\\0\r\t7.字符串類型字符串類型是一個char類型的序列。定義一個字符串的語法如下:string變量名[="字符串值"];例:stringstr;stringstr=“c#”;stringstr=Console.ReadLine();8.布爾類型布爾類型數(shù)據(jù)用于表達邏輯真和邏輯假,布爾類型的類型標記符是bool。布爾類型只有兩個值:true和false。通常占用1個字節(jié)的存儲空間布爾類型尚有一個特點:不能進行數(shù)據(jù)類型轉(zhuǎn)換。9.枚舉類型枚舉類型是一種用戶自定義的數(shù)值類型,它提供了一種簡便可以創(chuàng)建一組有結(jié)構(gòu)的符號來表達常量值,有助于程序設(shè)計人員更好地調(diào)試和維護程序。1)枚舉類型的定義枚舉定義用于定義新的枚舉類型。枚舉聲明以關(guān)鍵字enum開始,然后定義枚舉的名稱、可訪問性、基類型和成員。語法如下:[訪問修飾符]enum枚舉標記名[:枚舉基類型]默認的基類型為int{枚舉成員[=整型常數(shù)],[枚舉成員[=整型常數(shù)],…]}[;]枚舉成員不能同名2)枚舉成員的賦值在定義的枚舉類型中,每一個枚舉成員都有一個常量值與其相應(yīng),默認情況下枚舉的基類型為int,并且規(guī)定第一個枚舉成員的取值為0,它后面的每一個枚舉成員的值加1遞增。(1)假如某一枚舉成員賦值了,那么枚舉成員的值就以賦的值為準。在它后面的每一個枚舉成員的值加1遞增,直到下一個賦值枚舉成員出現(xiàn)為止。(2)每個枚舉成員都有一個關(guān)聯(lián)的常量值。該值的類型是包含該值的枚舉的基類型。每個枚舉成員的常量值必須在該枚舉的基類型的范圍內(nèi)。(3)多個枚舉成員可以共享相同的常量值。3)枚舉成員的訪問在C#中可以通過枚舉名和枚舉變量這兩種方式來訪問枚舉成員。(1)通過枚舉名訪問枚舉成員的形式如下:枚舉名.枚舉成員;(2)在通過枚舉變量訪問枚舉成員之前,一方面要定義一個枚舉類型變量。語法如下:枚舉類型名變量名;然后再通過枚舉變量訪問枚舉成員,語法如下:枚舉變量名.枚舉成員10.結(jié)構(gòu)類型結(jié)構(gòu)類型也是一種用戶自定義的數(shù)值類型,它是指一組由各種不同數(shù)據(jù)類型的相關(guān)數(shù)據(jù)信息組合在一起而形成的組合類型。把一系列相關(guān)的變量組織成為一個單一實體的過程,稱為生成結(jié)構(gòu)的過程。這個單一實體的類型就叫做結(jié)構(gòu)類型。1)結(jié)構(gòu)的定義結(jié)構(gòu)的定義語法如下:[訪問修飾符]struct結(jié)構(gòu)標記名[:基接口名列表]{//結(jié)構(gòu)成員定義}說明:(1)結(jié)構(gòu)成員涉及各種數(shù)據(jù)類型的變量、構(gòu)造函數(shù)、方法、屬性、索引器。

(2)結(jié)構(gòu)可以實現(xiàn)接口。舉例1:結(jié)構(gòu)的定義structjudge{stringname;floatscore;}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)變量訪問結(jié)構(gòu)成員,語法如下:結(jié)構(gòu)變量名.結(jié)構(gòu)成員;舉例2:結(jié)構(gòu)類型變量的定義judgejudge1;judge1.name=Console.ReadLine();3)結(jié)構(gòu)與類的區(qū)別(1)兩者的類型不同,結(jié)構(gòu)是數(shù)值類型,類是引用類型。(2)結(jié)構(gòu)的靜態(tài)字段可以初始化,結(jié)構(gòu)實例字段聲明還是不能使用初始值設(shè)定項,而類都可以。(3)結(jié)構(gòu)不能聲明默認構(gòu)造函數(shù)(沒有參數(shù)的構(gòu)造函數(shù))或析構(gòu)函數(shù),也就是說結(jié)構(gòu)可以聲明構(gòu)造函數(shù),但它們必須帶參數(shù),而類都可以。(4)結(jié)構(gòu)的實例化可以不使用new運算符,而類都不可以而類的實例化都必須使用new運算符

。(5)一個結(jié)構(gòu)不能從另一個結(jié)構(gòu)或類繼承,并且不能作為一個類的基。所有結(jié)構(gòu)都直接繼承自System.ValueType,而類繼承自System.Object。(ValueType派生自O(shè)bject,最終基類都是Object。)如何選擇使用結(jié)構(gòu)還是類,可以參照以下幾點。(1)堆棧的空間有限,對于大量的邏輯的對象,創(chuàng)建類要比創(chuàng)建結(jié)構(gòu)好一些。(2)結(jié)構(gòu)表達如點、矩形和顏色這樣的輕量對象,例如(3)在表現(xiàn)抽象和多級別的對象層次時,類是最佳的選擇。(4)大多數(shù)情況下該類型只是一些數(shù)據(jù)時,結(jié)構(gòu)是最佳的選擇。11.類型轉(zhuǎn)換在程序設(shè)計中,有時要進行數(shù)據(jù)類型的互相轉(zhuǎn)換,如被賦值的變量或方法的形式參數(shù)的類型與實際的對象類型不同,就需要進行類型轉(zhuǎn)換。

C#中有兩種轉(zhuǎn)化方式:隱式轉(zhuǎn)換和顯示轉(zhuǎn)換。當發(fā)生類型轉(zhuǎn)換時,被賦值的變量或方法的形參的類型稱為目的類型,而實際對象的類型稱為源類型。1)隱式轉(zhuǎn)換當發(fā)生類型轉(zhuǎn)換時,假如在代碼中沒有明確指定目的類型,則稱為隱式轉(zhuǎn)換。也就是說隱式轉(zhuǎn)換是系統(tǒng)默認的、不需要加以聲明就可以進行的轉(zhuǎn)換。在隱式轉(zhuǎn)換過程中,編譯器不需要對轉(zhuǎn)換進行具體的檢查就能安全地執(zhí)行轉(zhuǎn)換。小類型->大類型安全的轉(zhuǎn)換(不會丟失數(shù)據(jù))系統(tǒng)自動完畢注意:(1)從int、uint或long到float的轉(zhuǎn)換以及從long到double的轉(zhuǎn)換的精度也許會減少,但數(shù)值大小不受影響。(2)不存在到char類型的隱式轉(zhuǎn)換。(3)不存在浮點型與decimal類型之間的隱式轉(zhuǎn)換。2)顯式轉(zhuǎn)換當發(fā)生類型轉(zhuǎn)換時,假如在代碼中明確指定目的類型,則稱為顯式轉(zhuǎn)換。顯式轉(zhuǎn)換也稱為強制型轉(zhuǎn)換,一般在不存在該類型的隱式轉(zhuǎn)換時才使用。語法格式如下:(類型標記符)表達式這樣就可以將表達式的值的數(shù)據(jù)類型轉(zhuǎn)換為類型標記符的類型。例如:(int)6.143//把float類型的6.143轉(zhuǎn)換為int類型大類型->小類型不安全的轉(zhuǎn)換(也許丟失數(shù)據(jù))顯式聲明3)負責數(shù)據(jù)類型轉(zhuǎn)換的Convert類Convert類用于將一個基本數(shù)據(jù)類型轉(zhuǎn)換為另一個基本數(shù)據(jù)類型,返回與指定類型的值等效的類型;受支持的源類型是Boolean、Char、SByte、Byte、Int16、Int32、Int64、UInt16、UInt32、UInt64、Single、Double、Decimal、DateTime和String。。屬于顯示轉(zhuǎn)換常用于不同類型之間的數(shù)據(jù)轉(zhuǎn)換(1)從某數(shù)據(jù)類型到它自身的轉(zhuǎn)換只返回該數(shù)據(jù)類型,不實際執(zhí)行任何轉(zhuǎn)換。(2)無法產(chǎn)生故意義的結(jié)果的轉(zhuǎn)換引發(fā)InvalidCastException(指定的轉(zhuǎn)換無效)的異常,不實際執(zhí)行任何轉(zhuǎn)換。下列轉(zhuǎn)換會引發(fā)異常:從Char轉(zhuǎn)換為Boolean、Single、Double、Decimal或DateTime,以及從這些類型轉(zhuǎn)換為Char;尚有從DateTime轉(zhuǎn)換為除String之外的任何類型,以及從任何類型(String除外)轉(zhuǎn)換為DateTime。(3)任何數(shù)據(jù)類型(上面描述的數(shù)據(jù)類型除外)都可以與任何其他數(shù)據(jù)類型進行互相轉(zhuǎn)換。4)數(shù)據(jù)類型轉(zhuǎn)換的Parse()方法每個數(shù)值數(shù)據(jù)類型都包含一個Parse()方法,它允許將字符串轉(zhuǎn)換成相應(yīng)的數(shù)值類型。例如:strings1=9,s2=9.423;intm=int.Parse(s1);//將s1轉(zhuǎn)換成整數(shù)類型Floatn=float.Parse(s2);//將s2轉(zhuǎn)換成浮點類型Random類中next方法的使用例子:Randomrd=newRandom();intn=rd.Next(100,500)這樣N就是一個100到500之間的一個隨機數(shù)。Math類中sqrt方法的使用Math.Sqrt(常量、變量或表達式);返回指定數(shù)字的平方根。運算符是表達各種不同運算的符號。表達式是由變量、常量、數(shù)值和運算符組成的,是用運算符將運算對象連接起來的運算式。表達式在通過一系列運算后得到的結(jié)果就是表達式的結(jié)果,結(jié)果的類型是由參與運算的操作數(shù)據(jù)的數(shù)據(jù)類型決定的。C#語言中有豐富的運算符。在C#中運算符的種類分為以下幾類。1.算術(shù)運算符算術(shù)運算符用于各類數(shù)值運算,涉及加(+)、減(-)、乘(*)、除(/)、求余(或稱模運算,%)、自增(++)、自減(--)共7種。其中%是求余運算,例如:“x=7%3”,則x的值為1,由于7/3的余數(shù)為1。由算術(shù)運算符將運算對象連接起來的式子叫做算術(shù)表達式。有一些特殊的運算,例如開方、平方,C#沒有提供相應(yīng)的算術(shù)運算符。但在System命名空間里的Math類提供了這樣的運算。常用的方法有以下幾種。(1)Math.Abs(數(shù)據(jù)類型x):返回x的絕對值。(2)Math.pow(doublex,doubley):返回x的y次方。(3)Math.sqrt(doublex):返回x的開根號值。尚有一種產(chǎn)生隨機數(shù)的Random類,它的方法要用Random類的對象來調(diào)用。常用的方法有以下幾種。(1)Next():返回一個整數(shù)的隨機數(shù)。(2)Next(intmaxvalue):返回小于指定最大值的正隨機數(shù)。(3)Next(intminvalue,intmaxvalue):返回一個大于等于minvalue且小于maxvalue的整數(shù)隨機數(shù)。(4)NextDouble():返回一個0.0~1.0之間的double精度的浮點隨機數(shù)。2.關(guān)系運算符關(guān)系運算符用于比較運算,比較兩個值的大小。關(guān)系運算符涉及大于(>)、小于(<)、等于(==)、大于等于(>=)、小于等于(<=)和不等于(!=)6種。關(guān)系運算的結(jié)果類型是布爾類型。假如關(guān)系運算兩邊的運算對象是布爾類型的對象,那么true等于true,false等于false,而true是大于false的。由關(guān)系運算符將運算對象(表達式)連接起來的式子叫做關(guān)系表達式。3.邏輯運算符邏輯運算符用于邏輯運算,涉及與(&&)、或(||)、非(!)共3種。邏輯運算的結(jié)果類型是布爾類型,并且邏輯運算兩邊的運算對象的數(shù)據(jù)類型都為布爾類型。與運算的結(jié)果為:只有兩個運算對象都為true時,結(jié)果才為true;只要有一個是false,結(jié)果就為false?;蜻\算的結(jié)果為:兩個運算對象中只要有一個為true時,結(jié)果就為true;只有兩個運算對象都是false,結(jié)果才為false。非運算的結(jié)果是原運算對象的逆:假如原運算對象是true,則運算結(jié)果為false;假如原運算對象是false,則運算結(jié)果為true。由邏輯運算符將運算對象(邏輯值或表達式)連接起來的式子叫做邏輯表達式。4.位操作運算符參與位操作運算的量,按二進制位進行運算。位操作運算符涉及位非(~)、位與(&)、位或(|)、位異或(^)、左移(<<)、右移(>>)共6種。1)位邏輯非運算位邏輯非運算是單目的,只有一個運算對象。位邏輯非運算按位對運算對象的值進行非運算,即:假如某一位等于0,就將其轉(zhuǎn)變?yōu)?;假如某一位等于1,就將其轉(zhuǎn)變?yōu)?。例如,對二進制的10010001進行位邏輯非運算,結(jié)果等于01101110,用十進制表達就是~145等于110;對二進制的01010101進行位邏輯非運算,結(jié)果等于10101010。用十進制表達就是~85等于176。2)位邏輯與運算位邏輯與運算是將兩個運算對象按位進行與運算。與運算的規(guī)則是:1與1等于1,1與0等于0。例如,10010001(二進制)&11110000等于10010000(二進制)。3)位邏輯或運算位邏輯或運算是將兩個運算對象按位進行或運算?;蜻\算的規(guī)則是:1或1等1,1或0等于1,0或0等于0。例如,10010001(二進)|11110000(二進制)等于11110001(二進制)。4)位邏輯異或運算位邏輯異或運算是將兩個運算對象按位進行異或運算。異或運算的規(guī)則是:1異或1等于0,1異或0等于1,0異或0等于0。即:相同得0,相異得1。例如,10010001(二進制)^11110000(二進制)等于01100001(二進制)。5)位左移運算位左移運算是將整個數(shù)按位左移若干位,左移后空出的部分填0。例如,8位的byte型變量bytea=0x65(即二進制的01100101),將其左移3位(a<<3)的結(jié)果是0x27(即二進制的00101000)6)位右移運算位右移運算將整個數(shù)按位右移若干位,右移后空出的部分填0。例如,8位的byte型變量bytea=0x65(即二進制的01100101)將其右移3位(a>>3)的結(jié)果是0x0c(即二進制的00001100)。5.賦值運算符賦值運算符用于賦值運算,就是將一個數(shù)據(jù)賦予一個變量,它分為3類:(1)簡樸賦值(=)、(2)復(fù)合算術(shù)賦值(+=,-=,*=,/=,%=)(3)復(fù)合位運算賦值(&=,|=,^=,>>=,<<=)共11種。算術(shù)表達式:由賦值運算符將運算對象(變量和表達式)連接起來的式子。6.條件運算符條件運算符是一個三目運算符,用于條件求值(?:)。語法如下:邏輯表達式?語句1:語句2;說明:上述表達式先判斷邏輯表達式是true,還是false。假如是true,則執(zhí)行語句1;假如是false,則執(zhí)行語句2。由條件運算符和表達式組成的式子叫做條件表達式。7.逗號運算符用于把若干表達式組合成一個表達式(,)。8.特殊運算符有括號()、下標[]等幾種。9.其他轉(zhuǎn)換用運算符1)asas運算符用于執(zhí)行引用類型的顯式類型轉(zhuǎn)換。假如要轉(zhuǎn)換的類型與指定類型兼容,轉(zhuǎn)換就會成功;假如類型不兼容,則返回null。語法如下:表達式as類型例如:objecto1=”SomeString”;objecto2=5;strings1=o1asstring;//類型兼容s1=”SomeString”strings2=o2asstring;//s2=null2)isis運算符用于檢核對象的類型是否與給定類型兼容(對象是該類型,或是派生于該類型)。語法如下:表達式is類型例如:inti=10;boolx=iisint;//x=true3)sizeofsizeof運算符用于獲得值類型的大小(以字節(jié)為單位)。語法如下:sizeof(類型標記符)說明:sizeof運算符僅合用于值類型,而不合用于引用類型。sizeof運算符僅可用于unsafe模式。例如:unsafe{Console.WriteLine(“{0}”,sizeof(int));//結(jié)果是4,每個int類型變量占4個字節(jié)}4)checked和uncheckedchecked和unchecked運算符用來控制整數(shù)類型算術(shù)運算和互相轉(zhuǎn)換的溢出檢查。語法如下:checked(表達式)unchecked(表達式)說明:checked運算符用來強制編譯器檢查是否溢出的問題;unchecked運算符用來強制編譯器不檢查這方面的問題。10.運算符的優(yōu)先級一個表達式中往往包含多種運算符,那么哪個運算符先執(zhí)行,哪個運算符后執(zhí)行呢?在

C#中,把每個運算符設(shè)立成不同的級別來決定運算符執(zhí)行的先后順序,這個級別就叫做運算符的優(yōu)先級。運算符的優(yōu)先級高的就優(yōu)先執(zhí)行,運算符的優(yōu)先級低的就后執(zhí)行。第3章:c#程序設(shè)計C#程序設(shè)計中有三大程序結(jié)構(gòu),分別為:順序結(jié)構(gòu)選擇結(jié)構(gòu)循環(huán)結(jié)構(gòu)這3種程序結(jié)構(gòu)都是可以嵌套、組合使用的。順序結(jié)構(gòu)是由一系列的語句所構(gòu)成的,其中任何一條語句都會被執(zhí)行一次,并且執(zhí)行的順序是由程序的第一行一直執(zhí)行到結(jié)束為止。選擇結(jié)構(gòu)可以讓程序在執(zhí)行時可以選擇不同的操作,那么選擇的標準是根據(jù)指定的條件是否成立而擬定的。C#中有以下幾種語句來實現(xiàn)選擇結(jié)構(gòu)。1.if語句if語句根據(jù)條件判斷該執(zhí)行哪個選擇,可提供一種、兩種或多種選擇,但每次只會執(zhí)行一個選擇。(1)簡樸的if語句,提供一種選擇,語法如下:if(條件){語句序列}//當滿足條件,就執(zhí)行{語句序列},否則跳過if語句,執(zhí)行if語句后面的程序.(2)if-else語句,提供兩種選擇,語法如下:if(條件){語句序列1} //當滿足條件時執(zhí)行else{語句序列2} //當不滿足條件時執(zhí)行(3)elseif語句,提供多種選擇,語法如下:if(條件1){語句序列1}//當滿足條件1時執(zhí)行,然后執(zhí)行elseif語句塊后面的程序elseif(條件2){語句序列2} //當滿足條件2時執(zhí)行,然后執(zhí)行elseif語句塊后面的程序elseif(條件3){語句序列3} //當滿足條件3時執(zhí)行,然后執(zhí)行elseif語句塊后面的程序… //還可以加任意個“elseif(條件){語句序列}”else{語句序列n+1} //當所有條件都不滿足時執(zhí)行2.switch語句switch語句也是提供多種選擇的語句。語法如下:switch(表達式){case也許性的值1:語句序列1[break;]case也許性的值2:語句序列2[break;]...;[default:語句序列n+1break;]}if(score>=90)Console.WriteLine("優(yōu)秀!");elseif(score>=80)Console.WriteLine("良好!");elseif(score>=70)Console.WriteLine("一般!");elseif(score>=60)Console.WriteLine("及格!");elseConsole.WriteLine("不合格!");if(score>=90)c=‘a(chǎn)’;elseif(score>=80)c=‘b’;elseif(score>=70)c=‘c’;elseif(score>=60)c=‘d’;elsec=‘e’;switch(c){case‘a(chǎn)’:Console.WriteLine("優(yōu)秀!");break;case‘b’:Console.WriteLine("良好!");break;case‘c’:Console.WriteLine("一般!");break;case‘d’:Console.WriteLine("一般!");break;case‘e’:Console.WriteLine("一般!");break;執(zhí)行switch語句的環(huán)節(jié)為:(1)當代碼執(zhí)行到此語句時,先執(zhí)行switch后面()中的表達式。(2)然后將表達式的運算結(jié)果與{}中case后面“也許性的值”逐個匹配,假如與某個“也許性的值”匹配成功,則進入相相應(yīng)的case代碼段,假如匹配都不成功,則進入default語句,執(zhí)行默認代碼段。(3)假如沒有default語句,則跳出switch語句。其中,每個case代碼段內(nèi)都應(yīng)當帶有一個break語句,用來從當前選擇中跳出,假如沒有break語句,則不跳出選擇,執(zhí)行case后面的語句。1.Checked屬性Checked屬性是單選按鈕、復(fù)選框的一個屬性,它表達單選按鈕、復(fù)選框是否被選中。true表達單選按鈕、復(fù)選框被選中,false表達未被選中。2.Enabled屬性Enabled屬性允許在運營時使窗體和控件成為有效或無效。有效為true,無效為false。3.CheckedChanged事件當Checked屬性值改變時,觸發(fā)CheckedChanged事件。當選中“普通會員”單選按鈕時,就觸發(fā)了它的CheckedChanged事件,普通會員是不可選擇“贈送禮品”的,所以設(shè)立“贈送禮品”復(fù)選框的Enabled屬性為false。同理當選中“VIP”單選按鈕時,就觸發(fā)了它的CheckedChanged事件,VIP是可以選擇“贈送禮品”的,所以設(shè)立“贈送禮品”復(fù)選框的Enabled屬性為true。循環(huán)結(jié)構(gòu)是在給定條件成立時,反復(fù)執(zhí)行某程序段,直到條件不成立為止。給定的條件稱為循環(huán)條件,反復(fù)執(zhí)行的程序段稱為循環(huán)體。1.while語句while語句先計算表達式的值,值為true則執(zhí)行循環(huán)體;反復(fù)執(zhí)行上述操作,直到表達式的值為false時止。語法如下:while(表達式){循環(huán)體}執(zhí)行while語句的環(huán)節(jié)為:(1)執(zhí)行while后面()中的表達式;(2)當表達式的運算結(jié)果為true,則執(zhí)行循環(huán)體,否則跳過環(huán)節(jié)(3),直接執(zhí)行環(huán)節(jié)(4);(3)反復(fù)執(zhí)行(1)、(2)環(huán)節(jié),直到表達式的運算結(jié)果為false時止;(4)執(zhí)行while語句塊后面的代碼。說明:(1)

while語句中的表達式一般是關(guān)系表達式或邏輯表達式,只要表達式的值為true即可繼續(xù)循環(huán);

(2)應(yīng)注意循環(huán)條件的選擇以避免死循環(huán);

(3)若循環(huán)體中又具有“循環(huán)語句”,則稱為嵌套的循環(huán)語句,也稱多重循環(huán)。2.do-while語句do-while語句先執(zhí)行循環(huán)體語句一次,再判別表達式的值,若為true則繼續(xù)循環(huán),否則終止循環(huán)。語法如下:do{循環(huán)體}while(表達式);說明:(1)

do-while語句和while語句的區(qū)別在于do-while是先執(zhí)行后判斷,因此do-while至少要執(zhí)行一次循環(huán)體,而while是先判斷后執(zhí)行,假如條件不滿足,則一次循環(huán)體語句也不執(zhí)行;(2)在if語句、while語句中,表達式后面都不能加分號,而在do-while語句的表達式后面則必須加分號;(3)

do-while語句也可以組成多重循環(huán),并且也可以和while語句互相嵌套。for語句和while語句同樣,也是一種循環(huán)語句,用來反復(fù)執(zhí)行一段代碼。兩個循環(huán)語句的區(qū)別就是使用方法不同。for語句的使用語法如下:for(表達式1;表達式2;表達式3){循環(huán)體}執(zhí)行for語句的環(huán)節(jié)為:(1)計算表達式1的值;(2)計算表達式2的值,若值為true,則執(zhí)行循環(huán)體一次,否則跳出循環(huán);(3)計算表達式3的值,轉(zhuǎn)回第(2)步反復(fù)執(zhí)行。說明:表達式1通常用來給循環(huán)變量賦初值,一般是賦值表達式。也允許在for語句外給循環(huán)變量賦初值,此時可以省略該表達式。(2)表達式2通常是循環(huán)條件,一般為關(guān)系表達式或邏輯表達式。(3)表達式3通??捎脕硇薷难h(huán)變量的值,一般是賦值語句。(4)這3個表達式都可以是逗號表達式,即每個表達式都可由多個表達式組成。3個表達式都是任選項,都可以省略但分號間隔符不能少。如for(;表達式;表達式)省去了表達式1,for(表達式;;表達式)省去了表達式2,for(表達式;表達式;)省去了表達式3,for(;;)省去了所有表達式。(5)在整個for循環(huán)過程中,表達式1只計算一次,表達式2和表達式3則也許計算多次。循環(huán)體也許執(zhí)行多次,也也許一次都不執(zhí)行。2.使用break/continue控制循環(huán)在while和for循環(huán)語句中,假如滿足條件,則循環(huán)會一直繼續(xù)下去,那么該如何自動控制循環(huán)的中斷和繼續(xù)呢?C#提供了break/continue語句,用來控制循環(huán)的執(zhí)行。break可以中斷當前正在執(zhí)行的循環(huán),并跳出整個循環(huán)。continue表達中斷當前本次的循環(huán),而后面的代碼無需執(zhí)行,并進行下一次表達式的計算與判斷,以決定是否重新開始下一次循環(huán)。break語句還可以和switch語句配合使用,以在達成某種條件時從switch語句跳出。break語句語法如下:break;continue語句語法如下:continue;例:intn=0,m=0;for(i=1;i<=10;i++){if(i%2==0)continue;n++;}for(i=1;i<=10;i++){if(i%2==0)continue;n++;}第4章:方法采用兩種方法解決本案例提出的問題。(1)從現(xiàn)有知識出發(fā)解決輸出圣誕樹問題,不使用方法,把所有的代碼都編寫在Main中。(2)使用方法來解決輸出圣誕樹問題。將使得“打印等腰三角形”這個基本操作一次編寫,多次使用,提高了代碼復(fù)用率也提高了程序的可讀性。1.使用方法的意義將一個復(fù)雜的程序分解成若干個相對獨立的方法,使得程序變得簡練并且結(jié)構(gòu)清楚。方法可以被多次調(diào)用,反復(fù)執(zhí)行,這樣大大地提高了代碼的復(fù)用率。此外,程序的分塊設(shè)計也便于開發(fā)人員的分工合作、便于調(diào)試和維護,從而大大提高了編程效率。2.方法的定義方法也稱為函數(shù),是一組程序代碼的有機集合,可以實現(xiàn)一個獨立的功能。可以把程序中多次用到的某個任務(wù)定義為方法。1)方法的定義方法的定義格式為:[修飾符]返回值類型方法名([參數(shù)列表]){方法體;[return(z)];//返回結(jié)果z}2)方法名方法名是用戶給方法取的名字,可以是任何一個有效的C#標記符。作為編程的良好習慣,方法的命名應(yīng)盡量符合以下規(guī)則。[修飾符]返回值類型方法名([參數(shù)列表]){方法體;[return(z)];//返回結(jié)果z}3)方法的參數(shù)列表方法可以接受參數(shù),這事實上是方法與外界“通信”的方式。方法定義時參數(shù)列表由0個、1個或多個參數(shù)組成。4)方法的返回值類型方法的返回值就是方法的輸出,是一個方法執(zhí)行完畢后返回給調(diào)用者的數(shù)據(jù),它可以是各種數(shù)據(jù)類型。假如方法沒有返回值,應(yīng)定義為void類型。[修飾符]返回值類型方法名([參數(shù)列表]){方法體;[return(z)];//返回結(jié)果z}5)

return語句方法的返回值由return語句帶回,return語句在賦予方法的調(diào)用者返回值的同時退出方法。6)方法的修飾符修飾符用于指定方法的訪問權(quán)限,有public、private、static等,默認為private。用static修飾的方法是靜態(tài)方法。7)方法體用“{”和“}”括起來的若干語句組成方法體。方法體中可以沒有任何語句,但大括號不可以省略。[修飾符]返回值類型方法名([參數(shù)列表]){方法體;[return(z)];//返回結(jié)果z}例:staticintMax(inta,intb){intc;c=a+b;returnc;}3.方法的調(diào)用1)方法調(diào)用時參數(shù)的傳遞A主調(diào)方法的參數(shù)稱為實際參數(shù)(簡稱實參)。B被調(diào)方法的參數(shù)稱為形式參數(shù)(簡稱形參)。C方法調(diào)用時實參被傳遞給相應(yīng)位置的形參,完畢方法的輸入。相應(yīng)地,方法執(zhí)行結(jié)束時,通過return語句把“產(chǎn)品”返回給主調(diào)方法,完畢方法的產(chǎn)出。注意:(1)參數(shù)傳遞時實參與形參必須個數(shù)相等,類型一致,按順序一一相應(yīng)。(2)實參可以是常量、變量或表達式子,形參必須是變量。2)方法的調(diào)用方式方法有以下3種調(diào)用方式。(1)方法語句。如:printMax(x,y);(2)方法表達式。如:z=max(x,y);(3)方法參數(shù)。如:Max(9,Max(5,11));3)方法的調(diào)用過程例:staticvoidmain(){intx,y,z;x=int.parse(Console.ReadLine());y=int.parse(Console.ReadLine());z=Max(x,y);Console.Writeline(“max={0}”,z);}4.IDE使用進階1.方法的嵌套調(diào)用嵌套調(diào)用,就是指在調(diào)用一個方法的過程中又調(diào)用另一個方法2.求最大公約數(shù)的數(shù)學(xué)方法3.求最小公倍數(shù)的數(shù)學(xué)方法例:求5!usingSystem;usingSystem.Collections.Generic;usingSystem.Text;namespaceExample4_3{classProgram{staticintFact(intn)//求階乘的方法{intf;if(n==1||n==0)return(1);elsef=Fact(n-1)*n;returnf;}staticvoidMain()//主方法{Console.Write("請輸入n:");intn=Convert.ToInt32(Console.ReadLine());Console.WriteLine("{0}!={1}",n,Fact(n));Console.ReadLine();}1.方法的遞歸調(diào)用一個方法直接或者間接調(diào)用自己稱為遞歸,同時將該方法稱為遞歸方法。2.使用遞歸的條件一個問題要用遞歸的方法來解決,需滿足以下條件。(1)原問題可轉(zhuǎn)化為一個新問題,而這個新問題與原問題有相同的解決方法。(2)新問題可繼續(xù)這種轉(zhuǎn)化,在轉(zhuǎn)化過程中問題有規(guī)律地遞增或遞減。(3)在有限次轉(zhuǎn)化后,問題得到解決,即具有遞歸結(jié)束的條件。3.遞歸調(diào)用的過程遞歸調(diào)用的過程可分為如下兩個階段。第一個階段稱為“回推”。(2)第二個階段稱為“遞推”。比較前后兩段代碼可以看出,區(qū)別重要有如下兩點。(1)定義Swap()方法時,方法頭的設(shè)計有區(qū)別,修改后的代碼使用了ref關(guān)鍵字,而修改前的代碼沒有使用。修改前的代碼:staticvoidSwap(inta,intb)修改后的代碼:staticvoidSwap(refinta,refintb)(2)調(diào)用Swap()方法時,調(diào)用語句有區(qū)別,修改后的代碼使用了ref關(guān)鍵字,而修改前的代碼沒有使用。修改前的代碼:Swap(x,y);修改后的代碼:Swap(refx,refy);1.參數(shù)的傳值方式參數(shù)以傳值方式傳遞,被調(diào)用的方法將接受實參的一個副本,參數(shù)傳遞后,形參和實參各占不同的內(nèi)存單元。假如對被調(diào)用方法中的實參副本進行修改,不會影響原始實參的值。2.參數(shù)的傳引用方式1)

ref引用參數(shù)參數(shù)以傳引用方式傳遞時,形參將不創(chuàng)建新的存儲位置,形參和實參共用存儲單元,這時形參相稱于它所相應(yīng)的實參的一個別名,假如在被調(diào)用的方法中對形參進行修改,事實上就是對實參進行了修改,因此當方法調(diào)用完畢時,方法中對形參的修改直接影響了實參。2)out輸出參數(shù)除了ref關(guān)鍵字外,C#還提供了out關(guān)鍵字用于參數(shù)的引用傳遞。ref參數(shù)必須在方法被調(diào)用前進行賦值,但在實際的應(yīng)用中,有時僅僅需要調(diào)用方法計算出某個結(jié)果返回給調(diào)用者,而不需要調(diào)用者對這個參數(shù)進行初始化。在這種情況下可以使用out參數(shù),out參數(shù)僅用于輸出方法的某個結(jié)果。ref參數(shù)和out參數(shù)比較:ref參數(shù)和out參數(shù)都可以將參數(shù)的更改保存,但ref側(cè)重于修改,out側(cè)重于輸出。1.為什么需要重載C#提供了重載機制,允許給多個功能相似的方法取相同的名字,在調(diào)用時由系統(tǒng)決定應(yīng)當調(diào)用哪個方法。2.什么是方法重載兩個或兩個以上的一組方法,假如方法名相同,使用不同的參數(shù)列表(參數(shù)的個數(shù)或類型或順序不同)來定義,稱為方法重載。3.系統(tǒng)如何擬定該調(diào)用哪個方法調(diào)用品有重載的方法時,系統(tǒng)會根據(jù)參數(shù)個數(shù)或者參數(shù)類型的不同來區(qū)分。具體調(diào)用時,由編譯器根據(jù)實參和形參的類型及個數(shù)的最佳匹配,自動擬定調(diào)用哪個方法。第5章:類與對象對象涉及:對象名一組屬性一組操作(行為)屬性描述對象的靜態(tài)特性,表達對象的狀態(tài),是類的數(shù)據(jù)成員;操作(或稱方法)描述對象的行為,是對象的動態(tài)特性,通常是對數(shù)據(jù)成員進行操作的方法,稱為成員函數(shù)。現(xiàn)實生活中的對象往往可以根據(jù)共性進行歸類,一組具有共同特性和行為的相似對象歸為一類。程序設(shè)計中,把一組相似對象的共同特性抽象出來并存儲在一起,就形成了類。從具體對象到類事實上是一個概括的過程,把對象的共同特性抽取出來,形成了類,假如再對這個類用計算機語言加以描述,就形成了程序中的類,這個過程稱為抽象。1.封裝封裝事實上是在類的設(shè)計過程中完畢的,類對外部提供統(tǒng)一的接口方法,類的內(nèi)部相稱于一個黑盒,類的使用者并不知道類的內(nèi)部實現(xiàn)細節(jié),只要知道怎么調(diào)用這些接口方法就夠了。2.繼承一個類從另一個類獲得了已有的基本特性,并在此基礎(chǔ)上增長了自身的一些特殊特性。3.多態(tài)概念:在面向?qū)ο蟪绦蛟O(shè)計中,多態(tài)是指用戶對一個對象進行一個操作,但具體的動作卻取決于這個對象的類型,即對不同的對象執(zhí)行相同的操作會產(chǎn)生不同的結(jié)果。分類:分為編譯時多態(tài)和運營時多態(tài)兩種。4.消息通信對象具有一定的獨立性和自治性,但對象和對象之間不是彼此獨立的,它們通過消息進行通信,一個程序可以被看作是對象之間互相作用的結(jié)果。1.類的定義類定義的一般格式如下:class<類名>{private<私有的字段、方法、屬性>protected<保護的字段、方法、屬性>public<公有的字段、方法、屬性>}類體中包含字段、方法、屬性等成員。其中字段是“存儲信息”的成員;方法是用于描述某類對象共同行為的成員,是“做事情”的成員例:定義一個車輛類(有三個變量)classVehicle{publicintpassengers;//乘客數(shù)publicintfuelcap;//所耗燃料publicintmpg;//每公里耗油量}2.對象的定義與使用1)對象的聲明與實例化類名對象名; //聲明對象對象名=new類名(); //實例化對象例如,創(chuàng)建一個名為catBobi的貓類對象:(1)CatcatBobi;catBobi=newCat();(2)CatcatBobi=newCat();2.對象的定義與使用2)對象的使用一個對象被創(chuàng)建后,就可以通過對象自身來獲取對象狀態(tài)或調(diào)用對象行為。調(diào)用對象成員的格式為:對象名.對象成員3.類成員的訪問修飾符表5-1類的成員的訪問修飾符及其含義4.類的屬性為什么使用屬性C#提供了一種更有效的訪問形式,既能讀寫字段,同時又保證數(shù)據(jù)成員能被更好地隱藏和保護起來呢?那就是使用屬性。屬性是類的一種特殊成員,它具有字段的形式,又具有方法的本質(zhì)。2)如何定義屬性屬性的定義格式為:修飾符類型屬性名{set{…//寫入數(shù)據(jù)}get{…//讀取數(shù)據(jù)}}get與set是C#特有的訪問器。get: 讀取訪問器,用于從對象讀取數(shù)據(jù)(只讀)。set:寫入訪問器,用于向?qū)ο髮懭霐?shù)據(jù)(只寫)。3)屬性的讀寫控制屬性的get和set訪問器并非都是必須的.假如只有g(shù)et訪問器,該屬性只可以讀取,不可以寫入;假如只有set訪問器,該屬性只能寫入,不能讀??;假如對只讀屬性進行賦值,或者讀取只寫屬性的值,都會產(chǎn)生編譯錯誤。4)在屬性中完畢更多的功能5.VS.NETIDE使用進階:假如已經(jīng)定義好了字段,想要為字段寫一個屬性,可以運用VS.NET的重構(gòu)功能很方便地實現(xiàn)。具體做法:選中要封裝的字段定義代碼,例如選中“stringvariety;”,單擊鼠標右鍵,在彈出的快捷菜單中選擇【重構(gòu)】|【封裝字段】命令,在彈出的“封裝字段”對話框的“屬性名”文本中已存在一個屬性名“Variety”,讀者可以默認也可以修改它,單擊“擬定”按鈕,可以在彈出的“預(yù)覽引用更改一封裝字段”對話框內(nèi)瀏覽代碼更改,單擊“應(yīng)用”按鈕,一個完整的“Variety”屬性定義便出現(xiàn)在相應(yīng)字段的下一行。類的成員有實例成員和靜態(tài)成員之分。類的實例成員和靜態(tài)成員最簡樸的區(qū)分方法就是看定義這些成員時是否使用了static修飾符。1.靜態(tài)字段假如在聲明字段時添加了static修飾符,該字段就成為靜態(tài)字段。靜態(tài)字段用于存儲一些屬于某個類的所有對象的信息,它是被類的全體對象共享的數(shù)據(jù)。例如:為Cat類添加一個靜態(tài)字段count,用于表達當前存在的貓對象總數(shù)。2.靜態(tài)屬性為了對外界隱藏數(shù)據(jù)的同時方便對靜態(tài)字段的訪問,往往需要使用靜態(tài)屬性。靜態(tài)屬性與靜態(tài)字段同樣不屬于任何對象,因此它們不能被對象所調(diào)用,而是由類名直接調(diào)用:類名.靜態(tài)字段名;類名.靜態(tài)屬性名;classCat{…privatestaticintcount;publicstaticintCount{set{count=value;}get{returncount;}}…}3.靜態(tài)方法假如在聲明方法時添加了static修飾符,該方法就成為靜態(tài)方法。靜態(tài)方法屬于類,只能通過類名調(diào)用,不能由對象調(diào)用。注意:靜態(tài)方法只能訪問靜態(tài)字段或?qū)傩?,不能訪問實例字段或?qū)傩浴6鴮嵗椒瓤梢栽L問實例字段也可以訪問靜態(tài)字段。靜態(tài)方法由類名直接調(diào)用:publicstaticintGetCount()//靜態(tài)方法{returncount;}Console.WriteLine("目前有{0}只貓",Cat.GetCount());1.構(gòu)造函數(shù)

什么是構(gòu)造函數(shù)

對象在實例化的時候,可以進行數(shù)據(jù)成員的設(shè)立,稱為對象的初始化;此外,類有時也需要做一些初始化工作,這些工作都由構(gòu)造函數(shù)完畢。構(gòu)造函數(shù)也稱構(gòu)造方法。格式:public構(gòu)造函數(shù)名(參數(shù)列表){構(gòu)造函數(shù)體

}如:基本特點是:(1)構(gòu)造函數(shù)名與類名相同;(2)構(gòu)造函數(shù)沒有返回值,且函數(shù)頭部不用寫“void”;(3)除了在實例化對象時由系統(tǒng)調(diào)用以及派生類構(gòu)造函數(shù)調(diào)用基類構(gòu)造函數(shù)之外,其他任何函數(shù)都不能調(diào)用它。2)構(gòu)造函數(shù)的聲明與調(diào)用publicCat(stringmyVariety,stringmyColor,floatmyWeight){variety=myVariety;hairColor=myColor;weight=myWeight;birthday=DateTime.Today;}用new運算符創(chuàng)建一個對象時,構(gòu)造函數(shù)名后所跟的參數(shù)列表就是對象的初始化列表。CatcatBobi=newCat("波斯貓","白色",2.3F);3)構(gòu)造函數(shù)的重載構(gòu)造函數(shù)可以重載,以方便程序員初始化對象。publicCat(stringmyVariety,stringmyColor,floatmyWeight){…}publicCat(floatmyWeight,stringmyVariety,stringmyColor){…}添加了這些構(gòu)造函數(shù)后,可以在Main()方法中按照如下所示的多種方式創(chuàng)建并初始化對象:CatcatBobi=newCat("波斯貓","白色",2.3F);CatcatBobi=newCat("波斯貓",2.3F,"白色");CatcatBobi=newCat(2.3F,"波斯貓","白色");4)靜態(tài)構(gòu)造函數(shù)靜態(tài)構(gòu)造函數(shù)通常用于對類的靜態(tài)字段進行初始化。為Cat類添加靜態(tài)構(gòu)造函數(shù)對count字段進行初始化。staticCat()//靜態(tài)構(gòu)造函數(shù){count=0;}靜態(tài)構(gòu)造函數(shù)有如下特點:(1)僅有一個static修飾符。(2)只對靜態(tài)字段賦初值。(3)由系統(tǒng)自動調(diào)用,一個類僅調(diào)用一次,與創(chuàng)建對象操作無關(guān)。5.析構(gòu)函數(shù)1)什么是析構(gòu)函數(shù)在對象使用結(jié)束時,可以進行一些相關(guān)的清理工作并釋放所占用的內(nèi)存空間,這個工作由析構(gòu)函數(shù)完畢。析構(gòu)函數(shù)的特點如下:(1)析構(gòu)函數(shù)的名稱與類名相同,在類名前加“~”;(2)析構(gòu)函數(shù)沒有返回值,也不能聲明為void;(3)析構(gòu)函數(shù)只有一個,不能重載;(4)析構(gòu)函數(shù)也是類的成員函數(shù)。~Cat(){Console.WriteLine("執(zhí)行了析構(gòu)函數(shù)!");}1.方法的返回值為對象方法的返回值可以是int、double等系統(tǒng)標準類型,也可以是用戶自定義的類型,兩者的用法沒什么兩樣。2.值類型變量與引用類型變量C#的數(shù)據(jù)類型分為兩大類:值類型和引用類型。1)值類型簡樸地說,值類型變量就是一個包含實際數(shù)據(jù)的量。當定義一個值類型變量時,C#會根據(jù)變量所聲明的類型分派一塊堆棧存儲區(qū)域給這個變量,然后對這個變量的讀寫就直接在這塊內(nèi)存區(qū)域進行。2)引用類型引用類型變量存儲的不是它所代表的實際數(shù)據(jù),而是該實際數(shù)據(jù)的引用(地址)。引用類型變量的賦值只賦值對象的引用,而不復(fù)制對象自身。變量num1和num2共同引用一個對象,對其中任何一個做修改,另一個都會隨之改變3)對象做方法參數(shù)由于C#的數(shù)據(jù)類型分為值類型和引用類型,傳遞參數(shù)的方式有傳值方式和傳引用方式,組合一下,C#傳遞參數(shù)有4種情況:值類型按傳值方式傳遞,值類型按傳引用方式傳遞,引用類型按傳值方式傳遞,引用類型按傳引用方式傳遞。課后習題答案:1.填空題(1)類(2)讀取,寫入,寫入,讀取(3)static,一個,類名,對象名(4)構(gòu)造函數(shù),析構(gòu)函數(shù)2.選擇題(1)D(2)A(3)B(4)D3.簡答題(1)簡述類與對象的關(guān)系。答:類是對事物的概括性定義,而對象是事物自身,是類的一個實例(instance),對象具有類所規(guī)定的特性,只能執(zhí)行類所規(guī)定的操作。打個比方,類就相稱于一個模板,而對象則是由這個模板產(chǎn)生出來的具體產(chǎn)品,一個模板可以生產(chǎn)很多產(chǎn)品,一個類可以產(chǎn)生很多對象。(2)簡述屬性與字段的區(qū)別,屬性與方法的區(qū)別。答:屬性與字段的區(qū)別:屬性可用于完畢一些控制和計算,程序員可以通過在get和set訪問器中編寫適當?shù)拇a,實現(xiàn)所需的功能,而字段不能完畢計算,只能用于存放數(shù)據(jù),屬性不一定和字段一一相應(yīng)。屬性與方法的區(qū)別:方法和屬性都能完畢計算,屬性可以作為一個特殊的方法使用,但是兩者調(diào)用方式不同,屬性像字段同樣被調(diào)用,屬性名后面沒有參數(shù)和括號(例如catBobi.HairColor),而方法被調(diào)用時方法名后面必須有括號,根據(jù)需要還可以有參數(shù)列表。(例如:catBobi.SetInfo("波斯貓","白色",2.3F);)(3)值類型與引用類型在一般賦值時有什么不同?值類型與引用類型在做函數(shù)參數(shù)時有什么不同?在傳值方式下(即沒有使用ref或out時),它們默認傳遞的分別是什么,變量值還是引用(地址)?答:值類型與引用類型在一般賦值時的不同:值類型變量間的賦值,賦的是變量值,當num1和num2是值類型變量時,執(zhí)行語句“num1=num2;”時,賦值運算符兩邊的num1和num2是兩個不同的存儲區(qū)域,改變num2的值不會影響num1;引用類型變量的賦值只賦值對象的引用,而不復(fù)制對象自身。當num1和num2是引用類型變量時,語句“num1=num2;”使變量num1和num2共同引用一個對象,對其中任何一個做修改,另一個都會隨之改變。值類型與引用類型在做函數(shù)參數(shù)時的不同:值類型變量以傳值方式傳遞時,傳遞的是變量的值,形參和實參是不同的內(nèi)存單元,形參的改變不會影響實參;對象以傳值方式傳遞,相稱于兩個引用類型變量進行賦值,傳遞的是對象的引用(地址),形參和實參共同引用一個對象,對形參做修改,實參會隨之改變。在傳值方式下(即沒有使用ref或out時),值類型默認傳遞的是變量值,引用類型默認傳遞的是引用(地址)。第6章:數(shù)組數(shù)組是值的列表,每個值存儲在數(shù)組中特定編號的位置。每個位置相應(yīng)的編號稱為索引(index)或者下標(subscript)。在C#中數(shù)組的索引通常從0開始,所以存儲在索引5的值事實上是數(shù)組中第6個值。1.數(shù)組的聲明在C#中,聲明數(shù)組的形式為:類型[]數(shù)組名;例如:double[]Score;//聲明double型數(shù)組引用int[]arr1,arr2;//聲明int型數(shù)組arr1,arr2注意:(1)

int[]是類型,變量名放在方括號后面,不可放在方括號前面;例:doubleScore[];Ⅹ(2)聲明一個數(shù)組變量不可指定數(shù)組長度。例:double[6]Score;Ⅹ2.創(chuàng)建數(shù)組對象創(chuàng)建數(shù)組就是給數(shù)組對象分派內(nèi)存。當聲明一個數(shù)組時,事實上沒有創(chuàng)建該數(shù)組,與一個類相同,必須在使用它之前創(chuàng)建數(shù)組對象,使用new運算符來創(chuàng)建數(shù)組實例,有以下3種方式。(1)聲明數(shù)組,然后創(chuàng)建數(shù)組對象。類型[]數(shù)組名;數(shù)組名=new類型[元素個數(shù)];例如:double[]Score;//聲明數(shù)組引用Score=newdouble[10];//創(chuàng)建具有10個元素的數(shù)組(2)聲明數(shù)組的同時創(chuàng)建數(shù)組對象。類型[]數(shù)組名=new類型[元素個數(shù)];類型可以是C#中的各種數(shù)據(jù)類型。注意:若創(chuàng)建數(shù)組對象時沒有對數(shù)組進行初始化,C#自動為數(shù)組元素進行初始化賦值。例如:int[]arr=newint[8];所有元素被初始化為0。(3)使用new創(chuàng)建數(shù)組對象的同時,初始化數(shù)組所有元素。類型[]數(shù)組名=new類型[]{初值表};或類型[]數(shù)組名={初值表};例如:int[]arr=newint[]{1,2,3,4};或int[]arr={1,2,3,4};3.訪問數(shù)組元素(1)訪問方式。為獲取在一個數(shù)組中保存的一個值,必須提供數(shù)組名和元素的序號(序號稱為索引或是下標),形式為:數(shù)組名[下標];如上面arr中的元素分別為:arr[0],arr[1],arr[2],arr[3]。(2)注意:①數(shù)組下標從零開始,最大下標為數(shù)組長度減1;②所有數(shù)組需在編譯時檢查是否在邊界之內(nèi),在上例中,若有arr[5]將不能訪問;③可在用戶程序中使用Length數(shù)據(jù)成員來測試數(shù)組長度,即數(shù)組名.Length。4.改變數(shù)組元素為把一個值賦給一個特定的數(shù)組元素,形式為:數(shù)組名[下標]=值;例如:arr[1]=8;//此時數(shù)組中的值為1,8,3,45.數(shù)組常用的方法System.Array類提供了許多方法,常用的方法有:(1)

Sort():用于數(shù)組元素的排序方法;(2)

Clear():將數(shù)組中某一范圍的元素設(shè)立為0或null;(3)

Clone():將數(shù)組的內(nèi)容復(fù)制到一個新數(shù)組的實體;(4)

GetLength():返回某一維數(shù)組的長度;(5)

IndexOf():返回數(shù)組值中符合指定的參數(shù)值,且是第一次出現(xiàn)。兩層循環(huán)結(jié)構(gòu)外層循環(huán)每次把操作范圍內(nèi)最大的數(shù)放到最后位置內(nèi)層循環(huán)每次把較大的數(shù)放到靠后的位置擬定每層循環(huán)的邊界外層循環(huán)n-1次 內(nèi)層循環(huán)n-1-i次C#專門提供了一種用于遍歷數(shù)組的foreach循環(huán)語句。foreach循環(huán)語句的格式為:foreach(類型變量名in表達式)嵌入語句其中,in為關(guān)鍵字,類型和變量名用于說明循環(huán)變量,表達式相應(yīng)集合,每執(zhí)行一次嵌入語句,循環(huán)變量就依次取出集合中的一個元素代入其中。如:int[]arr1=newint[]{1,2,3,4,5,6};foreach(intiinarr1){Console.WriteLine(“Valueis{0}”,

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論