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