第7章類與對象_第1頁
第7章類與對象_第2頁
第7章類與對象_第3頁
第7章類與對象_第4頁
第7章類與對象_第5頁
已閱讀5頁,還剩34頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第7章類與對象【本章導(dǎo)讀】本章通過對類和對象的學(xué)習(xí),讓讀者掌握面向?qū)ο蠓治雠c面向?qū)ο蟪绦蛟O(shè)計(jì)的概念,掌握類和對象之間的關(guān)系,學(xué)習(xí)類、類成員、構(gòu)造函數(shù)、方法重載、對象創(chuàng)建等基本知識,使得具備自定義類的基本技能。在第二篇學(xué)習(xí)的Windows窗體、用戶界面控件、常用組件,都可以把他們看成一個一個的對象。在我們使用Windows窗體中的Button控件時(shí),我們通過屬性面板中的Text屬性就可以修改顯示在上面的文本,那么為什么可以達(dá)到這種功能呢?在計(jì)算機(jī)里面已經(jīng)形成了Button類,在這個類里面封裝好了一個名為Text的屬性,只要我們修改了這個屬性的值,計(jì)算機(jī)就會在按鈕的面上顯示出我們設(shè)定的值,實(shí)際上Button類中還封裝了很多在我們編制程序的時(shí)候需要的功能。7.1面向?qū)ο蠓治雠c面向?qū)ο笤O(shè)計(jì)我們編制的C#應(yīng)用程序中的類通常由我們程序員定義的類和.NETFramework類組成,而象Windows窗體中的Button控件就是.NETFramework提供的類。在本部分,我們將學(xué)習(xí)C#中自定義類和對象的相關(guān)知識。7.1面向?qū)ο蠓治雠c面向?qū)ο笤O(shè)計(jì)7.2案例:交通工具研究乘客數(shù)量、車輪數(shù)量、車牌號和車重等相關(guān)特性具有顯示自我特性的方法具有超速時(shí)警示駕駛員的功能呢個問題:解決交通工具中客車的一些相關(guān)問題。7.2案例:交通工具-要解決的問題能顯示該車能乘坐的乘客的數(shù)量、車輪數(shù)量、車牌號和車本身的重量,要求每次速度調(diào)整時(shí)能顯示是否在安全行駛速度的范圍內(nèi)。本章我們將通過逐步講解來完成本客車模型及其對象的創(chuàng)建。7.3.1類的定義

在類聲明中需要使用關(guān)鍵字class,其簡單的定義格式為: class類名 { 類體 }請思考:類是什么?為什么要創(chuàng)建類?怎么創(chuàng)建類?

7.3.1類的定義請注意:類體是以一對大括號開始和結(jié)束的,在一對大括號后面可以跟一個分號,也可以省略分號類體中的成員種類較多,常見的有字段、屬性、方法和事件方法(Method)類的所有成員的聲明均需在類體中7.3.1類的定義-【實(shí)作任務(wù)】定義的客車類 classPasstrain//類名為Passtrain(客車) { //成員字段 //成員屬性 //成員方法 //成員事件 }定義了一個名為Passtrain的類,此時(shí)類體中未定義任何內(nèi)容。但對于我們要定義的客車類的類體應(yīng)該是不為空的,在下面我們將通過學(xué)習(xí)對客車類的字段、屬性、方法和事件逐步完善。7.3.2字段字段是類成員中最基礎(chǔ)也較重要的一個成員,是與對象或類相關(guān)聯(lián)的變量。其作用主要是用于保存與類有關(guān)的一些數(shù)據(jù)。它的聲明格式與普通變量的聲明格式基本相同,聲明位置沒有特殊要求,習(xí)慣上將字段說明放在類體中的最前面。定義字段的基本格式為:

訪問修飾符數(shù)據(jù)類型字段名

