Delphi-Quellcode:
type
RConfig2 = record
private
fKey: String;
fValue: Variant;
function GetAsString: String;
function GetAsInteger: Integer;
public
property Key: String read fKey write fKey;
property Value: Variant write fValue;
property AsString: String read GetAsString;
property AsInteger: Integer read GetAsInteger;
end;
Ich würde im Record die Setter Methoden einfügen, nicht in der Config Klasse. Dann kannst du einfach
...AsInteger := 4711
tippen, anstatt ein Record übergeben zu müssen.
Delphi-Quellcode:
type
TConfig = class(TObject)
private
...
fList: TConfigList;
fList2: TConfigList2;
...
function GetVariantValue(aID: String): RConfig2;
procedure SetVariantValue(aID: string; aValue: Variant);
...
public
constructor create;
...
property Item[aKey: String]: RConfig2 read GetVariantValue write SetVariantValue;
...
end;
Hier ist der Getter ausreichend. Aber wenn schon ein Setter da ist, dann definitiv mit RConfig2 arbeiten nicht mit Variant. Auch wenn ich nichts gegen Variant habe (doch eigentlich schon
), es macht hier einfach keinen Sinn.
Ich würde mich jetzt für die Variante mit Setter im Record entscheiden.
Die ist drin und sollte auch funktionieren...sollte.
Ich debugge.
Was passiert bei der jetzigen Konstellation:
Delphi-Quellcode:
type
RConfig2 = record
private
fKey: String;
fValue: Variant;
function GetAsString: String;
function GetAsInteger: Integer;
procedure SetAValue(aValue: Variant);
public
property Key: String read fKey write fKey;
property Value: Variant read fValue write fValue;
property AsString: String read GetAsString;
property AsInteger: Integer read GetAsInteger;
end;
und
property Item[aKey: String]: RConfig2 read GetVariantValue;
Ich strebe an, über
die Wertzuweisung zu machen.
Jedoch läuft er beim Aufruf von
myConfig.Item['dbconfig'].Value:= 2312
immer in
GetVariantValue
was mir auch logisch erscheint.
Nur wie bringe ich diesen Zugriff so hin, dass es nach meinem Wunsch funktioniert?