Zitat von
oki:
Als ich aber mal bei den Jedis in den Source geschaut habe ist mir aufgefallen, dass dort Componenten teilweise auch Interfaces in der Klassenableitung haben. Richtig hinter gestiegen bin ich da zwar nicht, aber auch daher kommt meine Vermutung, dass man das machen kann.
Ja, TComponent implementiert das Interface
IUnknown auf spezielle Weise.
Wenn das Property
VCLComObject = nil ist, dann wird die Referenzzählung ausser Kraft gesetzt und man kann
Objekt- und Interfacereferenzen mischen.
Also man kann folgendes schreiben:
Delphi-Quellcode:
TCompTransactionList = class(TComponent, ITransactionList)
...
var
tl : TComponent;
intf : ITransactionList
begin
tl := TCompTransactionList.Create(nil);
...
intf := tl as ITransactionList;
intf.ExecuteTransactions;
intf := nil; // wir haben Glück, das Objekt tl wird nicht zerstört
...
tl.Free;