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