7.3.2字段先給出客車類的字段定義classPasstrain//類名為Passtrain(客車){//以下為成員字段----------------------------------------intweight;//此車的重量,privateintpassengers;//私有成員,標(biāo)準(zhǔn)容納乘客數(shù)publicintwheels;//公有成員,該客車的輪子數(shù) publicstringplate;//公有成員,車牌號}字段解析客車類模型Passtrain中定義了四個成員,分別用于保存客車的重量、可容納的乘客數(shù)、輪子數(shù)和車牌號。在面向?qū)ο蟪绦蛟O(shè)計(jì)中,類里面的成員在定義時(shí)一般都要加上訪問控制修飾符,以標(biāo)志該成員在哪些范圍能夠被訪問得到。若聲明成員時(shí)沒有使用任何修飾符,則該成員被人為是私有的(private)。聲明類中的成員時(shí),使用不同的訪問修飾符,表示對類的訪問權(quán)限不同,C#中常見的訪問修飾符除及其意義:public訪問不受限制,可以被任何其它類訪問private訪問只限于含該成員的類,及只有該類的其它成員能訪問protected訪問只限于含該成員的類、及該類的派生類注意:若字段定義前面的訪問修飾符沒有寫出,則計(jì)算機(jī)會默認(rèn)認(rèn)為是私有字段private.對于公有訪問(public)字段,我們可以通過“對象名.字段名”的形式訪問,對于私有(private)和保護(hù)(protected)是不行的,如對于Passtrain的對象pss我們可以通過語句pss.wheels=4;為wheels字段賦值,而字段passengers是不行的。我們經(jīng)常會看到在類前面有一個partial修飾符,該修飾符的作用允許將一個類分布到多個文件之中,在編譯時(shí)會將各個部分再組合在一起。

7.3.3屬性類字段一般定義為私有或受保護(hù)的,不容許外界訪問。若需要外界訪問此字段,我們可以利用本小節(jié)的屬性知識,提供給外界訪問私有或保護(hù)字段的途徑。在前面第二篇中的5.2.2小節(jié)中我們通過設(shè)計(jì)器的屬性面板如圖7.2中的Text的更改從而可以修改窗體標(biāo)題欄上的文本。采用的就是這種方法,這也是類模型設(shè)計(jì)的常見方法。圖7-2屬性面板7.3.3屬性C#在類中聲明屬性的語法格式:訪問修飾符類型屬性名{get{return字段名;}set{字段名=value;}}7.3.3屬性注意

實(shí)際上屬性是一個或兩個代碼塊,表示一個get訪問器或一個set訪問器。當(dāng)讀取屬性時(shí),執(zhí)行g(shù)et訪問器的代碼塊;當(dāng)賦予屬性一個新值時(shí),執(zhí)行set訪問器的代碼塊。不具有set訪問器的屬性被視為只讀屬性。不具有g(shù)et訪問器的屬性被視為只寫屬性。同時(shí)具有這兩個訪問器的屬性是讀寫屬性。7.3.3屬性【實(shí)作任務(wù)】客車類的屬性聲明classPasstrain//類名為Passtrain(客車){//以下為成員字段----------------------------------------intweight;//此車的重量,privateintpassengers;//私有成員,標(biāo)準(zhǔn)容納乘客數(shù)publicintwheels;//公有成員,該客車的輪子數(shù)publicstringplate;//公有成員,車牌號//以下為成員屬性----------------------------------------//以下聲明公有訪問屬性以訪問私有的weight成員7.3.3屬性【實(shí)作任務(wù)】客車類的屬性聲明-續(xù)

