DELPHI中的靜態虛擬及動態方法函式的區別

2021-05-02 05:47:41 字數 697 閱讀 1360

1、靜態方法是方法的預設型別,對它就像對通常的過程和函式那樣呼叫,編譯器知道這些方法的位址,所以呼叫乙個靜態方法時它能把執行資訊靜態地鏈結進可執行檔案,所以,靜態方法速度最快,但它們卻不能被覆蓋來支援多型性。

2、虛擬方法和靜態方法的呼叫方式相同。由於虛擬方法能被覆蓋,在**中呼叫乙個指定的虛擬方法時編譯器並不知道它的位址,因此,編譯器通過建立虛擬方法表(vmt)來查詢在執行時的函式位址。所有的虛擬方法在執行時通過vmt來高度,乙個物件的vmt表中除了自己定義的虛擬方法外,還有它的祚的所有的虛擬方法,因此虛擬方法比動態方法用的記憶體要多,但它執行得比較快。

3、動態方法跟虛擬方法基本相似,只是它們的高度系統不同。編譯器為每乙個動態方法指定乙個獨一無二的數字,用這個數字和動態方法的位址構造乙個動態方法表(dmt)。不像vmt表,在dmt表中僅有它宣告的動態方法,並且這個方法需要祖先的dmt表來訪問它蓁的動態方法。正因為這樣動態方法比虛擬方法用的記憶體要少,但執行起來羅慢,因為有可能要到祚物件的dmt中查詢動態法。

4、op通過覆蓋使一方法在不同的派生類間表現出不同的行為。op中能被覆蓋的方法是在宣告時被標識為virtual或dynamic的方法。為了覆蓋乙個方法,在派生類的宣告中用override代替virtual或dynamic。用了override後,編譯器就會用新的方法替換vmt中原先的方法,而原先的方法也還存在,而如果用override再次宣告乙個靜態方法,則是真正的覆蓋,是用新的方法完全替換在祖先類中的同明方法。

Delphi 動態與靜態呼叫DLL

摘要 本文闡述了 windows 環境下動態鏈結庫的概念和特點,對靜態呼叫和動態呼叫兩種呼叫方式作出了比較,並給出了 delphi 中應用動態鏈結庫的例項。一 動態鏈結庫的概念 動態鏈結庫 dynamic link library 縮寫為 dll 是乙個可以被其它應用程式共享的程式模組,其中封裝了一...

Delphi程式中動態生成控制項的方法及應用

一 delphi中生成控制項的兩種方法 1 form 表單 設計中生成控制項 在進行form設計時,直接在控制項工具箱選擇所需控制項,再設定其屬性與響應事件,這種方法比較常見。2 程式中動態生成控制項 1 定義控制項型別 varbutton1 tbutton 2 生成控制項 button1 tbut...

Delphi中的動態陣列總結

今天做的乙個專案中要使用一大串資料進行處理。如何對這一系列的資料進行儲存成為乙個首要的問題。唉,delphi啊,你何時才能支援泛型啊。在c c 這都不是問題了啊。在delphi裡只有tstringlist這個容器可以使用,但是它是處理字串的。一進一出,需要大量的typecast時間。用鍊錶?不值得。...