![]() |
Delphi-Version: 2010
Virtual vs. Dynamic
Hi
Ich bin grade beim schreiben von ein paar Klassen über diese Modifizierer gestolpert.
Delphi-Quellcode:
Dies liefert beim compilen aber diese Fehlermeldung:
TBase = class
protected procedure put(Index : integer; value : boolean); dynamic; abstract; function get(Index : integer) : boolean; dynamic; abstract; public property Channels[Index : integer] : boolean read get write put; end; [DCC Fehler] Unit1.pas(15): E2148 Dynamische Methode oder Methoden zur Nachrichtenbehandlung ist hier nicht erlaubt Verwendet man nun virtual statt dynamic läuft es wunderbar. Bei einer kurzen Recherche konnte ich nur finden, das man lieber virtual verwenden soll und das der einzige Unterschied ist, dass virtual etwas mehr Speicher verbraucht, dafür schnelleren Code produziert, während dynamic weniger Speicher braucht aber etwas langsameren Code produziert. Kann mir jemand etwas genauer beschreiben worin nun der Unterschied liegt und wann man dynamic jemals braucht? |
AW: Virtual vs. Dynamic
Zitat:
|
AW: Virtual vs. Dynamic
Na ob ein kleiner Eintrag in der VMT da wirklich so viel ausmacht?!
Manche Dinge kann man auch nur als dynamic und nicht als virtual deklarieren ... was war das doch gleich nochmal? :gruebel: |
AW: Virtual vs. Dynamic
Ganz grob :
Jede virtuellen Methode erhält einen Eintrag in der Virtuellen Methoden Tabelle, jedesmal, bei jedem Nachfolger. Die Methode wird immer über die VMT gerufen. Dynamische Methoden erhalten nur dann einen Eintrag in der DynamicTable, wenn sie überschrieben werden. Die Methode wird über eine Procedure gerufen, die die Nummer der Methode mit einer Liste vergleicht und bei einem Treffer die dazugehörige Adresse aufruft. Darum kann man wahrscheinlich eine Dynamische Methode nicht abstract machen Dass man den Unterschied merkt, kann ich mir heutzutage nicht mehr vorstellen |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:44 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz