Einzelnen Beitrag anzeigen

-=ZGD=-

Registriert seit: 25. Apr 2006
Ort: Bad Aibling
105 Beiträge
 
Delphi 10.1 Berlin Professional
 
#33

AW: Property via AsString;AsInteger;AsBoolean;.. laden

  Alt 23. Aug 2012, 15:41
Folgender Vorschlag. Wirf diese Record-Geschichte über den Haufen und mach daraus eine Klasse. Dann klappt auch das mit dem Getter und du brauchst keinen Setter, da du ja nur Referenzen erhälst, wenn du via Item[Key] auf ein Config-Eintrag zugreifst. Für das Hinzufügen bzw. Löschen würde ich entsprechende Methoden in der TConfig-Klasse implementieren. Hier mal das, wie ich es mir gerade vorstelle:
Delphi-Quellcode:
type
  TConfigItem = class;
 
  TConfig = class(TObject)
  private
    FItems : TDictionary<string, TConfigItem>;
    function GetConfigItem(aID: String): TConfigValue;
  public
    constructor Create;
    procedure AddItem(AItem: TConfigItem);
    procedure RemoveItem(AItem: TConfigItem); overloads;
    procedure RemoveItem(const Key: string); overloads;
    function ItemExists(const Key: string): Boolean;
    property Item[aKey: String]: TConfigItem read GetConfigItem;
  end;


  TConfigItem = class
  private
    fKey: String;
    fValue: Variant;
    function GetAsString: String;
    function GetAsInteger: Integer;
  public
    constructor Create(const AKey: string; Vaule: Variant);
    property Key: String read fKey;
    property Value: Variant write fValue;
    property AsString: String read GetAsString;
    property AsInteger: Integer read GetAsInteger;
  end;
PS: Natürlich musst du im Destruktor von TConfig die Items wieder freigeben. Oder du nimmst ein TObjectDictionary. Dann kümmert sich das Wörterbuch entsprechend darum, wenn beim OnCreate angibst, dass deine Werte Objekte sind.

Ich weiß nicht, ob du dich mit Interfaces auskennst, aber wenn du darauf setzen würdest, bräuchtest diese Freigabe-Geschichte nicht weiter zu beachten,.
´

Ich werde mal versuchen, das bei Gelegenheit umzusetzen.
Ich hätte nur gedacht, dass diese "Idee" recht trivial ist.

Interfaces, Generics, Dictionaries sind Neuheiten für mich, für die ich (leider!) noch keine Zeit hatte...

Danke, dass ihr euch die Zeit nehmt/genommen habt.
Stefan Michalk
  Mit Zitat antworten Zitat