delphi中回撥函式差異

uuxa發表於2010-10-28

回撥函式有兩種形式,用在類裡面的和類外的。前者在定義回撥函式時需要在宣告最後加上of object以區分在類外呼叫情況。具體舉例如下,

[@more@]

類外情況:

TCallBack = procedure(Param1: Integer;Param2: String;...ParamX...);

TXClass = class(TObject)

FCallBack: TCallBack;

property OnCallBack: TCallBack read FCallBack write FCallBack;

procedure CallBack(Param1: Integer;Param2: String;...ParamX...);

TXClass.CallBack(Param1: Integer;Param2: String;...ParamX...);

begin

if Assigned(FCallBack) Then

FCallBack(Param1, Param2,...ParamX...);

end;

類中情況:

TCallBack = procedure(Param1: Integer;Param2: String;...ParamX...) of object;

這兩者的差異是,當在類中定義回撥函式時,如果宣告回撥函式型別時不加 of object那麼,你在類內部自定義的回撥函式便不可以指定給回撥函式,即,如下這樣非法,

假定回撥函式類A,和使用回撥函式類B,在B類中自定義了回撥函式SomeCallBack,則,如下這樣賦值delphi會提示非法,

A.OnCallBack := B.SomeCallBack;

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7416120/viewspace-1040547/,如需轉載,請註明出處,否則將追究法律責任。

相關文章