Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Generische Interfaces erkennen (https://www.delphipraxis.net/167311-generische-interfaces-erkennen.html)

normancz 23. Mär 2012 10:52

Delphi-Version: 2010

Generische Interfaces erkennen
 
Hallo,
wie kann ich gezielt generische Interfaces abfragen?

Beispiel:
Delphi-Quellcode:
  IFoo<T> = interface
  ['{CDCED5EE-852E-4C41-86A1-BE9E450A0748}']
    function Bar: T;
  end;

  IStringFoo = IFoo<string>;
  IIntegerFoo = IFoo<integer>;

  ...

  procedure MachWas(x: IInterface);
  var
    sfoo: IStringFoo;
    svalue: string;
    ifoo: IIntegerFoo;
    ivalue: integer;
  begin
    if Supports(x, IStringFoo, sfoo) then
      svalue := sfoo.Bar;
    if Supports(x, IIntegerFoo, ifoo) then
      ivalue := ifoo.Bar;
  end;
Supports funktioniert hier nicht, da beide Fälle wohl anhand der gemeinsamen GUID durchlaufen werden.

Ich benutze übrigens das Spring-Framework. Gibt es dort etwas passendes, denn anscheinend kann ich dort auch generische Interfaces problemlos registrieren und auch wieder anfordern?

Danke, und Ciao
Norman

Panthrax 23. Mär 2012 11:08

AW: Generische Interfaces erkennen
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1071968)
Das Problem ist, daß du bei generischen Schnittstellen keine GUID angeben kannst (du kannst schon, aber dann haben alle Instanzen die gleiche). Somit sind Dinge wie as und is nicht mehr möglich. Leider reduziert sich damit auch etwas der Nutzen generischer Interfaces.

Vielleicht hilft dir dieser Artikel etwas weiter.

Quelle: #3 in http://www.delphipraxis.net/157210-s...mwandlung.html

himitsu 23. Mär 2012 11:37

AW: Generische Interfaces erkennen
 
Delphi-Quellcode:
  IFoo<T> = interface
    function Bar: T;
  end;

  IStringFoo = interface(IFoo<string>)
    ['{CDCED5EE-852E-4C41-86A1-BE9E450A0748}']
  end;
  IIntegerFoo = interface(IFoo<integer>)
    ['{was anderes}']
  end;
So sollte/könnte es gehn.


Theoretisch könnte Emba hierfür einbauen, daß für generische Interfaces dieser Code implizit so verwendet würde.
Und wenn dann noch für alle Interfaces ohne GUID eine GUID automatisch generiert wird/würde...


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:58 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz