Einzelnen Beitrag anzeigen

fisipjm

Registriert seit: 28. Okt 2013
251 Beiträge
 
#5

AW: Interface aus bestehenden Klassen erstellen

  Alt 19. Mai 2023, 15:07
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!
  Mit Zitat antworten Zitat