方法是類(lèi)的主要成員方法是在一個(gè)對(duì)象里執(zhí)行特定操作課件_第1頁(yè)
方法是類(lèi)的主要成員方法是在一個(gè)對(duì)象里執(zhí)行特定操作課件_第2頁(yè)
方法是類(lèi)的主要成員方法是在一個(gè)對(duì)象里執(zhí)行特定操作課件_第3頁(yè)
方法是類(lèi)的主要成員方法是在一個(gè)對(duì)象里執(zhí)行特定操作課件_第4頁(yè)
方法是類(lèi)的主要成員方法是在一個(gè)對(duì)象里執(zhí)行特定操作課件_第5頁(yè)
已閱讀5頁(yè),還剩41頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

方法南陽(yáng)理工學(xué)院軟件學(xué)院Delphi開(kāi)發(fā)基礎(chǔ)方法南陽(yáng)理工學(xué)院軟件學(xué)院1方法overview方法是類(lèi)的主要成員。方法是在一個(gè)對(duì)象里執(zhí)行特定操作、實(shí)現(xiàn)特定功能的過(guò)程和函數(shù),反映的是對(duì)象的行為。方法和普通過(guò)程和函數(shù)例程存在的不同方法在類(lèi)中聲明,在方法定義時(shí)必須在方法名稱(chēng)前面加上類(lèi)名限定符。在方法內(nèi)部可以直接使用Delphi語(yǔ)言預(yù)定義的變量標(biāo)識(shí)符self,它是對(duì)調(diào)用方法的對(duì)象實(shí)例或類(lèi)的引用。通過(guò)使用保留字和指示字,可以將方法分為多種不同的類(lèi)型。南陽(yáng)理工學(xué)院軟件學(xué)院方法overview方法是類(lèi)的主要成員。方法是在一個(gè)對(duì)象里執(zhí)2方法的前向分類(lèi)所謂方法的前向分類(lèi),就是根據(jù)聲明方法時(shí)開(kāi)頭所使用的保留字,將方法分為構(gòu)造方法(constructor),析構(gòu)方法(destructor),類(lèi)方法(classprocedure、classfunction)和一般方法。南陽(yáng)理工學(xué)院軟件學(xué)院方法的前向分類(lèi)所謂方法的前向分類(lèi),就是根據(jù)聲明方法時(shí)開(kāi)頭所使3構(gòu)造方法構(gòu)造方法用保留字constructor開(kāi)頭,用來(lái)創(chuàng)建和初始化實(shí)例對(duì)象。默認(rèn)的構(gòu)造方法在創(chuàng)建實(shí)例對(duì)象的時(shí)候?qū)⑵鋽?shù)據(jù)域初始化為零。每一個(gè)類(lèi)都至少具有一個(gè)命名為create的默認(rèn)構(gòu)造方法。但是根據(jù)數(shù)據(jù)與初始化的需要,也可以在類(lèi)中引入多個(gè)構(gòu)造方法,通常,新增的構(gòu)造方法均以create命名并以重載(overload)的方式引入。南陽(yáng)理工學(xué)院軟件學(xué)院構(gòu)造方法構(gòu)造方法用保留字constructor開(kāi)頭,用來(lái)創(chuàng)建4聲明構(gòu)造方法不能指定返回值,雖然沒(méi)有指定返回值,但是構(gòu)造方法返回對(duì)它所創(chuàng)建的對(duì)象的實(shí)例的引用。構(gòu)造方法通常由類(lèi)來(lái)引用,以創(chuàng)建該類(lèi)的實(shí)例對(duì)象并對(duì)其進(jìn)行初始化,構(gòu)造方法也可以由對(duì)象來(lái)引用,以執(zhí)行構(gòu)造方法中的語(yǔ)句來(lái)完成對(duì)象數(shù)據(jù)的賦值。南陽(yáng)理工學(xué)院軟件學(xué)院聲明構(gòu)造方法不能指定返回值,雖然沒(méi)有指定返回值,但是構(gòu)造方法5創(chuàng)建重載帶有參數(shù)的的構(gòu)造函數(shù)來(lái)實(shí)現(xiàn)對(duì)數(shù)據(jù)域的賦值。使用overload和不使用overload的區(qū)別南陽(yáng)理工學(xué)院軟件學(xué)院創(chuàng)建重載帶有參數(shù)的的構(gòu)造函數(shù)來(lái)實(shí)現(xiàn)對(duì)數(shù)據(jù)域的賦值。南陽(yáng)理工學(xué)6析構(gòu)方法析構(gòu)方法用保留字destructor開(kāi)頭,用來(lái)釋放實(shí)例對(duì)象所占用的存儲(chǔ)從而銷(xiāo)毀對(duì)象。每個(gè)類(lèi)都具有方法destroy來(lái)對(duì)對(duì)象進(jìn)行析構(gòu)。當(dāng)使用自定義的destroy方法時(shí),應(yīng)當(dāng)使用override進(jìn)行覆蓋。南陽(yáng)理工學(xué)院軟件學(xué)院析構(gòu)方法析構(gòu)方法用保留字destructor開(kāi)頭,用來(lái)釋放實(shí)7Free和destroy不同procedureTObject.Free;beginifSelf<>nilthenDestroy;end;Free方法確定在對(duì)象引用非空的時(shí)候析構(gòu)對(duì)象,這樣就可以避免在程序中析構(gòu)一個(gè)已經(jīng)析構(gòu)的對(duì)象實(shí)例或者析構(gòu)一個(gè)尚未創(chuàng)建的對(duì)象實(shí)例時(shí)所帶來(lái)的問(wèn)題。因此通常使用free來(lái)完成對(duì)象的析構(gòu),在確保不會(huì)發(fā)生問(wèn)題的時(shí)候,也可以使用destroy來(lái)析構(gòu)對(duì)象。南陽(yáng)理工學(xué)院軟件學(xué)院Free和destroy不同procedureTObjec8析構(gòu)方法執(zhí)行之后,只是釋放了對(duì)象實(shí)例所占的存儲(chǔ),而并沒(méi)有將類(lèi)變量中保存的引用值清除。在實(shí)例對(duì)象被釋放之后,通常應(yīng)當(dāng)將類(lèi)變量的值設(shè)置為nil。南陽(yáng)理工學(xué)院軟件學(xué)院析構(gòu)方法執(zhí)行之后,只是釋放了對(duì)象實(shí)例所占的存儲(chǔ),而并沒(méi)有將類(lèi)9OverloadOverride

Overload

是函數(shù)名的重載,同一函數(shù)名帶不同的參數(shù),就視為不同的函數(shù);而

Override

則是在子類(lèi)中,重寫(xiě)父類(lèi)聲明為

Virtual

的函數(shù)。

南陽(yáng)理工學(xué)院軟件學(xué)院OverloadOverride

Overload

是函10type

TMyHome

=

class

//定義父類(lèi);

procedure

Haha;virtual;

TMyclass

=

class(TMyHome)

//定義子類(lèi);

procedure

Haha;override;

//覆蓋父類(lèi)的haha方法;

end;

procedure

TMyHome.haha;

begin

showMessage('父類(lèi)的哈哈');

end;

procedure

TMyClass.haha;

begin

inherited;//如果加上inherited就自動(dòng)加載父類(lèi)的方法。

ShowMessage('子類(lèi)的哈哈');

end;南陽(yáng)理工學(xué)院軟件學(xué)院type

TMyHome

=

class

//定義父11一般方法和類(lèi)方法一般方法就是直接用保留字procedure和function開(kāi)頭的在類(lèi)中聲明的過(guò)程和函數(shù),而類(lèi)方法則是在一般方法前面使用了保留字class的方法。與一般方法只能由實(shí)例對(duì)象來(lái)調(diào)用不同,類(lèi)方法既可以通過(guò)實(shí)例對(duì)象的引用來(lái)調(diào)用,又可以通過(guò)類(lèi)引用來(lái)調(diào)用。南陽(yáng)理工學(xué)院軟件學(xué)院一般方法和類(lèi)方法一般方法就是直接用保留字procedure和12方法的后向分類(lèi)與方法的前向分類(lèi)相對(duì)應(yīng),根據(jù)在聲明方法時(shí)在聲明語(yǔ)句后面所使用的保留字和指示字來(lái)對(duì)方法進(jìn)行分類(lèi)。靜態(tài)方法、虛擬方法、動(dòng)態(tài)方法、抽象方法、和消息處理方法(message消息常量)南陽(yáng)理工學(xué)院軟件學(xué)院方法的后向分類(lèi)與方法的前向分類(lèi)相對(duì)應(yīng),根據(jù)在聲明方法時(shí)在聲明13Staticmethods(靜態(tài)方法)方法默認(rèn)是靜態(tài)的。當(dāng)調(diào)用一個(gè)靜態(tài)方法時(shí),類(lèi)或?qū)ο蟊宦暶鞯念?lèi)型決定了哪種實(shí)現(xiàn)被執(zhí)行(編譯時(shí)決定)。在下面的例子中,Draw方法是靜態(tài)的。typeTFigure=classprocedureDraw;end;TRectangle=class(TFigure)procedureDraw;end;南陽(yáng)理工學(xué)院軟件學(xué)院Staticmethods(靜態(tài)方法)方法默認(rèn)是靜態(tài)的。當(dāng)14給定上面的聲明,下面的代碼演示了靜態(tài)方法執(zhí)行時(shí)的結(jié)果。在第2個(gè)Figure.Draw中,變量Figure引用的是一個(gè)TRectangle類(lèi)型的對(duì)象,但卻執(zhí)行TFigure中的Draw方法,因?yàn)镕igure變量聲明的類(lèi)型是TFigure。varFigure:TFigure;Rectangle:TRectangle;beginFigure:=TFigure.Create;Figure.Draw;//調(diào)用TFigure.DrawFigure.Destroy;Figure:=TRectangle.Create;Figure.Draw;//調(diào)用TFigure.DrawTRectangle(Figure).Draw;//調(diào)用TRectangle.DrawFigure.Destroy;Rectangle:=TRectangle.Create;Rectangle.Draw;//調(diào)用TRectangle.DrawRectangle.Destroy;end;南陽(yáng)理工學(xué)院軟件學(xué)院給定上面的聲明,下面的代碼演示了靜態(tài)方法執(zhí)行時(shí)的結(jié)果。在第215Virtualanddynamicmethods(虛擬方法和動(dòng)態(tài)方法)要實(shí)現(xiàn)虛方法或動(dòng)態(tài)方法,在聲明時(shí)包含virtual或dynamic指示字。不像靜態(tài)方法,虛方法和動(dòng)態(tài)方法能在派生類(lèi)中被覆蓋。當(dāng)調(diào)用一個(gè)被覆蓋的方法時(shí),類(lèi)或?qū)ο蟮膶?shí)際類(lèi)型決定了哪種實(shí)現(xiàn)被調(diào)用(運(yùn)行時(shí)),而不是它們被聲明的類(lèi)型。要覆蓋一個(gè)方法,使用override指示字重新聲明它就可以了。聲明被覆蓋的方法時(shí),它的參數(shù)的類(lèi)型和順序以及返回值(若有的話)必須和祖先類(lèi)相同。南陽(yáng)理工學(xué)院軟件學(xué)院Virtualanddynamicmethods(虛擬16在下面的例子中,TFigure中聲明的Draw方法在它的兩個(gè)派生類(lèi)中被覆蓋了。typeTFigure=classprocedureDraw;virtual;end;TRectangle=class(TFigure)procedureDraw;override;end;TEllipse=class(TFigure)procedureDraw;override;end;南陽(yáng)理工學(xué)院軟件學(xué)院在下面的例子中,TFigure中聲明的Draw方法在它的17給定上面的聲明,下面代碼演示了虛方法被調(diào)用時(shí)的結(jié)果,在運(yùn)行時(shí),執(zhí)行方法的變量,它的實(shí)際類(lèi)型是變化的。varFigure:TFigure;beginFigure:=TRectangle.Create;Figure.Draw;//調(diào)用TRectangle.DrawFigure.Destroy;Figure:=TEllipse.Create;Figure.Draw;//調(diào)用TEllipse.DrawFigure.Destroy;end;只有虛方法和動(dòng)態(tài)方法能被覆蓋,但是,所有方法都能被重載南陽(yáng)理工學(xué)院軟件學(xué)院給定上面的聲明,下面代碼演示了虛方法被調(diào)用時(shí)的結(jié)果,在運(yùn)行時(shí)18Virtualversusdynamic(比較虛方法和動(dòng)態(tài)方法)虛方法和動(dòng)態(tài)方法在語(yǔ)義上是相同的,唯一的不同是在運(yùn)行時(shí)決定方法調(diào)用的實(shí)現(xiàn)方式上,虛方法在速度上進(jìn)行了優(yōu)化,而動(dòng)態(tài)方法在代碼大小上做了優(yōu)化。通常情況下,虛方法是實(shí)現(xiàn)多態(tài)行為的最有效的實(shí)現(xiàn)方式。當(dāng)基類(lèi)聲明了大量的要被許多派生類(lèi)繼承的(可覆蓋的)方法、但只是偶爾才覆蓋時(shí),動(dòng)態(tài)方法還是比較有用的。南陽(yáng)理工學(xué)院軟件學(xué)院Virtualversusdynamic(比較虛方法和動(dòng)19Abstractmethods(抽象方法)抽象方法是虛方法或動(dòng)態(tài)方法,并且在聲明它的類(lèi)中沒(méi)有實(shí)現(xiàn),而是由它的派生類(lèi)來(lái)實(shí)現(xiàn)。聲明抽象方法時(shí),必須在virtual或dynamic后面使用abstract指示字。比如,

