




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第7章類與對(duì)象【本章導(dǎo)讀】本章通過(guò)對(duì)類和對(duì)象的學(xué)習(xí),讓讀者掌握面向?qū)ο蠓治雠c面向?qū)ο蟪绦蛟O(shè)計(jì)的概念,掌握類和對(duì)象之間的關(guān)系,學(xué)習(xí)類、類成員、構(gòu)造函數(shù)、方法重載、對(duì)象創(chuàng)建等基本知識(shí),使得具備自定義類的基本技能。在第二篇學(xué)習(xí)的Windows窗體、用戶界面控件、常用組件,都可以把他們看成一個(gè)一個(gè)的對(duì)象。在我們使用Windows窗體中的Button控件時(shí),我們通過(guò)屬性面板中的Text屬性就可以修改顯示在上面的文本,那么為什么可以達(dá)到這種功能呢?在計(jì)算機(jī)里面已經(jīng)形成了Button類,在這個(gè)類里面封裝好了一個(gè)名為Text的屬性,只要我們修改了這個(gè)屬性的值,計(jì)算機(jī)就會(huì)在按鈕的面上顯示出我們?cè)O(shè)定的值,實(shí)際上Button類中還封裝了很多在我們編制程序的時(shí)候需要的功能。7.1面向?qū)ο蠓治雠c面向?qū)ο笤O(shè)計(jì)我們編制的C#應(yīng)用程序中的類通常由我們程序員定義的類和.NETFramework類組成,而象Windows窗體中的Button控件就是.NETFramework提供的類。在本部分,我們將學(xué)習(xí)C#中自定義類和對(duì)象的相關(guān)知識(shí)。7.1面向?qū)ο蠓治雠c面向?qū)ο笤O(shè)計(jì)7.2案例:交通工具研究乘客數(shù)量、車輪數(shù)量、車牌號(hào)和車重等相關(guān)特性具有顯示自我特性的方法具有超速時(shí)警示駕駛員的功能呢個(gè)問(wèn)題:解決交通工具中客車的一些相關(guān)問(wèn)題。7.2案例:交通工具-要解決的問(wèn)題能顯示該車能乘坐的乘客的數(shù)量、車輪數(shù)量、車牌號(hào)和車本身的重量,要求每次速度調(diào)整時(shí)能顯示是否在安全行駛速度的范圍內(nèi)。本章我們將通過(guò)逐步講解來(lái)完成本客車模型及其對(duì)象的創(chuàng)建。7.3.1類的定義
在類聲明中需要使用關(guān)鍵字class,其簡(jiǎn)單的定義格式為: class類名 { 類體 }請(qǐng)思考:類是什么?為什么要?jiǎng)?chuàng)建類?怎么創(chuàng)建類?
7.3.1類的定義請(qǐng)注意:類體是以一對(duì)大括號(hào)開始和結(jié)束的,在一對(duì)大括號(hào)后面可以跟一個(gè)分號(hào),也可以省略分號(hào)類體中的成員種類較多,常見(jiàn)的有字段、屬性、方法和事件方法(Method)類的所有成員的聲明均需在類體中7.3.1類的定義-【實(shí)作任務(wù)】定義的客車類 classPasstrain//類名為Passtrain(客車) { //成員字段 //成員屬性 //成員方法 //成員事件 }定義了一個(gè)名為Passtrain的類,此時(shí)類體中未定義任何內(nèi)容。但對(duì)于我們要定義的客車類的類體應(yīng)該是不為空的,在下面我們將通過(guò)學(xué)習(xí)對(duì)客車類的字段、屬性、方法和事件逐步完善。7.3.2字段字段是類成員中最基礎(chǔ)也較重要的一個(gè)成員,是與對(duì)象或類相關(guān)聯(lián)的變量。其作用主要是用于保存與類有關(guān)的一些數(shù)據(jù)。它的聲明格式與普通變量的聲明格式基本相同,聲明位置沒(méi)有特殊要求,習(xí)慣上將字段說(shuō)明放在類體中的最前面。定義字段的基本格式為:
訪問(wèn)修飾符數(shù)據(jù)類型字段名
7.3.2字段先給出客車類的字段定義classPasstrain//類名為Passtrain(客車){//以下為成員字段----------------------------------------intweight;//此車的重量,privateintpassengers;//私有成員,標(biāo)準(zhǔn)容納乘客數(shù)publicintwheels;//公有成員,該客車的輪子數(shù) publicstringplate;//公有成員,車牌號(hào)}字段解析客車類模型Passtrain中定義了四個(gè)成員,分別用于保存客車的重量、可容納的乘客數(shù)、輪子數(shù)和車牌號(hào)。在面向?qū)ο蟪绦蛟O(shè)計(jì)中,類里面的成員在定義時(shí)一般都要加上訪問(wèn)控制修飾符,以標(biāo)志該成員在哪些范圍能夠被訪問(wèn)得到。若聲明成員時(shí)沒(méi)有使用任何修飾符,則該成員被人為是私有的(private)。聲明類中的成員時(shí),使用不同的訪問(wèn)修飾符,表示對(duì)類的訪問(wèn)權(quán)限不同,C#中常見(jiàn)的訪問(wèn)修飾符除及其意義:public訪問(wèn)不受限制,可以被任何其它類訪問(wèn)private訪問(wèn)只限于含該成員的類,及只有該類的其它成員能訪問(wèn)protected訪問(wèn)只限于含該成員的類、及該類的派生類注意:若字段定義前面的訪問(wèn)修飾符沒(méi)有寫出,則計(jì)算機(jī)會(huì)默認(rèn)認(rèn)為是私有字段private.對(duì)于公有訪問(wèn)(public)字段,我們可以通過(guò)“對(duì)象名.字段名”的形式訪問(wèn),對(duì)于私有(private)和保護(hù)(protected)是不行的,如對(duì)于Passtrain的對(duì)象pss我們可以通過(guò)語(yǔ)句pss.wheels=4;為wheels字段賦值,而字段passengers是不行的。我們經(jīng)常會(huì)看到在類前面有一個(gè)partial修飾符,該修飾符的作用允許將一個(gè)類分布到多個(gè)文件之中,在編譯時(shí)會(huì)將各個(gè)部分再組合在一起。
7.3.3屬性類字段一般定義為私有或受保護(hù)的,不容許外界訪問(wèn)。若需要外界訪問(wèn)此字段,我們可以利用本小節(jié)的屬性知識(shí),提供給外界訪問(wèn)私有或保護(hù)字段的途徑。在前面第二篇中的5.2.2小節(jié)中我們通過(guò)設(shè)計(jì)器的屬性面板如圖7.2中的Text的更改從而可以修改窗體標(biāo)題欄上的文本。采用的就是這種方法,這也是類模型設(shè)計(jì)的常見(jiàn)方法。圖7-2屬性面板7.3.3屬性C#在類中聲明屬性的語(yǔ)法格式:訪問(wèn)修飾符類型屬性名{get{return字段名;}set{字段名=value;}}7.3.3屬性注意
實(shí)際上屬性是一個(gè)或兩個(gè)代碼塊,表示一個(gè)get訪問(wèn)器或一個(gè)set訪問(wèn)器。當(dāng)讀取屬性時(shí),執(zhí)行g(shù)et訪問(wèn)器的代碼塊;當(dāng)賦予屬性一個(gè)新值時(shí),執(zhí)行set訪問(wèn)器的代碼塊。不具有set訪問(wèn)器的屬性被視為只讀屬性。不具有g(shù)et訪問(wèn)器的屬性被視為只寫屬性。同時(shí)具有這兩個(gè)訪問(wèn)器的屬性是讀寫屬性。7.3.3屬性【實(shí)作任務(wù)】客車類的屬性聲明classPasstrain//類名為Passtrain(客車){//以下為成員字段----------------------------------------intweight;//此車的重量,privateintpassengers;//私有成員,標(biāo)準(zhǔn)容納乘客數(shù)publicintwheels;//公有成員,該客車的輪子數(shù)publicstringplate;//公有成員,車牌號(hào)//以下為成員屬性----------------------------------------//以下聲明公有訪問(wèn)屬性以訪問(wèn)私有的weight成員7.3.3屬性【實(shí)作任務(wù)】客車類的屬性聲明-續(xù)
publicintWeight{get{returnweight;}//提供對(duì)weight的讀權(quán)限set{weight=value;}//提供對(duì)weight的寫權(quán)限}//以下聲明公有訪問(wèn)屬性以訪問(wèn)私有的passengers成員publicintPassengers{get{returnpassengers;}//提供對(duì)passengers的讀權(quán)限}}7.3.4方法在前面,我們學(xué)習(xí)了類成員中的字段和屬性,通過(guò)它們我們可以完成數(shù)據(jù)的存放和讀取,但若要完成其它的一些如顯示、計(jì)算等功能時(shí),我們還要利用到類中的第三個(gè)常見(jiàn)成員-方法。方法(method)是一種用于實(shí)現(xiàn)可以由對(duì)象或類執(zhí)行的計(jì)算或操作的成員函數(shù)。在類中定義聲明方法的基本語(yǔ)法格式為:
訪問(wèn)修飾符返回類型方法名([參數(shù)列表]){方法體}7.3.5構(gòu)造函數(shù)與析構(gòu)函數(shù)1.構(gòu)造函數(shù)構(gòu)造函數(shù)是一種特殊的方法成員,其主要作用是在創(chuàng)建對(duì)象時(shí)初始化對(duì)象,每個(gè)類都有構(gòu)造函數(shù),即使我們沒(méi)有聲明,編譯器也會(huì)自動(dòng)地為我們提供一個(gè)默認(rèn)的構(gòu)造函數(shù),如果聲明了構(gòu)造函數(shù),系統(tǒng)將不再提供默認(rèn)構(gòu)造函數(shù)。如果調(diào)用的是默認(rèn)構(gòu)造函數(shù),在創(chuàng)建對(duì)象時(shí),系統(tǒng)將不同類型的數(shù)據(jù)成員初始化為相應(yīng)的默認(rèn)值。例如,數(shù)值類型被初始化為0,字符串類型被初始化為null,邏輯類型被初始化為false.7.3.5構(gòu)造函數(shù)與析構(gòu)函數(shù)定義和使用構(gòu)造函數(shù)時(shí)必須要注意以下幾個(gè)問(wèn)題一個(gè)類的構(gòu)造函數(shù)通常與類名相同;構(gòu)造函數(shù)不聲明返回類型;一般地構(gòu)造函數(shù)總是public類型的,如果是private類型的,表明類不能被實(shí)例化;在構(gòu)造函數(shù)中不要做對(duì)類的實(shí)例進(jìn)行初始化以外的事情,也不要嘗試顯式地調(diào)用構(gòu)造函數(shù)。7.3.5構(gòu)造函數(shù)與析構(gòu)函數(shù)【實(shí)作任務(wù)】客車類有參數(shù)的構(gòu)造函數(shù)和無(wú)參數(shù)的構(gòu)造函數(shù)聲明 //聲明公有含參數(shù)的構(gòu)造方法 //參數(shù)we,p,wh,sp分別傳遞車重,載客量,車輪,車牌號(hào) publicPasstrain(intwe,intp,intwh,stringsp) { weight=we; wheels=wh; passengers=p; plate=sp; Console.WriteLine("客車類的有參構(gòu)造函數(shù)被調(diào)用"); }7.3.5構(gòu)造函數(shù)與析構(gòu)函數(shù)【實(shí)作任務(wù)】續(xù)客車類有參數(shù)的構(gòu)造函數(shù)和無(wú)參數(shù)的構(gòu)造函數(shù)聲明 //聲明一個(gè)不含參數(shù)的構(gòu)造方法 publicPasstrain() { weight=100; passengers=20; wheels=4; plate="000000"; Console.WriteLine("客車類的無(wú)參構(gòu)造函數(shù)被調(diào)用"); }7.3.5構(gòu)造函數(shù)與析構(gòu)函數(shù)2.析構(gòu)函數(shù)在類的實(shí)例超出某個(gè)范圍時(shí),我們總是希望它所占的存儲(chǔ)能被收回,以便能節(jié)省出計(jì)算機(jī)的存儲(chǔ)空間做其它的用途,C#提供了析構(gòu)函數(shù),用于專門釋放被占用的系統(tǒng)資源。析構(gòu)函數(shù)在設(shè)計(jì)時(shí)要注意名字與類名必須相同,同時(shí)在前面加符號(hào)~,析構(gòu)函數(shù)不接受任何參數(shù)也不返回任何值,若試圖聲明其它任何一個(gè)以符號(hào)~開頭,而不與類名相同的方法或者試圖讓析構(gòu)函數(shù)返回一個(gè)值都是不行的。析構(gòu)函數(shù)不能被繼承而來(lái)的,也不能顯式地調(diào)用,當(dāng)某個(gè)類的實(shí)例被認(rèn)為不再有效,垃圾收集器會(huì)幫助我們完成這些易被遺忘的工作。7.3.5構(gòu)造函數(shù)與析構(gòu)函數(shù)2.析構(gòu)函數(shù)若我們?yōu)榭蛙囶惥帉懳鰳?gòu)函數(shù)則為:~Passtrain(){Console.WriteLine(“客車類的析構(gòu)函數(shù)被調(diào)用!”);}7.4對(duì)象的創(chuàng)建 我們學(xué)習(xí)了類的聲明,然而類是抽象的,要使用類定義的功能,就必須實(shí)例化類,即創(chuàng)建類的對(duì)象。類與對(duì)象的關(guān)系可以比喻為車型設(shè)計(jì)和具體的車:類就像車型設(shè)計(jì)一樣說(shuō)明了車所應(yīng)該具備的所有屬性和功能,但是車型設(shè)計(jì)并不是車,你不能發(fā)動(dòng)和駕駛車型;對(duì)象就象根據(jù)車型設(shè)計(jì)制造出的車,它們都具備車型設(shè)計(jì)所描述的屬性和功能,車是能發(fā)動(dòng)和駕駛的。7.4.1類對(duì)象的創(chuàng)建
C#使用new運(yùn)算符來(lái)創(chuàng)建類的對(duì)象,格式如下:
類名對(duì)象名=new類名([參數(shù)表]);也可以使用如下兩步完成創(chuàng)建類的對(duì)象:
類名對(duì)象名; 對(duì)象名=new類名([參數(shù)表]);其中,[參數(shù)表]是可選的,根據(jù)類模型提供的構(gòu)造函數(shù)來(lái)確定。聲明類相當(dāng)于定義一個(gè)模型,在類定義完畢之后使用new運(yùn)算符創(chuàng)建類的對(duì)象(實(shí)例),計(jì)算機(jī)將為對(duì)象(實(shí)例)分配內(nèi)存,并且返回對(duì)該對(duì)象(實(shí)例)的引用。7.4.1類對(duì)象的創(chuàng)建采用下面的語(yǔ)句創(chuàng)建Passtrain對(duì)象,并且將那些對(duì)象的引用保存到變量pss中:Passtrainpss=newPasstrain();//聲明對(duì)象的同時(shí)實(shí)例化也可以使用如下語(yǔ)句: Passtrainpss; //先聲明對(duì)象 pss=newPasstrain();//實(shí)例化對(duì)象7.4.1類對(duì)象的創(chuàng)建上面的語(yǔ)句newPasstrain()實(shí)例化時(shí)計(jì)算機(jī)會(huì)自動(dòng)調(diào)用類Passtrain的無(wú)參構(gòu)造函數(shù)實(shí)例化和初始化各個(gè)成員,若采用如下語(yǔ)句:Passtrainpss=newPasstrain(1000,20,4,"123456");
說(shuō)明:此時(shí)計(jì)算機(jī)將會(huì)調(diào)用類Passtrain的有參數(shù)的構(gòu)造函數(shù)實(shí)例化對(duì)象,并且將車重1000,車能容納的人數(shù)20,車輪數(shù)4和車牌號(hào)”123456”按指定的輸入進(jìn)行初始化。7.4.2對(duì)象成員的引用訪問(wèn)形式正誤分析pss.Showinfo()正確Showinfo為公有訪問(wèn)權(quán)限的方法,可輸出對(duì)象pss的相關(guān)信息Console.Write(pss.Passengers)正確Passengers屬性具有讀取權(quán)限pss.Passengers=10錯(cuò)誤Passengers屬性不具有寫權(quán)限,所以不能為其賦值Passtrainpss;pss=newPasstrain(23);錯(cuò)誤類Passtrain未提供一個(gè)參數(shù)的構(gòu)造函數(shù)7.4.2對(duì)象成員的引用注意創(chuàng)建類的對(duì)象、創(chuàng)建類的實(shí)例、實(shí)例化類等說(shuō)法是等價(jià)的,都說(shuō)明以類為模板生成了一個(gè)對(duì)象的操作。用new創(chuàng)建一個(gè)類的對(duì)象時(shí),將在計(jì)算機(jī)中為對(duì)象分配一塊內(nèi)存,每一個(gè)對(duì)象都有不同的內(nèi)存。代表對(duì)象的變量存儲(chǔ)的是存放對(duì)象的內(nèi)存的地址。因此,兩個(gè)不同的對(duì)象,即使它們的所有成員的值或代碼都相同,它們也是不相等的。就像同一型號(hào)的每一輛車都不相同一樣,用同一個(gè)類創(chuàng)建出來(lái)的不同對(duì)象也是不同的。7.5類的成員訪問(wèn)與類訪問(wèn)修飾符類中成員定義時(shí)都需要指明訪問(wèn)修飾符,以標(biāo)明此成員的訪問(wèn)范圍??梢栽L問(wèn)一個(gè)成員的代碼范圍叫做該成員的可訪問(wèn)域(accessibilitydomain)。訪問(wèn)修飾符用來(lái)控制所修飾成員的可訪問(wèn)域。訪問(wèn)修飾符使類或者類的成員在不同的范圍內(nèi)具有不同的可見(jiàn)性,用于實(shí)現(xiàn)數(shù)據(jù)和代碼的隱藏。7.5類的成員訪問(wèn)與類訪問(wèn)修飾符類成員訪問(wèn)修飾符的意義:public訪問(wèn)不受限制,可以類內(nèi)和任何類外的代碼中訪問(wèn)protected可訪問(wèn)域限定于類內(nèi)或從該類派生的類內(nèi)private可訪問(wèn)域限定于它所屬的類內(nèi)internal可訪問(wèn)域限定于類所在的程序內(nèi),即當(dāng)前項(xiàng)目中protectedinternal訪問(wèn)僅限于從包含類派生的當(dāng)前項(xiàng)目或類型7.5類的成員訪問(wèn)與類訪問(wèn)修飾符類的訪問(wèn)修飾符:public訪問(wèn)不受限制,可以被任意存取protected只可以被本類和其繼承子類存取internal只可以被本程序集內(nèi)所有的類存取protectedinternal唯一的一種組合限制修飾符,它只可以被本程序集內(nèi)所有的類和這些類的繼承子類所存取private只可以被本類所存取new修飾符只能用于嵌套的類,表示對(duì)繼承父類同名類型的隱藏abstract用來(lái)修飾抽象類,表示該類只能作為父類被用于繼承,而不能進(jìn)行對(duì)象實(shí)例化sealed用來(lái)修飾類為
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 按揭房屋買賣合同協(xié)議書
- 三農(nóng)莊休閑旅游經(jīng)營(yíng)手冊(cè)
- 企業(yè)多元化業(yè)務(wù)拓展下的倉(cāng)儲(chǔ)管理系統(tǒng)創(chuàng)新方案
- 高地溫隧道施工方案
- 景觀棧橋施工方案
- 濕地橋梁樁基施工方案
- 車牌識(shí)別系統(tǒng)道閘施工方案
- 建筑工程臨時(shí)用工協(xié)議書-@-1
- 鍋爐管束防腐施工方案
- 仲愷高新區(qū)瀝林英光小學(xué)改擴(kuò)建二期項(xiàng)目環(huán)評(píng)報(bào)告表
- MSA-測(cè)量系統(tǒng)分析模板
- 屈原《國(guó)殤》課件
- 2023年小學(xué)五年級(jí)下語(yǔ)文七彩全冊(cè)試卷
- 人口社會(huì)學(xué)PPT完整全套教學(xué)課件
- 電機(jī)與變壓器(第6版)PPT完整全套教學(xué)課件
- 休克病人的麻醉處理
- 中考數(shù)學(xué)計(jì)算題100道
- 人教版八年級(jí)下冊(cè)英語(yǔ)單詞表(默寫用)
- 【員工創(chuàng)新績(jī)效研究文獻(xiàn)綜述】
- 2023年高中生物新教材人教版(2023年)必修二全冊(cè)教案
- 【高考核心詞匯考前沖刺】介詞短語(yǔ)辨析+單選100題高考英語(yǔ)詞匯查漏補(bǔ)缺沖刺訓(xùn)練
評(píng)論
0/150
提交評(píng)論