⒈什么是過(guò)程類(lèi)型 把一個(gè)變量聲明為過(guò)程類(lèi)型,可以把一個(gè)過(guò)程或函數(shù)作為一個(gè)整體賦給這個(gè)變量或者把這個(gè)變量作為參數(shù)傳遞給其它過(guò)程或函數(shù)。 聲明一個(gè)過(guò)程類(lèi)型的語(yǔ)法同聲明一個(gè)過(guò)程或函數(shù)的首部語(yǔ)法相似,不同的是在保留字Procedure或fun- ction后不需要有過(guò)程或函數(shù)的標(biāo)識(shí)符,中國(guó)自學(xué)編程網(wǎng)首發(fā),例如: Type Proc1=Procedure; Proc2=Procedure(VarX,Y:integer); Proc3=Function(X:Double):Double; 上例中,聲明了三個(gè)過(guò)程類(lèi)型,第一個(gè)是不帶任何參數(shù)的過(guò)程,第二個(gè)是帶兩個(gè)參數(shù)的過(guò)程,第三個(gè)是帶一個(gè)Double類(lèi)型的參數(shù)并返回Double類(lèi)型值的函數(shù)。 同聲明一個(gè)過(guò)程或函數(shù)一樣,您在聲明一個(gè)過(guò)程類(lèi)型時(shí)可以指定一種調(diào)用約定方式,缺省就是Register方式。 下面我們舉例說(shuō)明過(guò)程類(lèi)型的用法: Type SwapProc=Procedure(Var X,Y:Integer); MathFunc=Function(X:Double):Double; {以上是類(lèi)型聲明部分} Var P:SwapProc; F:MathFunc; {以上把P說(shuō)明為SwapProc 類(lèi)型的變量,把F說(shuō)明為MathFunc類(lèi)型的變量} Procedure Swap(var A,B:integer); Var Temp:Integer; Begin Temp:=A; A:=B; B:=Temp; End; Function Tan(Angle:Double); Begin Tan:=Sin(Angle)/Cos(Angle); End; {以上定義了一個(gè)過(guò)程和一個(gè)函數(shù)} P:=Swap; F:=Tan; {以上把Swap過(guò)程賦給P變量,把Tan函數(shù)賦給F變量} P(I,J); {相當(dāng)于調(diào)用Swap(I,J)} X:=F(X); {相當(dāng)于X:=tan(X)} 這里舉例說(shuō)明了一個(gè)過(guò)程或函數(shù)可以賦給一個(gè)過(guò)程類(lèi)型的變量,事實(shí)上過(guò)程類(lèi)型的數(shù)據(jù)還可以作為參數(shù)傳遞給其它過(guò)程或函數(shù)。 注意:不能把過(guò)程類(lèi)型直接作為函數(shù)的返回類(lèi)型,不過(guò)您可以讓函數(shù)的返回類(lèi)型為指針類(lèi)型,讓指針指向一個(gè)過(guò)程或函數(shù)的地址。 當(dāng)把一個(gè)過(guò)程或函數(shù)賦給一個(gè)過(guò)程類(lèi)型的變量時(shí)要注意賦值相容,只有滿(mǎn)足下列條件才是賦值相容的。 調(diào)用約定方式必須相同。 參數(shù)個(gè)數(shù)必須相同,相應(yīng)的其數(shù)據(jù)類(lèi)型必須相同,但參數(shù)名不一定必須相同。 函數(shù)的返回類(lèi)型必須相同。 Object Pascal規(guī)定,nil同任何過(guò)程類(lèi)型相容。 過(guò)程類(lèi)型根據(jù)其是否運(yùn)用于對(duì)象分為兩大類(lèi):一類(lèi)是全局過(guò)程指針,另一類(lèi)是方法指針。 全局過(guò)程指針指向的是全局的過(guò)程或函數(shù),例如上例中的SwapProc和MathFunc,這類(lèi)過(guò)程類(lèi)型在聲明沒(méi)有Of object 部分。 方法指針在明時(shí)必須加上Of object,表示它所指向的是一個(gè)對(duì)象的方法,程序示例如下: Type TNotifyEvent=Procedure (Sender:Tobject) Of Object; 有了方法指針后,要擴(kuò)展一個(gè)對(duì)象,不需要重新派生出一個(gè)新的,只要把其它對(duì)象的方法賦給個(gè)這個(gè)方法指針就可以了,這樣可以避免對(duì)象的層次過(guò)多,m.zgna.net 。 方法指針通常用于把對(duì)象的事件同一段已有的代碼(可能是其它對(duì)象的)相聯(lián)系起來(lái),例如您想定義用戶(hù)單擊按鈕時(shí)的缺省行為,您不必從 Tbutton對(duì)象派生出一個(gè)新對(duì)象并重載它的響應(yīng)單擊的行為, 您只需要把一段已有的代碼同一個(gè)方法指針聯(lián)系起來(lái)。 方法指針的示例如下: Type TNotifyEvent=Procedure(Sender:Tobject) Of Object; Type TAnObject=Class(TObject) FOnClick:TNotifyEvent; End; TAnOtherObject=Class(TObject) Procedure AMethod(Sender:Tobject); end; Var AnObject:TAnObject; 您現(xiàn)在的位置:首頁(yè)--開(kāi)發(fā)語(yǔ)言--DELPHI編程--DELPHI基礎(chǔ)--瀏覽文章 delphi過(guò)程類(lèi)型基礎(chǔ)學(xué)習(xí)
點(diǎn)擊:220 發(fā)布日期:2007-11-27 20:07:24 進(jìn)入論壇
AnOtherObject:TAnotherObject; Begin AnObject:=TAnobject.Create; AnotherObject:=TAnotherObject.Create; AnObject.FOnClick:=AnotherObject.Amethod; end;
|