Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Überprüfung auf generische Klasse (https://www.delphipraxis.net/144814-ueberpruefung-auf-generische-klasse.html)

Stevie 17. Dez 2009 09:26


Überprüfung auf generische Klasse
 
Moin,

ich habe folgende Klasse:
Delphi-Quellcode:
TTable<T: class, constructor> = class;
und möchte in einer anderen Klasse (nicht generisch) über RTTI überprüfen, ob eine bestimmte Property vom Typ TTable<T> ist.
Ich bekomme die TClass Information zurück, nur bekomm ich es nich hin, dass es korrekt erkannt wird.
Delphi-Quellcode:
type
  TFoo = class
  private
    FBars: TTable<TBar>;
  public
    property Bars: TTable<TBar> read FBars write FBars;
  end;
in diesem Beispiel möchte ich für die Property BarTable ermitteln, ob sie von TTable<T> ist, oder nicht.

Delphi-Quellcode:
var
  LContext: TRttiContext;
  LType: TRttiType;
  LProperty: TRttiProperty;
  LClass: TClass;
begin
  LContext := TRttiContext.Create;
  LType := LContext.GetType(TFoo);
  LProperty := LType.GetProperty('Bars');
  LClass := LProperty.PropertyType.AsInstance.MetaclassType; // LClass.ClassName ist korrekt: TTable<Unit1.TBar>
  if LClass.InheritsFrom(TTable<T>) then // [DCC Fehler] Unit1.pas(222): E2003 Undeklarierter Bezeichner: 'TTable'
    ShowMessage(LClass.ClassName);

  if LClass.InheritsFrom(TTable<TObject>) then // kompiliert, liefert aber False zurück
    ShowMessage(LClass.ClassName);

  if LClass.InheritsFrom(TTable<TBar>) then // funktioniert, kann ich aber nicht gebrauchen, weil ich an dieser Stelle nicht auf einen konkreten Generic überprüfen kann
    ShowMessage(LClass.ClassName);


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:15 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