Delphi -類過程 procedure(Sender: TObject) of object 物件方法型別
阿新 • • 發佈:2020-09-17
Delphi -類過程 procedure(Sender: TObject) of object 物件方法型別
procedure 類過程 定義:
type
TMyPro = procedure(Sender: TObject) of object;
procedure 也是型別,可以理解為過程型別,定義過程的引數結構,可以實現過程動態賦值
例如: onclick的申明
onclick= procedure(Sender: TObject,a :integer) of object;
- procedure 指標佔4個位元組,儲存在過程的地址.
- procedure of object佔8個位元組,儲存過程的地址和類的地址
類過程與普通函式的區別:
- 與普通函式相同點:可以像一般的函式和過程一樣在類的例項裡作為物件方法呼叫;
- 與普通函式不同點:可以不通過物件,而是通過類來直接呼叫。
也就是說,一般函式和過程必須通過類的例項(物件)來呼叫,而類過程(類函式)則可以不必通過該類的例項來呼叫。通過類來呼叫函式或者過程,可以定義和實現一些不能或者不適合作為某一特定物件行為的方法。
例如,以下兩種定義
Type TMouseProc = procedure (X,Y:integer); //一種普通的過程 TMouseEvent = procedure (X,Y:integer) of Object;//一種物件方法的型別
- 兩者的區別就在於TMouseEvent型別的方法必須在一個物件裡。類方法存在一個隱藏引數self,也就是說兩者形參不一樣,所以不能相互轉換 .
- TMouseProc只是單一的函式指標型別;
- TMouseEvent是物件的函式指標,也就是物件/類的函式/方法
Delphi 示例:
procedure TForm1.AA(I: Integer); begin showmessage( 'Roy: ' + IntToStr(I)); end; procedure TForm1.Button1Click(Sender: TObject); type TMyPro = procedure (i:integer) of object ; var MyPro: TMyPro; begin MyPro:= Form1.AA; //傳遞 MyPro(1); //執行AA的事件 end;
建立時間:2020.09.17 更新時間: