




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第4章C#面向?qū)ο蟪绦蛟O(shè)計(jì)4.1C#面向?qū)ο蟪绦蛟O(shè)計(jì)基礎(chǔ)一、類與對象
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、對象的聲明和實(shí)例化
(1)對象的聲明格式:類名對象名;
作用:聲明一個(gè)對象變量。
(2)對象實(shí)例化格式:
new類名([實(shí)參列表])
作用:調(diào)用類的構(gòu)造函數(shù)創(chuàng)建一個(gè)對象實(shí)例。對象的聲明和對象實(shí)例化結(jié)合起來用下面形式:
類名對象名=new類名([實(shí)參列表])
例如:
classA{……}Aa=newA();3、類成員(1)類成員分類在c#中類成員有以下幾種:
常量:代表與類相關(guān)的常量值;變量:類中的成員變量。方法:完成類的各種功能。屬性:用來封裝類的域。利用屬性完成對類的域的讀寫操作事件:由類產(chǎn)生的通知,用于說明發(fā)生了什么事情。索引指示器:索引器允許類的實(shí)例按照與數(shù)組相同的方式進(jìn)行索引,又稱下標(biāo)指示器。運(yùn)算符:定義類對象能使用的操作符。類型:屬于類的局部類型。構(gòu)造函數(shù):在類被實(shí)例化的同時(shí)被執(zhí)行的成員函數(shù),主要是完成對象初始化操作。
析構(gòu)函數(shù):在類被刪除之前最后執(zhí)行的成員函數(shù),主要是完成對象結(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)成員屬于類的對象所有。②訪問方式不同靜態(tài)成員訪問方式:類名.成員名[(參數(shù)列表)]
非靜態(tài)成員訪問方式:對象名.成員名[(參數(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對象作為參數(shù)傳遞到其他方法。③聲明索引器。例4-4this關(guān)鍵字的使用。二、類的構(gòu)造與析構(gòu)函數(shù)
1、構(gòu)造函數(shù)
(1)構(gòu)造函數(shù)的特點(diǎn)
構(gòu)造函數(shù)主要用于為對象分配存儲空間,并對數(shù)據(jù)成員進(jìn)行初始化。構(gòu)造函數(shù)具有如下特點(diǎn):①構(gòu)造函數(shù)的名字必須與類同名;②構(gòu)造函數(shù)沒有返回類型,它可以帶參數(shù),也可以不帶參數(shù);③構(gòu)造函數(shù)的主要作用是完成對類的初始化工作;④在創(chuàng)建一個(gè)類的對象(使用new關(guān)鍵字)時(shí),編譯系統(tǒng)回自動調(diào)用類的構(gòu)造函數(shù)初始化對象;(2)實(shí)例構(gòu)造函數(shù)
負(fù)責(zé)初始化類中的實(shí)例變量(非靜態(tài)變量),它只有在用戶用new關(guān)鍵字為對象分配內(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)自動調(diào)用,靜態(tài)構(gòu)造函數(shù)只會被調(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)會給類自動生成一個(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è)對象實(shí)例的析構(gòu)函數(shù)在該對象被撤銷時(shí)自動調(diào)用;④析構(gòu)函數(shù)不能被繼承和重載;
⑤如果類沒有析構(gòu)函數(shù),編譯系統(tǒ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#對域初始化有兩種方法:①對域聲明時(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)屬性的訪問格式:對象名.屬性名例4-6屬性的使用三、事件事件是類在發(fā)生其關(guān)注的事情時(shí)用來通知操作的一種方式。引發(fā)事件的操作可能是用戶交互(例如鼠標(biāo)單擊),也可能是某些其他的程序邏輯。引發(fā)(觸發(fā))事件的對象叫做事件發(fā)送方。捕獲事件并對其做出響應(yīng)的對象叫做事件接收方。
1、事件的聲明事件聲明的格式:
[事件修飾符]event委托類型名事件名;
從事件聲明的格式來看,聲明事件前必須聲明一個(gè)委托類型名。在命名空間System中預(yù)定義了一些委托類型,其中最常見的是EventHandler,其聲明是:
publicdelegatevoidEventHandler( Objectsender,
EventArgse)
事件修飾符有:new、public、protected、internal、private和static,這些修飾符的用法和前面講的類似,只不過現(xiàn)在用于事件。
2、事件的訂閱與取消
(1)事件訂閱的格式
對象名.事件名+=new委托類型名(事件處理函數(shù)名);(2)事件取消的格式對象名.事件名-=new委托類型名(事件處理函數(shù)名);例4-7事件的使用
3、事件編程的內(nèi)容從例4-7可以看出,事件編程包含以下內(nèi)容:①在事件類中聲明一個(gè)委托。②在事件類中聲明事件。③在事件類中定義觸發(fā)事件的方法。④在事件類的屬性或方法中觸發(fā)事件。
⑤在訪問事件類的程序中定義事件處理函數(shù)。⑥在訪問事件類的程序中訂閱事件。
.NETFramework類庫中的類預(yù)定義了一些事件,對這些預(yù)定義的事件,只需要在訪問類的程序中定義事件處理函數(shù)和訂閱事件。在WindowsForms應(yīng)用程序中事件訂閱的格式:對象名.事件名+=new定義事件的委托類型名(事件處理函數(shù)名);在ASP.Net應(yīng)用程序中事件訂閱的格式:
<asp:控件類名Id=id標(biāo)識符…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í)參將其值傳遞給形參,形參值的改變不會引起實(shí)參值的改變。例4-8值類型參數(shù)的使用。
2、引用類型參數(shù)傳遞
引用類型傳遞方式下,方法的參數(shù)以ref修飾符聲明,實(shí)參將其引用傳遞到形參,即實(shí)參和形參共用相應(yīng)的存儲空間,因而形參值的改變會引起實(shí)參值的改變。例4-9引用類型參數(shù)的使用。
3、輸出類型參數(shù)傳遞
out關(guān)鍵字會使參數(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用選擇法對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)算該類的對象。實(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)算符也必須成對重載例4-12定義復(fù)數(shù)類,重載++和-運(yùn)算符,并編程測試。4.4索引器索引器允許用戶按照與數(shù)組相同的方式對類、結(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等.壓縮文件請下載最新的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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 電影票務(wù)平臺地區(qū)級代理合同
- 合同法修訂案:第一章 合同的訂立與生效
- 外資制造業(yè)-員工培訓(xùn)合同范本
- 木材采購與銷售合同模板
- 流動人口計(jì)劃生育協(xié)作合同
- 干股收益分配合同(范本)
- 企事業(yè)單位監(jiān)控布防合同模板
- 合同責(zé)任死亡賠償金額解析
- 學(xué)校食堂食材采購合同模板
- 徐州2025年江蘇徐州市口腔醫(yī)院招聘非在編醫(yī)務(wù)人員53人筆試歷年參考題庫附帶答案詳解-1
- 影視制作項(xiàng)目委托制作協(xié)議
- 廣東2024年12月佛山市教育局公開選調(diào)1名公務(wù)員筆試歷年典型考題(歷年真題考點(diǎn))解題思路附帶答案詳解
- 植物角創(chuàng)設(shè)培訓(xùn)
- 法院生活費(fèi)申請書
- 2025年湖南工藝美術(shù)職業(yè)學(xué)院高職單招職業(yè)技能測試近5年??及鎱⒖碱}庫含答案解析
- 【課件】學(xué)校后勤管理工作
- 2025-2030年中國聚丙烯酰胺(PAM)市場發(fā)展?fàn)顩r及未來投資戰(zhàn)略決策報(bào)告新版
- 課題申報(bào)書:產(chǎn)教融合背景下護(hù)理專業(yè)技能人才“崗課賽證”融通路徑研究
- 《新媒體概論》課件
- EMS能源管理系統(tǒng)V1.4.0用戶需求說明書V1.0-20160916
評論
0/150
提交評論