1. 程式人生 > 實用技巧 >Delphi -類過程 procedure(Sender: TObject) of object 物件方法型別

Delphi -類過程 procedure(Sender: TObject) of object 物件方法型別

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  更新時間: