呼叫方法時,應用程式如何決定執行哪段代碼?Delphi 提供三種分派方式:
override),擴展而非取代祖先行為預設類型。編譯器決定位址並直接連結。衍生類別宣告同名靜態方法將取代祖先方法,非覆寫。範例:TSecondComponent.Move 隱藏 TFirstComponent.Move。
宣告加 virtual,在 VMT 建立入口。衍生類別用 override 覆寫。覆寫條件:祖先存在同名虛擬方法、簽章一致。若祖先為靜態則編譯錯誤。範例展示 Flash 覆寫與 Move 隱藏的差異。
宣告加 dynamic,無 VMT 入口,以編號儲存位址。分派時依繼承順序反向查找動態方法列表。分派較虛擬方法慢,適合低頻率呼叫(如訊息處理)。訊息處理程序分派機制與動態方法相同,僅宣告語法不同。
Object Pascal 中物件實為指標,編譯器自動處理。傳遞物件參數時屬「值傳遞」(實為指標複製),不可加 var,否則成雙重指標。
安裝前即可測試執行期行為,模擬 IDE 放置元件動作:
uses 加入元件單元public 區宣告元件變數(非 IDE 管理區)OnCreate 事件OnCreate 中建構元件,Owner 傳 SelfParent 屬性(通常為 Self)Left、Top 等)procedure TForm1.FormCreate(Sender: TObject);
begin
NewComponent := TNewComponent.Create(Self);
NewComponent.Parent := Self;
NewComponent.Left := 12;
end;
注意:手動加入的欄位不寫入 DFM,關閉表單時無需 RemoveControl。