首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> Delphi

Delphi 元件開發核心:方法分派機制與物件指標本質

     編輯:Delphi

19.2.1.5 面向對象技術在元件編寫中的應用(續)

3. 方法分派機制

呼叫方法時,應用程式如何決定執行哪段代碼?Delphi 提供三種分派方式:

  • 靜態:編譯期綁定,速度最快,繼承時不改變行為,無法覆寫(同名方法會隱藏祖先)
  • 虛擬:執行期查閱虛擬方法表 (VMT),支援覆寫 (override),擴展而非取代祖先行為
  • 動態:無 VMT 入口,以編號索引,節省記憶體但分派較慢,適合訊息處理

⑴ 靜態方法

預設類型。編譯器決定位址並直接連結。衍生類別宣告同名靜態方法將取代祖先方法,非覆寫。範例:TSecondComponent.Move 隱藏 TFirstComponent.Move。

⑵ 虛擬方法

宣告加 virtual,在 VMT 建立入口。衍生類別用 override 覆寫。覆寫條件:祖先存在同名虛擬方法、簽章一致。若祖先為靜態則編譯錯誤。範例展示 Flash 覆寫與 Move 隱藏的差異。

⑶ 動態方法

宣告加 dynamic,無 VMT 入口,以編號儲存位址。分派時依繼承順序反向查找動態方法列表。分派較虛擬方法慢,適合低頻率呼叫(如訊息處理)。訊息處理程序分派機制與動態方法相同,僅宣告語法不同。

⑷ 物件與指標

Object Pascal 中物件實為指標,編譯器自動處理。傳遞物件參數時屬「值傳遞」(實為指標複製),不可加 var,否則成雙重指標。

19.2.1.4 測試未安裝的元件

安裝前即可測試執行期行為,模擬 IDE 放置元件動作:

  1. 表單 uses 加入元件單元
  2. 表單 public 區宣告元件變數(非 IDE 管理區)
  3. 掛載 OnCreate 事件
  4. OnCreate 中建構元件,Owner 傳 Self
  5. 設定 Parent 屬性(通常為 Self)
  6. 設定其他屬性(Left、Top 等)
procedure TForm1.FormCreate(Sender: TObject);
begin
  NewComponent := TNewComponent.Create(Self);
  NewComponent.Parent := Self;
  NewComponent.Left := 12;
end;

注意:手動加入的欄位不寫入 DFM,關閉表單時無需 RemoveControl。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved