Einzelnen Beitrag anzeigen

bepe

Registriert seit: 17. Okt 2006
118 Beiträge
 
#6

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

  Alt 23. Aug 2012, 10:18
So sieht es jetzt bei mir aus

Ich habe ein record über alle Einträge:
Delphi-Quellcode:
type
  RConfig = record
    Key: String;
    Value: String;
  end;
Daraus einen eigenen Typ, als dynamisches Array

Delphi-Quellcode:
type
  TConfigList = array of RConfig;
Soweit, so gut. Du brauchst jedoch nicht Objekt und Record. Du verwendest XE2? Dann kannst du in deinem Record Propertys deklarieren, wie du es auch in einem Objekt machen würdest.
Welches Verwendung in der Klassendeklaration
Delphi-Quellcode:
type
  TConfig = class(TObject)
  private
    Con: TZConnection;
    Query: TZQuery;

    fNewDB: Boolean;

    fList: TConfigList;

    function GetValue(aID: String): String;
    procedure SetValue(aID: String; aValue: String = '');
    function getItemCount: Integer;
  public
    constructor create;

    property IsNew: Boolean read fNewDB;
    property Items[aKey: String]: String read GetValue write SetValue;
    property Count: Integer read getItemCount;
    procedure ReadConfig;
    function Exists(aKey: String): Boolean;
    function save: Boolean;
  end;
in der privaten Variable fList Anwendung findet.

Wie würde jetzt meine Deklaration aussehen, wenn ich die Items als Objekt handhaben möchte.

Meine Idee wäre dann

Delphi-Quellcode:
type
  TConfigItem = class(TObject)
  private
    function GetAsInteger: Integer;
    function GetAsString: String;
  public
    property AsInteger: Integer read GetAsInteger;
    property AsString: String read GetAsString;
  end;
Wie erwähnt, du kannst die Funktionen und Propertys einfach ins Record verschieben und brauchst die Klasse nicht mehr. Aber ansonsten korrekt umgesetzt (wenn du nur lesend auf die Werte zugreifen möchtest).

Woraus sich ergeben würde, dass Items[aKey: String]: TConfigItem wird.
Allerdings mit welchem read ?
An der Deklaration von Items ändert sich, außer dem Typ, nichts. Also so wie du es gemacht hast*. Im read änderst du auch nur den Typ und greifst natürlich auf dein TConfigList array zu.

*Wenn du das Objekt entfernst und nur mit dem Record arbeitest, sehe Items so aus Items[aKey: String]: RConfig

mfg,
bp
  Mit Zitat antworten Zitat