publicintWeight{get{returnweight;}//提供對weight的讀權(quán)限set{weight=value;}//提供對weight的寫權(quán)限}//以下聲明公有訪問屬性以訪問私有的passengers成員publicintPassengers{get{returnpassengers;}//提供對passengers的讀權(quán)限}}7.3.4方法在前面,我們學(xué)習(xí)了類成員中的字段和屬性,通過它們我們可以完成數(shù)據(jù)的存放和讀取,但若要完成其它的一些如顯示、計(jì)算等功能時(shí),我們還要利用到類中的第三個常見成員-方法。方法(method)是一種用于實(shí)現(xiàn)可以由對象或類執(zhí)行的計(jì)算或操作的成員函數(shù)。在類中定義聲明方法的基本語法格式為:

訪問修飾符返回類型方法名([參數(shù)列表]){方法體}7.3.5構(gòu)造函數(shù)與析構(gòu)函數(shù)1.構(gòu)造函數(shù)構(gòu)造函數(shù)是一種特殊的方法成員,其主要作用是在創(chuàng)建對象時(shí)初始化對象,每個類都有構(gòu)造函數(shù),即使我們沒有聲明,編譯器也會自動地為我們提供一個默認(rèn)的構(gòu)造函數(shù),如果聲明了構(gòu)造函數(shù),系統(tǒng)將不再提供默認(rèn)構(gòu)造函數(shù)。如果調(diào)用的是默認(rèn)構(gòu)造函數(shù),在創(chuàng)建對象時(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òu)造函數(shù)通常與類名相同;構(gòu)造函數(shù)不聲明返回類型;一般地構(gòu)造函數(shù)總是public類型的,如果是private類型的,表明類不能被實(shí)例化;在構(gòu)造函數(shù)中不要做對類的實(shí)例進(jìn)行初始化以外的事情,也不要嘗試顯式地調(diào)用構(gòu)造函數(shù)。7.3.5構(gòu)造函數(shù)與析構(gòu)函數(shù)【實(shí)作任務(wù)】客車類有參數(shù)的構(gòu)造函數(shù)和無參數(shù)的構(gòu)造函數(shù)聲明 //聲明公有含參數(shù)的構(gòu)造方法 //參數(shù)we,p,wh,sp分別傳遞車重,載客量,車輪,車牌號 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ù)和無參數(shù)的構(gòu)造函數(shù)聲明 //聲明一個不含參數(shù)的構(gòu)造方法 publicPasstrain() { weight=100; passengers=20; wheels=4; plate="000000"; Console.WriteLine("客車類的無參構(gòu)造函數(shù)被調(diào)用"); }7.3.5構(gòu)造函數(shù)與析構(gòu)函數(shù)2.析構(gòu)函數(shù)在類的實(shí)例超出某個范圍時(shí),我們總是希望它所占的存儲能被收回,以便能節(jié)省出計(jì)算機(jī)的存儲空間做其它的用途,C#提供了析構(gòu)函數(shù),用于專門釋放被占用的系統(tǒng)資源。析構(gòu)函數(shù)在設(shè)計(jì)時(shí)要注意名字與類名必須相同,同時(shí)在前面加符號~,析構(gòu)函數(shù)不接受任何參數(shù)也不返回任何值,若試圖聲明其它任何一個以符號~開頭,而不與類名相同的方法或者試圖讓析構(gòu)函數(shù)返回一個值都是不行的。析構(gòu)函數(shù)不能被繼承而來的,也不能顯式地調(diào)用,當(dāng)某個類的實(shí)例被認(rèn)為不再有效,垃圾收集器會幫助我們完成這些易被遺忘的工作。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對象的創(chuàng)建 我們學(xué)習(xí)了類的聲明,然而類是抽象的,要使用類定義的功能,就必須實(shí)例化類,即創(chuàng)建類的對象。類與對象的關(guān)系可以比喻為車型設(shè)計(jì)和具體的車:類就像車型設(shè)計(jì)一樣說明了車所應(yīng)該具備的所有屬性和功能,但是車型設(shè)計(jì)并不是車,你不能發(fā)動和駕駛車型;對象就象根據(jù)車型設(shè)計(jì)制造出的車,它們都具備車型設(shè)計(jì)所描述的屬性和功能,車是能發(fā)動和駕駛的。7.4.1類對象的創(chuàng)建

C#使用new運(yùn)算符來創(chuàng)建類的對象,格式如下:

類名對象名=new類名([參數(shù)表]);也可以使用如下兩步完成創(chuàng)建類的對象:

類名對象名; 對象名=new類名([參數(shù)表]);其中,[參數(shù)表]是可選的,根據(jù)類模型提供的構(gòu)造函數(shù)來確定。聲明類相當(dāng)于定義一個模型,在類定義完畢之后使用new運(yùn)算符創(chuàng)建類的對象(實(shí)例),計(jì)算機(jī)將為對象(實(shí)例)分配內(nèi)存,并且返回對該對象(實(shí)例)的引用。7.4.1類對象的創(chuàng)建采用下面的語句創(chuàng)建Passtrain對象,并且將那些對象的引用保存到變量pss中:Passtrainpss=newPasstrain();//聲明對象的同時(shí)實(shí)例化也可以使用如下語句: Passtrainpss; //先聲明對象 pss=newPasstrain();//實(shí)例化對象7.4.1類對象的創(chuàng)建上面的語句newPasstrain()實(shí)例化時(shí)計(jì)算機(jī)會自動調(diào)用類Passtrain的無參構(gòu)造函數(shù)實(shí)例化和初始化各個成員,若采用如下語句:Passtrainpss=newPasstrain(1000,20,4,"123456");

說明:此時(shí)計(jì)算機(jī)將會調(diào)用類Passtrain的有參數(shù)的構(gòu)造函數(shù)實(shí)例化對象,并且將車重1000,車能容納的人數(shù)20,車輪數(shù)4和車牌號”123456”按指定的輸入進(jìn)行初始化。7.4.2對象成員的引用訪問形式正誤分析pss.Showinfo()正確Showinfo為公有訪問權(quán)限的方法,可輸出對象pss的相關(guān)信息Console.Write(pss.Passengers)正確Passengers屬性具有讀取權(quán)限pss.Passengers=10錯誤Passengers屬性不具有寫權(quán)限,所以不能為其賦值Passtrainpss;pss=newPasstrain(23);錯誤類Passtrain未提供一個參數(shù)的構(gòu)造函數(shù)7.4.2對象成員的引用注意創(chuàng)建類的對象、創(chuàng)建類的實(shí)例、實(shí)例化類等說法是等價(jià)的,都說明以類為模板生成了一個對象的操作。用new創(chuàng)建一個類的對象時(shí),將在計(jì)算機(jī)中為對象分配一塊內(nèi)存,每一個對象都有不同的內(nèi)存。代表對象的變量存儲的是存放對象的內(nèi)存的地址。因此,兩個不同的對象,即使它們的所有成員的值或代碼都相同,它們也是不相等的。就像同一型號的每一輛車都不相同一樣,用同一個類創(chuàng)建出來的不同對象也是不同的。7.5類的成員訪問與類訪問修飾符類中成員定義時(shí)都需要指明訪問修飾符,以標(biāo)明此成員的訪問范圍。可以訪問一個成員的代碼范圍叫做該成員的可訪問域(accessibilitydomain)。訪問修飾符用來控制所修飾成員的可訪問域。訪問修飾符使類或者類的成員在不同的范圍內(nèi)具有不同的可見性,用于實(shí)現(xiàn)數(shù)據(jù)和代碼的隱藏。7.5類的成員訪問與類訪問修飾符類成員訪問修飾符的意義:public訪問不受限制,可以類內(nèi)和任何類外的代碼中訪問protected可訪問域限定于類內(nèi)或從該類派生的類內(nèi)private可訪問域限定于它所屬的類內(nèi)internal可訪問域限定于類所在的程序內(nèi),即當(dāng)前項(xiàng)目中protectedinternal訪問僅限于從包含類派生的當(dāng)前項(xiàng)目或類型7.5類的成員訪問與類訪問修飾符類的訪問修飾符:public訪問不受限制,可以被任意存取protected只可以被本類和其繼承子類存取internal只可以被本程序集內(nèi)所有的類存取protectedinternal唯一的一種組合限制修飾符,它只可以被本程序集內(nèi)所有的類和這些類的繼承子類所存取private只可以被本類所存取new修飾符只能用于嵌套的類,表示對繼承父類同名類型的隱藏abstract用來修飾抽象類,表示該類只能作為父類被用于繼承,而不能進(jìn)行對象實(shí)例化sealed用來修飾類為

溫馨提示

  • 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

提交評論