C-面向?qū)ο蟪绦蛟O(shè)計(jì)_第1頁
C-面向?qū)ο蟪绦蛟O(shè)計(jì)_第2頁
C-面向?qū)ο蟪绦蛟O(shè)計(jì)_第3頁
C-面向?qū)ο蟪绦蛟O(shè)計(jì)_第4頁
C-面向?qū)ο蟪绦蛟O(shè)計(jì)_第5頁
已閱讀5頁,還剩39頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第4章C#面向?qū)ο蟪绦蛟O(shè)計(jì)4.1C#面向?qū)ο蟪绦蛟O(shè)計(jì)基礎(chǔ)一、類與對(duì)象

1、類的聲明格式:

[類修飾符]class類名[:][基類類名][,接口列表]{

類成員;}

幾點(diǎn)說明:

(1)類修飾符有:new、public、protected、private、internal、abstract、sealed、partial。①new

僅允許在嵌套類聲明時(shí)使用,表明類中隱藏了由基類中繼承而來的與基類中同名的成員類。例4-1用new修飾符隱藏基類中的成員類。②public

表明類可由任何其他類型訪問。它和java語言中的public修飾符的用法類似。③protected

一般在嵌套類聲明時(shí)使用,表示可以在外層類或外層類的子類中使用。

④private

一般在嵌套類聲明時(shí)使用,被private關(guān)鍵字修飾的內(nèi)層類只能在外層類范圍內(nèi)使用⑤internal

表明類是一個(gè)內(nèi)部類,內(nèi)部類必須和訪問類在同一程序集中,否則訪問類不能訪問用internal修飾的類。例如:

//Assembly1.cs,編譯成Assembly1.dllinternalclassBaseClass

{publicstaticint

intM=0;}//Assembly2.cs,編譯成Assembly2.exe

classTestAccess

{staticvoidMain(){BaseClass

myBase=newBaseClass();//Error}}⑥abstract

表明類是一個(gè)抽象類,抽象類不能實(shí)例化,只能用作其他類的基類。抽象類的用途是提供多個(gè)派生類可共享的基類的公共定義,抽象類中的成員方法只聲明不實(shí)現(xiàn)。該修飾符的用法與java語言相同。⑦sealed

表明類是一個(gè)密封類。密封類不能用作基類,因而關(guān)鍵字sealed和abstract不能同時(shí)使用。⑧partial

表明類是一個(gè)分部類,分部類允許把類定義拆分到多個(gè)文件中。

(2)類修飾符可以兩個(gè)或多個(gè)組合起來使用。如果省略類修飾符,則默認(rèn)為私有修飾符private。(3)一個(gè)類的基類只能有一個(gè)(即單繼承),但一個(gè)類可以實(shí)現(xiàn)多個(gè)接口。(4)C#中所有的類都直接或間接繼承自System.Object類2、對(duì)象的聲明和實(shí)例化

(1)對(duì)象的聲明格式:類名對(duì)象名;

作用:聲明一個(gè)對(duì)象變量。

(2)對(duì)象實(shí)例化格式:

new類名([實(shí)參列表])

作用:調(diào)用類的構(gòu)造函數(shù)創(chuàng)建一個(gè)對(duì)象實(shí)例。對(duì)象的聲明和對(duì)象實(shí)例化結(jié)合起來用下面形式:

類名對(duì)象名=new類名([實(shí)參列表])

例如:

classA{……}Aa=newA();3、類成員(1)類成員分類在c#中類成員有以下幾種:

常量:代表與類相關(guān)的常量值;變量:類中的成員變量。方法:完成類的各種功能。屬性:用來封裝類的域。利用屬性完成對(duì)類的域的讀寫操作事件:由類產(chǎn)生的通知,用于說明發(fā)生了什么事情。索引指示器:索引器允許類的實(shí)例按照與數(shù)組相同的方式進(jìn)行索引,又稱下標(biāo)指示器。運(yùn)算符:定義類對(duì)象能使用的操作符。類型:屬于類的局部類型。構(gòu)造函數(shù):在類被實(shí)例化的同時(shí)被執(zhí)行的成員函數(shù),主要是完成對(duì)象初始化操作。

析構(gòu)函數(shù):在類被刪除之前最后執(zhí)行的成員函數(shù),主要是完成對(duì)象結(jié)束時(shí)的收尾操作。

(2)靜態(tài)成員和非靜態(tài)成員聲明一個(gè)類成員時(shí)使用了static關(guān)鍵字,則該類成員叫做靜態(tài)成員,反之叫非靜態(tài)成員。靜態(tài)成員和非靜態(tài)成員的區(qū)別:①性質(zhì)不同靜態(tài)成員屬于類所有,非靜態(tài)成員屬于類的對(duì)象所有。②訪問方式不同靜態(tài)成員訪問方式:類名.成員名[(參數(shù)列表)]

非靜態(tài)成員訪問方式:對(duì)象名.成員名[(參數(shù)列表)]③靜態(tài)成員方法和非靜態(tài)成員方法訪問類成員不同靜態(tài)成員方法只能訪問類的靜態(tài)成員,非靜態(tài)成員方法既可訪問類的靜態(tài)成員,也可訪問類的非靜態(tài)成員。例4-2靜態(tài)成員和非靜態(tài)成員的訪問。(3)類成員訪問修飾符

在C#中類成員訪問修飾符有:public、protected、private、internal。①public

表明類成員是公有成員。公有成員訪問不受限制,可以在類內(nèi)和類外的代碼中訪問。公有成員提供了類的外部接口。

②protected

表明類成員是保護(hù)成員。保護(hù)成員可訪問域限定于類內(nèi)或從該類派生的類內(nèi),不允許類外代碼訪問。

③private

表明類成員是私有成員。私有成員可訪問域限定于類內(nèi),不允許類外和派生類訪問。④internal

表明類成員是內(nèi)部成員。內(nèi)部成員可訪問域限定于類所在的程序集。例4-3類成員訪問修飾符的使用。

4、this關(guān)鍵字

this關(guān)鍵字表示引用類的當(dāng)前實(shí)例。

this關(guān)鍵字的常用用途:①限定被相似的名稱隱藏的成員。②將this對(duì)象作為參數(shù)傳遞到其他方法。③聲明索引器。例4-4this關(guān)鍵字的使用。二、類的構(gòu)造與析構(gòu)函數(shù)

1、構(gòu)造函數(shù)

(1)構(gòu)造函數(shù)的特點(diǎn)

構(gòu)造函數(shù)主要用于為對(duì)象分配存儲(chǔ)空間,并對(duì)數(shù)據(jù)成員進(jìn)行初始化。構(gòu)造函數(shù)具有如下特點(diǎn):①構(gòu)造函數(shù)的名字必須與類同名;②構(gòu)造函數(shù)沒有返回類型,它可以帶參數(shù),也可以不帶參數(shù);③構(gòu)造函數(shù)的主要作用是完成對(duì)類的初始化工作;④在創(chuàng)建一個(gè)類的對(duì)象(使用new關(guān)鍵字)時(shí),編譯系統(tǒng)回自動(dòng)調(diào)用類的構(gòu)造函數(shù)初始化對(duì)象;(2)實(shí)例構(gòu)造函數(shù)

負(fù)責(zé)初始化類中的實(shí)例變量(非靜態(tài)變量),它只有在用戶用new關(guān)鍵字為對(duì)象分配內(nèi)存時(shí)才被調(diào)用。實(shí)例構(gòu)造函數(shù)可以重載。

(3)靜態(tài)構(gòu)造函數(shù)

靜態(tài)構(gòu)造函數(shù)用來初始化類的一些靜態(tài)成員變量。它僅在創(chuàng)建第一個(gè)實(shí)例或引用任何靜態(tài)成員之前,由編譯系統(tǒng)自動(dòng)調(diào)用,靜態(tài)構(gòu)造函數(shù)只會(huì)被調(diào)用一次。在使用靜態(tài)構(gòu)造函數(shù)的時(shí)候應(yīng)該注意幾點(diǎn):①靜態(tài)構(gòu)造函數(shù)既沒有訪問修飾符,也沒有參數(shù)。②一個(gè)類只能有一個(gè)靜態(tài)構(gòu)造函數(shù)。③無參數(shù)的構(gòu)造函數(shù)可以與靜態(tài)構(gòu)造函數(shù)共存。④靜態(tài)構(gòu)造函數(shù)最多只運(yùn)行一次。⑤靜態(tài)構(gòu)造函數(shù)不可以被繼承。如果在一個(gè)類中既沒有定義實(shí)例構(gòu)造函數(shù),又沒有定義靜態(tài)構(gòu)造函數(shù),則系統(tǒng)會(huì)給類自動(dòng)生成一個(gè)實(shí)例構(gòu)造函數(shù)和靜態(tài)構(gòu)造函數(shù)。例4-5構(gòu)造函數(shù)的使用。2、析構(gòu)函數(shù)析構(gòu)函數(shù)在類撤銷時(shí)運(yùn)行,常用來處理類用完后的內(nèi)存的回收工作。使用析構(gòu)函數(shù)時(shí)應(yīng)注意:①析構(gòu)函數(shù)不能帶有參數(shù);②析構(gòu)函數(shù)不能擁有訪問修飾符;③并且不能顯式地被調(diào)用,一個(gè)對(duì)象實(shí)例的析構(gòu)函數(shù)在該對(duì)象被撤銷時(shí)自動(dòng)調(diào)用;④析構(gòu)函數(shù)不能被繼承和重載;

⑤如果類沒有析構(gòu)函數(shù),編譯系統(tǒng)就自動(dòng)調(diào)用默認(rèn)的析構(gòu)函數(shù)。在C#中,系統(tǒng)提供了垃圾收集器幫助用戶完成內(nèi)存的回收工作,因而一般情況下不需要定義析構(gòu)函數(shù)。

4.2域、屬性與事件一、域域又稱成員變量。

1、域聲明格式:

[域修飾符]類型域名;

域的修飾符有:new、public、protected、internal、private、static和readonly。修飾符public、protected、internal、private和static的用法在前面已講過。

①newnew修飾符可以顯式隱藏從基類繼承的同名成員。例如:

publicclassBaseC{publicstaticintx=55;

}

classDerivedC:BaseC{newpublicstaticintx=100;staticvoidMain(string[]args){

Console.WriteLine(x);}

}②readonly

表明域?yàn)橹蛔x域。只讀域只能在域的定義中和它所屬類的構(gòu)造函數(shù)中進(jìn)行修改,在其他情況下是只讀的。例如:

classmyClass

{publicreadonlydoublePI=3.14159;……}2、域的初始化

在C#對(duì)域初始化有兩種方法:①對(duì)域聲明時(shí)初始化。例如:

classmyClass

{publicintx=100;……}②在構(gòu)造函數(shù)中初始化。二、屬性

屬性是類中的成員,用來讀寫私有域的值。

1、屬性的聲明屬性聲明的格式:

[屬性修飾符]屬性的類型屬性名

{

set{寫私有域語句}

get{讀私有域語句}}(1)屬性修飾符屬性修飾符有:new、public、protected、internal、private、static、virtual、override和abstract。

修飾符new、public、protected、internal、private、static和abstract的用法和前面講的用法基本類似,只是現(xiàn)在用于屬性。用virtual修飾屬性表明該屬性是虛擬屬性,虛擬屬性可在派生類中重寫該屬性。override只能用在派生類中修飾重寫的屬性。例如:

classA{intpvalue=1;

publicvirtualintP{

get{returnpvalue;}set{pvalue=value;}}}

classB:A{publicoverrideintP{get{returnbase.P;}

set{base.P=value;}

}}(2)set訪問器

set訪問器用來寫私有域的值,因而至少包含語句:私有域名=value;(3)get訪問器

get訪問器用來讀私有域的值,因而至少包含語句:

return私有域名;2、屬性的訪問靜態(tài)屬性的訪問格式:

類名.屬性名非靜態(tài)屬性的訪問格式:對(duì)象名.屬性名例4-6屬性的使用三、事件事件是類在發(fā)生其關(guān)注的事情時(shí)用來通知操作的一種方式。引發(fā)事件的操作可能是用戶交互(例如鼠標(biāo)單擊),也可能是某些其他的程序邏輯。引發(fā)(觸發(fā))事件的對(duì)象叫做事件發(fā)送方。捕獲事件并對(duì)其做出響應(yīng)的對(duì)象叫做事件接收方。

1、事件的聲明事件聲明的格式:

[事件修飾符]event委托類型名事件名;

從事件聲明的格式來看,聲明事件前必須聲明一個(gè)委托類型名。在命名空間System中預(yù)定義了一些委托類型,其中最常見的是EventHandler,其聲明是:

publicdelegatevoidEventHandler( Objectsender,

EventArgse)

事件修飾符有:new、public、protected、internal、private和static,這些修飾符的用法和前面講的類似,只不過現(xiàn)在用于事件。

2、事件的訂閱與取消

(1)事件訂閱的格式

對(duì)象名.事件名+=new委托類型名(事件處理函數(shù)名);(2)事件取消的格式對(duì)象名.事件名-=new委托類型名(事件處理函數(shù)名);例4-7事件的使用

3、事件編程的內(nèi)容從例4-7可以看出,事件編程包含以下內(nèi)容:①在事件類中聲明一個(gè)委托。②在事件類中聲明事件。③在事件類中定義觸發(fā)事件的方法。④在事件類的屬性或方法中觸發(fā)事件。

⑤在訪問事件類的程序中定義事件處理函數(shù)。⑥在訪問事件類的程序中訂閱事件。

.NETFramework類庫中的類預(yù)定義了一些事件,對(duì)這些預(yù)定義的事件,只需要在訪問類的程序中定義事件處理函數(shù)和訂閱事件。在WindowsForms應(yīng)用程序中事件訂閱的格式:對(duì)象名.事件名+=new定義事件的委托類型名(事件處理函數(shù)名);在ASP.Net應(yīng)用程序中事件訂閱的格式:

<asp:控件類名Id=id標(biāo)識(shí)符…On事件名=“事件處理函數(shù)名”/>4.3方法一、方法的聲明

(1)方法聲明的格式:

[方法修飾符]返回類型方法名(參數(shù)列表){

方法實(shí)現(xiàn)部分

}(2)方法修飾符方法修飾符有:new、public、protected、internal、private、static、virtual、sealed、override、abstract和extern。其中修飾符new、public、protected、internal、private、static、virtual、override和abstract的用法和前面講的類似,只不過現(xiàn)在用于方法。①sealed

表明方法是密封方法。密封方法在派生類中不能被重寫。②extern

表明方法是外部方法。extern常用于在非托管代碼中調(diào)用Dll文件中的函數(shù)使用。二、方法的參數(shù)

C#支持四種類型的參數(shù),分別為: 值類型:不含任何修飾符;引用類型:使用ref修飾符聲明;

輸出參數(shù):使用out修飾符聲明;參數(shù)數(shù)組:使用params修飾符聲明。

1、值類型參數(shù)傳遞值類型參數(shù)傳遞也稱為值傳遞,就是實(shí)參將其值傳遞給形參,形參值的改變不會(huì)引起實(shí)參值的改變。例4-8值類型參數(shù)的使用。

2、引用類型參數(shù)傳遞

引用類型傳遞方式下,方法的參數(shù)以ref修飾符聲明,實(shí)參將其引用傳遞到形參,即實(shí)參和形參共用相應(yīng)的存儲(chǔ)空間,因而形參值的改變會(huì)引起實(shí)參值的改變。例4-9引用類型參數(shù)的使用。

3、輸出類型參數(shù)傳遞

out關(guān)鍵字會(huì)使參數(shù)通過引用來傳遞。這與ref關(guān)鍵字類似,不同之處在于ref要求變量必須在傳遞之前進(jìn)行初始化。若要使用out參數(shù),方法定義和調(diào)用方法都必須顯式使用out關(guān)鍵字。使用out關(guān)鍵字修飾形參,需要在方法返回之前給形參賦值。

例如:

classOutExample

{staticvoidMethod(outinti){i=44;

}

staticvoidMain(){

intvalue;Method(outvalue);

Console.WriteLine(value);//輸出44}}4、數(shù)組類型參數(shù)傳遞數(shù)組可作為參數(shù)傳遞給方法。因?yàn)閿?shù)組是引用類型,所以方法可以更改元素的值。例4-10用選擇法對(duì)6個(gè)整數(shù)排序。三、方法的重載

方法的重載是指一組具有相似功能的方法具有相同的方法名,只不過參數(shù)類型、參數(shù)個(gè)數(shù)和返回值類型不同。

例如:

classMyClass

{publicstaticintmax(intx,inty){if(x>y)returnx;elsereturny;}publicstaticfloatmax(floatx,floaty)

{

if(x>y)returnx;elsereturny;}……}四、外部方法

extern修飾符用于聲明在外部實(shí)現(xiàn)的方法。extern修飾符的常見用法是在使用Interop

服務(wù)調(diào)入非托管代碼時(shí)與DllImport屬性一起使用,在這種情況下,該方法還必須聲明為static。

例4-11以消息框的形式顯示字符串。五、運(yùn)算符的重載在C#中,允許在一個(gè)類中重載標(biāo)準(zhǔn)運(yùn)算符,目的在于可以用標(biāo)準(zhǔn)運(yùn)算符運(yùn)算該類的對(duì)象。實(shí)現(xiàn)運(yùn)算符重載,就是在類中定義一個(gè)成員方法,格式為:

publicstatic類名operator運(yùn)算符(形參列表){……}

幾點(diǎn)說明:①方法必須用public和static修飾。②返回值類型必須是運(yùn)算符重載所在的類。形參列表中參數(shù)類型也必須是運(yùn)算符重載所在的類。③方法名必須是operator運(yùn)算符。④可重載的運(yùn)算符有:一元運(yùn)算符:+、-、!、~、++、--、true、false

二元運(yùn)算符:+、-、*、/、%、&、|、^、<<、>>、==、!=、>、<、>=、<=⑤重載相等運(yùn)算符(==)時(shí),還必須重載不相等運(yùn)算符(!=)。<和>運(yùn)算符以及<=和>=運(yùn)算符也必須成對(duì)重載例4-12定義復(fù)數(shù)類,重載++和-運(yùn)算符,并編程測(cè)試。4.4索引器索引器允許用戶按照與數(shù)組相同的方式對(duì)類、結(jié)構(gòu)或接口進(jìn)行索引。索引器定義格式:

public類型this[intindex]{get{讀域數(shù)組元素語句}

set{寫域數(shù)組元素語句}}例4-13索引器的使用。4.5繼承與多態(tài)一、派生類派生類也稱子類,其定義格式:

[類修飾符]class類名:基類類名[,接口列表]{

類成員;}

幾點(diǎn)說明:

(1)類修飾符有:new、public、protected、private、internal、abstract、sealed、partial。這些修飾符的用法前面已經(jīng)講過。

(2)一個(gè)類的基類只能有一個(gè)(即

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論