Da ich aber eigentlich so gut wie immer die Delphi eigenen klassen verwende, sowas wie Tinifile oder TRegistry, kann ich diese ja nicht von einem IInterfacedObject ableiten. WIe stell ich das an, für bestehende Klassen ein Interface zu erstellen? Oder muss ich immer eine eigene KLassenableitung erstellen? Ich hoffe die Frage ist nicht zu Kindergarten, aber meine bisherige Websuche hat mich irgenwie nicht wirklich schlauer gemacht
Dazu habe ich vor vielen Jahren mal was geblogt:
Zitat:
Die Alternative könnte wie folgt aussehen:
Man deklariere eine von TInterfacedObject abgeleitete Wrapper-Klasse, welche die lästige Basisimplementation von IUnknown übernimmt und die darüber hinausgehende Implementation von ISomeInterface an TSomeClass delegiert:
Delphi-Quellcode:
type
TSomeWrapper = class(TInterfacedObject, ISomeInterface)
protected
fSomeClass: TSomeClass;
property SomeClass: TSomeClass read fSomeClass implements ISomeInterface;
public
constructor Create(_SomeClass: TSomeClass);
destructor Destroy; override;
end;
...
constructor TSomeWrapper.Create(_SomeClass: TSomeClass);
begin
inherited Create;
fSomeClass := _SomeClass;
end;
destructor TSomeWrapper.Destroy;
begin
fSomeClass.Free;
inherited;
end;
Benutzt wird dieses Objekt wie folgt:
Delphi-Quellcode:
var
SomeInt: ISomeInterface;
...
SomeInt := TSomeWmapper.Create(TSomeClass.Create);
SomeInt.Method1;
...
Man erzeugt also eine Instanz von TSomeWrapper, übergibt ihr eine ebenfalls frisch erzeugte Instanz von TSomeClass, und verwendet sie als ob es sich um eine auf magische Weise auch von TInterfacedObject abgeleitete Version von TSomeClass handelte, weist sie z.B. auf eine Variable vom Typ ISomeInterface zu. Reference-Counting natürlich inklusive.
http://www.dummzeuch.de/delphi/objec...%20L%C3%B6sung
Hey Dumuzeuch,
das ist ja echt schon ewig her. Da sieht man mal was es alles aufzuholen gilt
Deine Lösung gefällt mir gut, ich versuch mal mein Glück. Danke!