方法的前向分類與后向分類_第1頁
方法的前向分類與后向分類_第2頁
方法的前向分類與后向分類_第3頁
方法的前向分類與后向分類_第4頁
方法的前向分類與后向分類_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

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

Overload

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

Override

則是在子類中,重寫父類聲明為

Virtual

的函數(shù)。

type

TMyHome

=

class

//定義父類;

procedure

Haha;virtual;

TMyclass

=

class(TMyHome)

//定義子類;

procedure

Haha;override;

//覆蓋父類的haha方法;

end;

procedure

TMyHome.haha;

begin

showMessage('父類的哈哈');

end;

procedure

TMyClass.haha;

begin

inherited;//如果加上inherited就自動加載父類的方法。

ShowMessage('子類的哈哈');

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

procedureDoSomething;virtual;abstract;只有當(dāng)抽象方法在一個類中被覆蓋時,你才能使用這個類或它的實例進行調(diào)用。Messagemethods(Message方法)Message方法用來響應(yīng)動態(tài)分派的消息。Message方法在各個平臺上都是支持的,VCL使用message方法來響應(yīng)Windows消息,CLX不使用message方法來響應(yīng)系統(tǒng)事件。在聲明方法時,通過包含message指示字來創(chuàng)建一個message方法,并在message后面跟一個介于1到49151之間的整數(shù)常量,它指定消息的號碼(ID)。對于VCL控件(control),message方法中的整數(shù)常量可以是Messages單元中定義的

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論