> U cemu je "stvarna" razlika izmedju virtual i dynamic keyword-a u delphi-u.
Oba rade istu stvar, razlikuju se u načinu implementacije. virtual metode su indeksirane u VMT tabeli klase tako da se pri pozivanju trenutno lociraju, dynamic se lociraju pretragom kroz sve metode u početnoj klasi kao i u parent klasama.
> Kako sam procitao u zvanicnoj dokumentaciiji: "virtual is good for speed, while dynamic is good for size".
Da, virtual zahtevaju po 4 bajta u osvnoj klasi kao i u izvedenim klasama, dynamic 0 bajtova ali se zato sporije pretražuju.
> Mene interesuje kako se ovo manifestuje u "praksi" na "stvarnim" projektima/klasama, posto moram da
> izmenim njih nekoliko dok se ortak ne vrati sa odmora :)
Imaš li razloga da menjaš? Virtual se koristi po pravilu dok dynamic samo kada izvedene klase retko overajduju metodu (klasa ima dosta izvedenih klasa ali samo poneka overajduje metodu). Pogledaj TPersistent.GetOwner lep primer za dynamic upotrebu.
Iz helpa:
Virtual versus dynamic
Virtual and dynamic methods are semantically equivalent. They differ only in the implementation of method-call dispatching at runtime. Virtual methods optimize for speed, while dynamic methods optimize for code size.
In general, virtual methods are the most efficient way to implement polymorphic behavior. Dynamic methods are useful when a base class declares many overridable methods which are inherited by many descendant classes in an application, but only occasionally overridden.
Note
Only use dynamic methods if there is a clear, observable benefit. Generally, use virtual methods.