Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Virtual vs. Dynamic (https://www.delphipraxis.net/156833-virtual-vs-dynamic.html)

Gloegg_FHBI 16. Dez 2010 14:46

Delphi-Version: 2010

Virtual vs. Dynamic
 
Hi

Ich bin grade beim schreiben von ein paar Klassen über diese Modifizierer gestolpert.

Delphi-Quellcode:
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;
Dies liefert beim compilen aber diese Fehlermeldung:
[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?

Bernhard Geyer 16. Dez 2010 15:01

AW: Virtual vs. Dynamic
 
Zitat:

Zitat von Gloegg_FHBI (Beitrag 1068916)
Kann mir jemand etwas genauer beschreiben worin nun der Unterschied liegt und wann man dynamic jemals braucht?

Wurde schon gesagt: Wenn man für ein Zielsystem arbeitet das bezüglich Ram "schwach auf der Brust" ist.

Deep-Sea 16. Dez 2010 16:11

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:

guinnes 16. Dez 2010 16:13

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 05:10 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz