AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign IInvokable nachträglich einem Interface hinzufügen
Thema durchsuchen
Ansicht
Themen-Optionen

IInvokable nachträglich einem Interface hinzufügen

Ein Thema von WiPhi · begonnen am 3. Sep 2018 · letzter Beitrag vom 6. Sep 2018
 
WiPhi

Registriert seit: 19. Feb 2015
90 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: IInvokable nachträglich einem Interface hinzufügen

  Alt 6. Sep 2018, 10:28
Nein, so sollst du das machen
Delphi-Quellcode:
procedure Test( );
var
  mock: TMock<IMirrorFoo>;
  mirror: IMirrorFoo;
  org: IFoo;
begin
  // .....
  mirror := mock;
  org := IFoo( mirror ); // <-- WiPhi: darauf bin ich nicht gekommen, ehrlich gesagt wundert es mich das der Compiler das zulässt
  org.Foo();
Das sieht sehr gut aus! Vielen Dank.

Leider zieht das Problem weitere Kreise. Ich habe ein Interface (in dem Package) gefunden, welches als Rückgabewert einer Funktion ein Interface liefert, welches auch keine RTTI Informationen enthält. Sobald er im Test darauf zugreifen möchte, schmiert er mit einer Zugriffsverletzung ab.

Delphi-Quellcode:
IBar = interface
  procedure KannNichts;
end;

IFoo = interface
  function DoBar: IBar;
end;

{$M+}
IMirrorFoo = interface
  function DoBar: IBar;
end;
{$M-}

// ........

procedure TestKlasse.TesteFoo;
var
  mock: TMock<IMirrorFoo>;
  mirror: IMirrorFoo;
  foo: IFoo;
  bar: IBar;
begin
  // ... Code wie bisher ...
  bar := org.DoBar; // <-- Da kommt nichts mehr sinnvolles, Zugriffsverletztung
end;
Dieses IBar Interface auch nch irgendwie da rein zu mogeln kommt mir fast einer Schande gleich, dennoch die Frage ob es möglich ist.

Aber!
Wahrscheinlich wäre es sinnvoller die betreffenden Interfaces zu wrappen und nur noch über diese Wrapper Interfaces zu arbeiten. Dann müsste ich zwar ziemlich viel doppelt schreiben (Wrapper und Package Interfaces), aber ich könnte das Package evtl. jederzeit ersetzen und wesentlich komfortabler testen.

Wie würdet ihr damit verfahren? (Ein Glück hier gibt's so viele Profis )
Wer sucht, der findet. Wer länger sucht, findet mehr.
  Mit Zitat antworten Zitat
 

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:03 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz