Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Variable Klassen von Objekteigenschaften (https://www.delphipraxis.net/103933-variable-klassen-von-objekteigenschaften.html)

Zacherl 24. Nov 2007 14:32


Variable Klassen von Objekteigenschaften
 
Hey,

es ist möglich, dass ich anhand einer Objekteigenschaft die Klasse einer weiteren Eigenschaft ändere?

Folgendes Beispiel:
Delphi-Quellcode:
type
  TForumType = (ftDP, ftDF, ftDSDT);
Delphi-Quellcode:
type
  TDPData = record
    URL: String;
    UserCount: Integer;
    Chat: String;
  end;
  TDFData = record
    URL: String;
    UserCount: Integer;
    NewPosts: Boolean;
  end;
  TDSDTData = record
    URL: String;
    LastVisit: TDateTime;
  end;
Delphi-Quellcode:
type
  TForum = class(TObject)
  private
    FForumType: TForumType;
    FDP: TDPData;
    FDF: TDFData;
    FDSDT: TDSDTData;
  public

  published
    property ForumType: TForumType read FForumType write FForumType;
    property Data: { hier dann je nach eingestelltem ForumType den entsprechenden Record }
  end;
Ist sowas überhaupt möglich? Wenn ja weiß jemand wie?

Gruß

Apollonius 24. Nov 2007 14:35

Re: Variable Klassen von Objekteigenschaften
 
Direkt geht es gar nicht. Workarounds sind:
1. Variante Records
2. Klassen, die alle von einer Basisklasse abgeleitet sind
3. Ab Delphi 2006: "Überrecord" mit Typfeld und implizitem Cast in die Einzeltypen, der bei falschem Typ eine Exception wirft.

Dax 24. Nov 2007 14:36

Re: Variable Klassen von Objekteigenschaften
 
Nein, das geht nicht, und es widerspräche auch dem Prinzip der starken Typisierung. Was allerdings möglich ist sind Klassen/Interfaces und Setter-Methoden, die je nach Selektor-Eigenschaft nur eine bestimmte Subklasse annehmen...

Zacherl 24. Nov 2007 14:38

Re: Variable Klassen von Objekteigenschaften
 
Okey danke für eure Hilfe, dann werde ich wohl abgeleitete Klassen verwenden müssen.


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