procedureDoSomething;virtual;abstract;只有當(dāng)抽象方法在一個(gè)類(lèi)中被覆蓋時(shí),你才能使用這個(gè)類(lèi)或它的實(shí)例進(jìn)行調(diào)用。南陽(yáng)理工學(xué)院軟件學(xué)院Abstractmethods(抽象方法)抽象方法是20Messagemethods(Message方法)Message方法用來(lái)響應(yīng)動(dòng)態(tài)分派的消息。Message方法在各個(gè)平臺(tái)上都是支持的,VCL使用message方法來(lái)響應(yīng)Windows消息,CLX不使用message方法來(lái)響應(yīng)系統(tǒng)事件。在聲明方法時(shí),通過(guò)包含message指示字來(lái)創(chuàng)建一個(gè)message方法,并在message后面跟一個(gè)介于1到49151之間的整數(shù)常量,它指定消息的號(hào)碼(ID)。對(duì)于VCL控件(control),message方法中的整數(shù)常量可以是Messages單元中定義的Windows消息號(hào)碼,這里還定義了相應(yīng)的記錄類(lèi)型。一個(gè)message方法必須是具有一個(gè)單一var參數(shù)的過(guò)程。比如,在Windows下:typeTTextBox=class(TCustomControl)privateprocedureWMChar(varMessage:TWMChar);messageWM_CHAR;...end;南陽(yáng)理工學(xué)院軟件學(xué)院Messagemethods(Message方法)21Self變量及其使用對(duì)于一般方法來(lái)說(shuō),self是對(duì)調(diào)用該方法的類(lèi)實(shí)例的引用;而對(duì)于類(lèi)方法來(lái)說(shuō),self則是對(duì)該方法所在類(lèi)的類(lèi)引用。編譯器會(huì)將self當(dāng)作一個(gè)隱含參數(shù)傳遞到所有的方法中共我們使用。南陽(yáng)理工學(xué)院軟件學(xué)院Self變量及其使用對(duì)于一般方法來(lái)說(shuō),self是對(duì)調(diào)用該方法22加強(qiáng)做責(zé)任心,責(zé)任到人,責(zé)任到位才是長(zhǎng)久的發(fā)展。12月-2212月-22Thursday,December29,2022弄虛作假要不得,踏實(shí)肯干第一名。12:31:2612:31:2612:3112/29/202212:31:26PM安全象只弓,不拉它就松,要想保安全,常把弓弦繃。12月-2212:31:2612:31Dec-2229-Dec-22重于泰山,輕于鴻毛。12:31:2612:31:2612:31Thursday,December29,2022安全在于心細(xì),事故出在麻痹。12月-2212月-2212:31:2612:31:26December29,2022加強(qiáng)自身建設(shè),增強(qiáng)個(gè)人的休養(yǎng)。2022年12月29日12:31下午12月-2212月-22追求至善憑技術(shù)開(kāi)拓市場(chǎng),憑管理增創(chuàng)效益,憑服務(wù)樹(shù)立形象。29十二月202212:31:26下午12:31:2612月-22嚴(yán)格把控質(zhì)量關(guān),讓生產(chǎn)更加有保障。十二月2212:31下午12月-2212:31December29,2022重標(biāo)準(zhǔn),嚴(yán)要求,安全第一。2022/12/2912:31:2612:31:2629December2022好的事情馬上就會(huì)到來(lái),一切都是最好的安排。12:31:26下午12:31下午12:31:2612月-22每天都是美好的一天,新的一天開(kāi)啟。12月-2212月-2212:3112:31:2612:31:26Dec-22務(wù)實(shí),奮斗,成就,成功。2022/12/2912:31:26Thursday,December29,2022相信相信得力量,創(chuàng)造應(yīng)創(chuàng)造的事情。12月-222022/12/2912:31:2612月-22謝謝大家!加強(qiáng)做責(zé)任心,責(zé)任到人,責(zé)任到位才是長(zhǎng)久的發(fā)展。12月-2223方法南陽(yáng)理工學(xué)院軟件學(xué)院Delphi開(kāi)發(fā)基礎(chǔ)方法南陽(yáng)理工學(xué)院軟件學(xué)院24方法overview方法是類(lèi)的主要成員。方法是在一個(gè)對(duì)象里執(zhí)行特定操作、實(shí)現(xiàn)特定功能的過(guò)程和函數(shù),反映的是對(duì)象的行為。方法和普通過(guò)程和函數(shù)例程存在的不同方法在類(lèi)中聲明,在方法定義時(shí)必須在方法名稱(chēng)前面加上類(lèi)名限定符。在方法內(nèi)部可以直接使用Delphi語(yǔ)言預(yù)定義的變量標(biāo)識(shí)符self,它是對(duì)調(diào)用方法的對(duì)象實(shí)例或類(lèi)的引用。通過(guò)使用保留字和指示字,可以將方法分為多種不同的類(lèi)型。南陽(yáng)理工學(xué)院軟件學(xué)院方法overview方法是類(lèi)的主要成員。方法是在一個(gè)對(duì)象里執(zhí)25方法的前向分類(lèi)所謂方法的前向分類(lèi),就是根據(jù)聲明方法時(shí)開(kāi)頭所使用的保留字,將方法分為構(gòu)造方法(constructor),析構(gòu)方法(destructor),類(lèi)方法(classprocedure、classfunction)和一般方法。南陽(yáng)理工學(xué)院軟件學(xué)院方法的前向分類(lèi)所謂方法的前向分類(lèi),就是根據(jù)聲明方法時(shí)開(kāi)頭所使26構(gòu)造方法構(gòu)造方法用保留字constructor開(kāi)頭,用來(lái)創(chuàng)建和初始化實(shí)例對(duì)象。默認(rèn)的構(gòu)造方法在創(chuàng)建實(shí)例對(duì)象的時(shí)候?qū)⑵鋽?shù)據(jù)域初始化為零。每一個(gè)類(lèi)都至少具有一個(gè)命名為create的默認(rèn)構(gòu)造方法。但是根據(jù)數(shù)據(jù)與初始化的需要,也可以在類(lèi)中引入多個(gè)構(gòu)造方法,通常,新增的構(gòu)造方法均以create命名并以重載(overload)的方式引入。南陽(yáng)理工學(xué)院軟件學(xué)院構(gòu)造方法構(gòu)造方法用保留字constructor開(kāi)頭,用來(lái)創(chuàng)建27聲明構(gòu)造方法不能指定返回值,雖然沒(méi)有指定返回值,但是構(gòu)造方法返回對(duì)它所創(chuàng)建的對(duì)象的實(shí)例的引用。構(gòu)造方法通常由類(lèi)來(lái)引用,以創(chuàng)建該類(lèi)的實(shí)例對(duì)象并對(duì)其進(jìn)行初始化,構(gòu)造方法也可以由對(duì)象來(lái)引用,以執(zhí)行構(gòu)造方法中的語(yǔ)句來(lái)完成對(duì)象數(shù)據(jù)的賦值。南陽(yáng)理工學(xué)院軟件學(xué)院聲明構(gòu)造方法不能指定返回值,雖然沒(méi)有指定返回值,但是構(gòu)造方法28創(chuàng)建重載帶有參數(shù)的的構(gòu)造函數(shù)來(lái)實(shí)現(xiàn)對(duì)數(shù)據(jù)域的賦值。使用overload和不使用overload的區(qū)別南陽(yáng)理工學(xué)院軟件學(xué)院創(chuàng)建重載帶有參數(shù)的的構(gòu)造函數(shù)來(lái)實(shí)現(xiàn)對(duì)數(shù)據(jù)域的賦值。南陽(yáng)理工學(xué)29析構(gòu)方法析構(gòu)方法用保留字destructor開(kāi)頭,用來(lái)釋放實(shí)例對(duì)象所占用的存儲(chǔ)從而銷(xiāo)毀對(duì)象。每個(gè)類(lèi)都具有方法destroy來(lái)對(duì)對(duì)象進(jìn)行析構(gòu)。當(dāng)使用自定義的destroy方法時(shí),應(yīng)當(dāng)使用override進(jìn)行覆蓋。南陽(yáng)理工學(xué)院軟件學(xué)院析構(gòu)方法析構(gòu)方法用保留字destructor開(kāi)頭,用來(lái)釋放實(shí)30Free和destroy不同procedureTObject.Free;beginifSelf<>nilthenDestroy;end;Free方法確定在對(duì)象引用非空的時(shí)候析構(gòu)對(duì)象,這樣就可以避免在程序中析構(gòu)一個(gè)已經(jīng)析構(gòu)的對(duì)象實(shí)例或者析構(gòu)一個(gè)尚未創(chuàng)建的對(duì)象實(shí)例時(shí)所帶來(lái)的問(wèn)題。因此通常使用free來(lái)完成對(duì)象的析構(gòu),在確保不會(huì)發(fā)生問(wèn)題的時(shí)候,也可以使用destroy來(lái)析構(gòu)對(duì)象。南陽(yáng)理工學(xué)院軟件學(xué)院Free和destroy不同procedureTObjec31析構(gòu)方法執(zhí)行之后,只是釋放了對(duì)象實(shí)例所占的存儲(chǔ),而并沒(méi)有將類(lèi)變量中保存的引用值清除。在實(shí)例對(duì)象被釋放之后,通常應(yīng)當(dāng)將類(lèi)變量的值設(shè)置為nil。南陽(yáng)理工學(xué)院軟件學(xué)院析構(gòu)方法執(zhí)行之后,只是釋放了對(duì)象實(shí)例所占的存儲(chǔ),而并沒(méi)有將類(lèi)32OverloadOverride

Overload

是函數(shù)名的重載,同一函數(shù)名帶不同的參數(shù),就視為不同的函數(shù);而

Override

則是在子類(lèi)中,重寫(xiě)父類(lèi)聲明為

Virtual

的函數(shù)。

南陽(yáng)理工學(xué)院軟件學(xué)院OverloadOverride

Overload

是函33type

TMyHome

=

class

//定義父類(lèi);

procedure

Haha;virtual;

TMyclass

=

class(TMyHome)

//定義子類(lèi);

procedure

Haha;override;

//覆蓋父類(lèi)的haha方法;

end;

procedure

TMyHome.haha;

begin

showMessage('父類(lèi)的哈哈');

end;

procedure

TMyClass.haha;

begin

inherited;//如果加上inherited就自動(dòng)加載父類(lèi)的方法。

ShowMessage('子類(lèi)的哈哈');

end;南陽(yáng)理工學(xué)院軟件學(xué)院type

TMyHome

=

class

//定義父34一般方法和類(lèi)方法一般方法就是直接用保留字procedure和function開(kāi)頭的在類(lèi)中聲明的過(guò)程和函數(shù),而類(lèi)方法則是在一般方法前面使用了保留字class的方法。與一般方法只能由實(shí)例對(duì)象來(lái)調(diào)用不同,類(lèi)方法既可以通過(guò)實(shí)例對(duì)象的引用來(lái)調(diào)用,又可以通過(guò)類(lèi)引用來(lái)調(diào)用。南陽(yáng)理工學(xué)院軟件學(xué)院一般方法和類(lèi)方法一般方法就是直接用保留字procedure和35方法的后向分類(lèi)與方法的前向分類(lèi)相對(duì)應(yīng),根據(jù)在聲明方法時(shí)在聲明語(yǔ)句后面所使用的保留字和指示字來(lái)對(duì)方法進(jìn)行分類(lèi)。靜態(tài)方法、虛擬方法、動(dòng)態(tài)方法、抽象方法、和消息處理方法(message消息常量)南陽(yáng)理工學(xué)院軟件學(xué)院方法的后向分類(lèi)與方法的前向分類(lèi)相對(duì)應(yīng),根據(jù)在聲明方法時(shí)在聲明36Staticmethods(靜態(tài)方法)方法默認(rèn)是靜態(tài)的。當(dāng)調(diào)用一個(gè)靜態(tài)方法時(shí),類(lèi)或?qū)ο蟊宦暶鞯念?lèi)型決定了哪種實(shí)現(xiàn)被執(zhí)行(編譯時(shí)決定)。在下面的例子中,Draw方法是靜態(tài)的。typeTFigure=classprocedureDraw;end;TRectangle=class(TFigure)procedureDraw;end;南陽(yáng)理工學(xué)院軟件學(xué)院Staticmethods(靜態(tài)方法)方法默認(rèn)是靜態(tài)的。當(dāng)37給定上面的聲明,下面的代碼演示了靜態(tài)方法執(zhí)行時(shí)的結(jié)果。在第2個(gè)Figure.Draw中,變量Figure引用的是一個(gè)TRectangle類(lèi)型的對(duì)象,但卻執(zhí)行TFigure中的Draw方法,因?yàn)镕igure變量聲明的類(lèi)型是TFigure。varFigure:TFigure;Rectangle:TRectangle;beginFigure:=TFigure.Create;Figure.Draw;//調(diào)用TFigure.DrawFigure.Destroy;Figure:=TRectangle.Create;Figure.Draw;//調(diào)用TFigure.DrawTRectangle(Figure).Draw;//調(diào)用TRectangle.DrawFigure.Destroy;Rectangle:=TRectangle.Create;Rectangle.Draw;//調(diào)用TRectangle.DrawRectangle.Destroy;end;南陽(yáng)理工學(xué)院軟件學(xué)院給定上面的聲明,下面的代碼演示了靜態(tài)方法執(zhí)行時(shí)的結(jié)果。在第238Virtualanddynamicmethods(虛擬方法和動(dòng)態(tài)方法)要實(shí)現(xiàn)虛方法或動(dòng)態(tài)方法,在聲明時(shí)包含virtual或dynamic指示字。不像靜態(tài)方法,虛方法和動(dòng)態(tài)方法能在派生類(lèi)中被覆蓋。當(dāng)調(diào)用一個(gè)被覆蓋的方法時(shí),類(lèi)或?qū)ο蟮膶?shí)際類(lèi)型決定了哪種實(shí)現(xiàn)被調(diào)用(運(yùn)行時(shí)),而不是它們被聲明的類(lèi)型。要覆蓋一個(gè)方法,使用override指示字重新聲明它就可以了。聲明被覆蓋的方法時(shí),它的參數(shù)的類(lèi)型和順序以及返回值(若有的話)必須和祖先類(lèi)相同。南陽(yáng)理工學(xué)院軟件學(xué)院Virtualanddynamicmethods(虛擬39在下面的例子中,TFigure中聲明的Draw方法在它的兩個(gè)派生類(lèi)中被覆蓋了。typeTFigure=classprocedureDraw;virtual;end;TRectangle=class(TFigure)procedureDraw;override;end;TEllipse=class(TFigure)procedureDraw;override;end;南陽(yáng)理工學(xué)院軟件學(xué)院在下面的例子中,TFigure中聲明的Draw方法在它的40給定上面的聲明,下面代碼演示了虛方法被調(diào)用時(shí)的結(jié)果,在運(yùn)行時(shí),執(zhí)行方法的變量,它的實(shí)際類(lèi)型是變化的。varFigure:TFigure;beginFigure:=TRectangle.Create;Figure.Draw;//調(diào)用TRectangle.DrawFigure.Destroy;Figure:=TEllipse.Create;Figure.Draw;//調(diào)用TEllipse.DrawFigure.Destroy;end;只有虛方法和動(dòng)態(tài)方法能被覆蓋,但是,所有方法都能被重載南陽(yáng)理工學(xué)院軟件學(xué)院給定上面的聲明,下面代碼演示了虛方法被調(diào)用時(shí)的結(jié)果,在運(yùn)行時(shí)41Virtualversusdynamic(比較虛方法和動(dòng)態(tài)方法)虛方法和動(dòng)態(tài)方法在語(yǔ)義上是相同的,唯一的不同是在運(yùn)行時(shí)決定方法調(diào)用的實(shí)現(xiàn)方式上,虛方法在速度上進(jìn)行了優(yōu)化,而動(dòng)態(tài)方法在代碼大小上做了優(yōu)化。通常情況下,虛方法是實(shí)現(xiàn)多態(tài)行為的最有效的實(shí)現(xiàn)方式。當(dāng)基類(lèi)聲明了大量的要被許多派生類(lèi)繼承的(可覆蓋的)方法、但只是偶爾才覆蓋時(shí),動(dòng)態(tài)方法還是比較有用的。南陽(yáng)理工學(xué)院軟件學(xué)院Virtualversusdynamic(比較虛方法和動(dòng)42Abstractmethods(抽象方法)抽象方法是虛方法或動(dòng)態(tài)方法,并且在聲明它的類(lèi)中沒(méi)有實(shí)現(xiàn),而是由它的派生類(lèi)來(lái)實(shí)現(xiàn)。聲明抽象方法時(shí),必須在virtual或dynamic后面使用abstract指示字。比如,

procedureDoSomething;virtual;abstract;只有當(dāng)抽象方法在一個(gè)類(lèi)中被覆蓋時(shí),你才能使用這個(gè)類(lèi)或它的實(shí)例進(jìn)行調(diào)用。南陽(yáng)理工學(xué)院軟件學(xué)院Abstractmethods(抽象方法)抽象方法是43Messagemethods(Message方法)Message方法用來(lái)響應(yīng)動(dòng)態(tài)分派的消息。Message方法在各個(gè)平臺(tái)上都是支持的,VCL使用message方法來(lái)響應(yīng)Windows消息,CLX不使用message方法來(lái)響應(yīng)系統(tǒng)事件。在聲明方法時(shí),通過(guò)包含message指示字來(lái)創(chuàng)建一個(gè)message方法,并在message后面跟一個(gè)介于1到49151之間的整數(shù)常量,它指定消息的號(hào)碼(ID)。對(duì)于VCL控件(control),message方法中的整數(shù)常量可以是Messages單元中定義的Windows消息號(hào)碼,這里還定義了相應(yīng)的記錄類(lèi)型。一個(gè)message方法必須是具有一個(gè)單一var參數(shù)的過(guò)程。

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論