版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
第4章C#面向?qū)ο蟪绦蛟O計4.1C#面向?qū)ο蟪绦蛟O計基礎一、類與對象
1、類的聲明格式:
[類修飾符]class類名[:][基類類名][,接口列表]{
類成員;}
幾點說明:
(1)類修飾符有:new、public、protected、private、internal、abstract、sealed、partial。①new
僅允許在嵌套類聲明時使用,表明類中隱藏了由基類中繼承而來的與基類中同名的成員類。例4-1用new修飾符隱藏基類中的成員類。②public
表明類可由任何其他類型訪問。它和java語言中的public修飾符的用法類似。③protected
一般在嵌套類聲明時使用,表示可以在外層類或外層類的子類中使用。
④private
一般在嵌套類聲明時使用,被private關鍵字修飾的內(nèi)層類只能在外層類范圍內(nèi)使用⑤internal
表明類是一個內(nèi)部類,內(nèi)部類必須和訪問類在同一程序集中,否則訪問類不能訪問用internal修飾的類。例如:
//Assembly1.cs,編譯成Assembly1.dllinternalclassBaseClass
{publicstaticint
intM=0;}//Assembly2.cs,編譯成Assembly2.exe
classTestAccess
{staticvoidMain(){BaseClass
myBase=newBaseClass();//Error}}⑥abstract
表明類是一個抽象類,抽象類不能實例化,只能用作其他類的基類。抽象類的用途是提供多個派生類可共享的基類的公共定義,抽象類中的成員方法只聲明不實現(xiàn)。該修飾符的用法與java語言相同。⑦sealed
表明類是一個密封類。密封類不能用作基類,因而關鍵字sealed和abstract不能同時使用。⑧partial
表明類是一個分部類,分部類允許把類定義拆分到多個文件中。
(2)類修飾符可以兩個或多個組合起來使用。如果省略類修飾符,則默認為私有修飾符private。(3)一個類的基類只能有一個(即單繼承),但一個類可以實現(xiàn)多個接口。(4)C#中所有的類都直接或間接繼承自System.Object類2、對象的聲明和實例化
(1)對象的聲明格式:類名對象名;
作用:聲明一個對象變量。
(2)對象實例化格式:
new類名([實參列表])
作用:調(diào)用類的構造函數(shù)創(chuàng)建一個對象實例。對象的聲明和對象實例化結(jié)合起來用下面形式:
類名對象名=new類名([實參列表])
例如:
classA{……}Aa=newA();3、類成員(1)類成員分類在c#中類成員有以下幾種:
常量:代表與類相關的常量值;變量:類中的成員變量。方法:完成類的各種功能。屬性:用來封裝類的域。利用屬性完成對類的域的讀寫操作事件:由類產(chǎn)生的通知,用于說明發(fā)生了什么事情。索引指示器:索引器允許類的實例按照與數(shù)組相同的方式進行索引,又稱下標指示器。運算符:定義類對象能使用的操作符。類型:屬于類的局部類型。構造函數(shù):在類被實例化的同時被執(zhí)行的成員函數(shù),主要是完成對象初始化操作。
析構函數(shù):在類被刪除之前最后執(zhí)行的成員函數(shù),主要是完成對象結(jié)束時的收尾操作。
(2)靜態(tài)成員和非靜態(tài)成員聲明一個類成員時使用了static關鍵字,則該類成員叫做靜態(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
表明類成員是保護成員。保護成員可訪問域限定于類內(nèi)或從該類派生的類內(nèi),不允許類外代碼訪問。
③private
表明類成員是私有成員。私有成員可訪問域限定于類內(nèi),不允許類外和派生類訪問。④internal
表明類成員是內(nèi)部成員。內(nèi)部成員可訪問域限定于類所在的程序集。例4-3類成員訪問修飾符的使用。
4、this關鍵字
this關鍵字表示引用類的當前實例。
this關鍵字的常用用途:①限定被相似的名稱隱藏的成員。②將this對象作為參數(shù)傳遞到其他方法。③聲明索引器。例4-4this關鍵字的使用。二、類的構造與析構函數(shù)
1、構造函數(shù)
(1)構造函數(shù)的特點
構造函數(shù)主要用于為對象分配存儲空間,并對數(shù)據(jù)成員進行初始化。構造函數(shù)具有如下特點:①構造函數(shù)的名字必須與類同名;②構造函數(shù)沒有返回類型,它可以帶參數(shù),也可以不帶參數(shù);③構造函數(shù)的主要作用是完成對類的初始化工作;④在創(chuàng)建一個類的對象(使用new關鍵字)時,編譯系統(tǒng)回自動調(diào)用類的構造函數(shù)初始化對象;(2)實例構造函數(shù)
負責初始化類中的實例變量(非靜態(tài)變量),它只有在用戶用new關鍵字為對象分配內(nèi)存時才被調(diào)用。實例構造函數(shù)可以重載。
(3)靜態(tài)構造函數(shù)
靜態(tài)構造函數(shù)用來初始化類的一些靜態(tài)成員變量。它僅在創(chuàng)建第一個實例或引用任何靜態(tài)成員之前,由編譯系統(tǒng)自動調(diào)用,靜態(tài)構造函數(shù)只會被調(diào)用一次。在使用靜態(tài)構造函數(shù)的時候應該注意幾點:①靜態(tài)構造函數(shù)既沒有訪問修飾符,也沒有參數(shù)。②一個類只能有一個靜態(tài)構造函數(shù)。③無參數(shù)的構造函數(shù)可以與靜態(tài)構造函數(shù)共存。④靜態(tài)構造函數(shù)最多只運行一次。⑤靜態(tài)構造函數(shù)不可以被繼承。如果在一個類中既沒有定義實例構造函數(shù),又沒有定義靜態(tài)構造函數(shù),則系統(tǒng)會給類自動生成一個實例構造函數(shù)和靜態(tài)構造函數(shù)。例4-5構造函數(shù)的使用。2、析構函數(shù)析構函數(shù)在類撤銷時運行,常用來處理類用完后的內(nèi)存的回收工作。使用析構函數(shù)時應注意:①析構函數(shù)不能帶有參數(shù);②析構函數(shù)不能擁有訪問修飾符;③并且不能顯式地被調(diào)用,一個對象實例的析構函數(shù)在該對象被撤銷時自動調(diào)用;④析構函數(shù)不能被繼承和重載;
⑤如果類沒有析構函數(shù),編譯系統(tǒng)就自動調(diào)用默認的析構函數(shù)。在C#中,系統(tǒng)提供了垃圾收集器幫助用戶完成內(nèi)存的回收工作,因而一般情況下不需要定義析構函數(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
表明域為只讀域。只讀域只能在域的定義中和它所屬類的構造函數(shù)中進行修改,在其他情況下是只讀的。例如:
classmyClass
{publicreadonlydoublePI=3.14159;……}2、域的初始化
在C#對域初始化有兩種方法:①對域聲明時初始化。例如:
classmyClass
{publicintx=100;……}②在構造函數(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ā)生其關注的事情時用來通知操作的一種方式。引發(fā)事件的操作可能是用戶交互(例如鼠標單擊),也可能是某些其他的程序邏輯。引發(fā)(觸發(fā))事件的對象叫做事件發(fā)送方。捕獲事件并對其做出響應的對象叫做事件接收方。
1、事件的聲明事件聲明的格式:
[事件修飾符]event委托類型名事件名;
從事件聲明的格式來看,聲明事件前必須聲明一個委托類型名。在命名空間System中預定義了一些委托類型,其中最常見的是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)容:①在事件類中聲明一個委托。②在事件類中聲明事件。③在事件類中定義觸發(fā)事件的方法。④在事件類的屬性或方法中觸發(fā)事件。
⑤在訪問事件類的程序中定義事件處理函數(shù)。⑥在訪問事件類的程序中訂閱事件。
.NETFramework類庫中的類預定義了一些事件,對這些預定義的事件,只需要在訪問類的程序中定義事件處理函數(shù)和訂閱事件。在WindowsForms應用程序中事件訂閱的格式:對象名.事件名+=new定義事件的委托類型名(事件處理函數(shù)名);在ASP.Net應用程序中事件訂閱的格式:
<asp:控件類名Id=id標識符…On事件名=“事件處理函數(shù)名”/>4.3方法一、方法的聲明
(1)方法聲明的格式:
[方法修飾符]返回類型方法名(參數(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ù)傳遞也稱為值傳遞,就是實參將其值傳遞給形參,形參值的改變不會引起實參值的改變。例4-8值類型參數(shù)的使用。
2、引用類型參數(shù)傳遞
引用類型傳遞方式下,方法的參數(shù)以ref修飾符聲明,實參將其引用傳遞到形參,即實參和形參共用相應的存儲空間,因而形參值的改變會引起實參值的改變。例4-9引用類型參數(shù)的使用。
3、輸出類型參數(shù)傳遞
out關鍵字會使參數(shù)通過引用來傳遞。這與ref關鍵字類似,不同之處在于ref要求變量必須在傳遞之前進行初始化。若要使用out參數(shù),方法定義和調(diào)用方法都必須顯式使用out關鍵字。使用out關鍵字修飾形參,需要在方法返回之前給形參賦值。
例如:
classOutExample
{staticvoidMethod(outinti){i=44;
}
staticvoidMain(){
intvalue;Method(outvalue);
Console.WriteLine(value);//輸出44}}4、數(shù)組類型參數(shù)傳遞數(shù)組可作為參數(shù)傳遞給方法。因為數(shù)組是引用類型,所以方法可以更改元素的值。例4-10用選擇法對6個整數(shù)排序。三、方法的重載
方法的重載是指一組具有相似功能的方法具有相同的方法名,只不過參數(shù)類型、參數(shù)個數(shù)和返回值類型不同。
例如:
classMyClass
{publicstaticintmax(intx,inty){if(x>y)returnx;elsereturny;}publicstaticfloatmax(floatx,floaty)
{
if(x>y)returnx;elsereturny;}……}四、外部方法
extern修飾符用于聲明在外部實現(xiàn)的方法。extern修飾符的常見用法是在使用Interop
服務調(diào)入非托管代碼時與DllImport屬性一起使用,在這種情況下,該方法還必須聲明為static。
例4-11以消息框的形式顯示字符串。五、運算符的重載在C#中,允許在一個類中重載標準運算符,目的在于可以用標準運算符運算該類的對象。實現(xiàn)運算符重載,就是在類中定義一個成員方法,格式為:
publicstatic類名operator運算符(形參列表){……}
幾點說明:①方法必須用public和static修飾。②返回值類型必須是運算符重載所在的類。形參列表中參數(shù)類型也必須是運算符重載所在的類。③方法名必須是operator運算符。④可重載的運算符有:一元運算符:+、-、!、~、++、--、true、false
二元運算符:+、-、*、/、%、&、|、^、<<、>>、==、!=、>、<、>=、<=⑤重載相等運算符(==)時,還必須重載不相等運算符(!=)。<和>運算符以及<=和>=運算符也必須成對重載例4-12定義復數(shù)類,重載++和-運算符,并編程測試。4.4索引器索引器允許用戶按照與數(shù)組相同的方式對類、結(jié)構或接口進行索引。索引器定義格式:
public類型this[intindex]{get{讀域數(shù)組元素語句}
set{寫域數(shù)組元素語句}}例4-13索引器的使用。4.5繼承與多態(tài)一、派生類派生類也稱子類,其定義格式:
[類修飾符]class類名:基類類名[,接口列表]{
類成員;}
幾點說明:
(1)類修飾符有:new、public、protected、private、internal、abstract、sealed、partial。這些修飾符的用法前面已經(jīng)講過。
(2)一個類的基類只能有一個(即
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 當宿舍長的心得體會
- 水滸傳的讀書心得100字
- 2024年新型環(huán)保家具供貨協(xié)議
- 2024年電氣系統(tǒng)定期檢查合同2篇
- 2024年智能化生產(chǎn)車間租賃及智能系統(tǒng)集成合同2篇
- 2024年游泳器材租賃合同3篇
- 2025年全國名校??甲魑模骸翱慈艘创蠊?jié)與最好從小處著眼”
- 2024年度電磁兼容檢測技術服務合同3篇
- 移動軟件開發(fā)課程設計
- 班主任管理系統(tǒng)課程設計
- 國家安全教育學習通超星期末考試答案章節(jié)答案2024年
- 變壓器巡視課件
- 中國重癥患者腸外營養(yǎng)治療臨床實踐專家共識(2024)解讀
- 精益生產(chǎn)篇(培訓資料)
- 河南省鄭州市鄭東新區(qū)2023-2024學年六年級上學期期末學情調(diào)研數(shù)學試題
- 產(chǎn)品檢驗合格證模板
- 2024年全國職業(yè)院校技能大賽中職組(安全保衛(wèi)賽項)考試題庫(含答案)
- 浙江省建筑防水工程技術規(guī)程
- 非學歷繼續(xù)教育信息化平臺建設需求
- 《冷戰(zhàn)史專題》筆記
- DL∕T 1692-2017 安全工器具柜技術條件
評論
0/150
提交評論