//以上定義了一個(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ò)程類型的變量,事實(shí)上過(guò)程類型的數(shù)據(jù)還可以作為參數(shù)傳遞給其它過(guò)程或函數(shù)。
注意:不能把過(guò)程類型直接作為函數(shù)的返回類型,不過(guò)您可以讓函數(shù)的返回類型為指針類型,讓指針指向一個(gè)過(guò)程或函數(shù)的地址。
當(dāng)把一個(gè)過(guò)程或函數(shù)賦給一個(gè)過(guò)程類型的變量時(shí)要注意賦值相容,只有滿足下列條件才是賦值相容的。 調(diào)用約定方式必須相同。
參數(shù)個(gè)數(shù)必須相同,相應(yīng)的其數(shù)據(jù)類型必須相同,但參數(shù)名不一定必須相同。
函數(shù)的返回類型必須相同。
Object Pascal規(guī)定,nil同任何過(guò)程類型相容。
過(guò)程類型根據(jù)其是否運(yùn)用于對(duì)象分為兩大類:一類是全局過(guò)程指針,另一類是方法指針。
全局過(guò)程指針指向的是全局的過(guò)程或函數(shù),例如上例中的SwapProc和MathFunc,這類過(guò)程類型在聲明沒有Of object 部分。
方法指針在明時(shí)必須加上Of object,表示它所指向的是一個(gè)對(duì)象的方法,程序示例如下:
Type TNotifyEvent=Procedure (Sender:Tobject) Of Object;
有了方法指針后,要擴(kuò)展一個(gè)對(duì)象,不需要重新派生出一個(gè)新的,只要把其它對(duì)象的方法賦給個(gè)這個(gè)方法指針就可以了,這樣可以避免對(duì)象的層次過(guò)多。
方法指針通常用于把對(duì)象的事件同一段已有的代碼(可能是其它對(duì)象的)相聯(lián)系起來(lái),例如您想定義用戶單擊按鈕時(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;
AnOtherObject:TAnotherObject;
Begin AnObject:=TAnobject.Create;
AnotherObject:=TAnotherObject.Create;
AnObject.FOnClick:=AnotherObject.Amethod;
end;
相關(guān)推薦:2009年9月計(jì)算機(jī)等考二級(jí)ACCESS模擬試題匯總北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |