Das mit dem
inherited funktioniert bei records ja leider nicht. In diesem Fall kann man das aber umgehen:
Delphi-Quellcode:
function TValueHelper.AsVariant: Variant;
begin
if (IsType<Boolean>()) then
Result := AsBoolean()
else
Result := AsType<Variant>;
end;
Danke, so werd ichs machen!
Habe aber selbst noch etwas rumprobiert und auf Biegen und Brechen lässt es sich machen:
Delphi-Quellcode:
var
OriginalTValueAsVariant: Pointer = @TValue.AsVariant; // Muss VOR dem Recordhelper deklariert/zugewiesen werden
type
TValueHelper = record helper for TValue
public
function AsVariant() : Variant;
end;
function TValueHelper.AsVariant: Variant;
type TAsVariantFunc = function(Self: TValue): Variant;
begin
if (IsType<Boolean>()) then
Result := AsBoolean()
else
Result := TAsVariantFunc(OriginalTValueAsVariant)(Self);
end;
Deine Lösung ist natürlich deutlich besser/eleganter und werde die auch auf jeden Fall verwenden, aber man hat ja nicht immer das Glück, dass man so nen schönen Ausweg hat.
For Science und so.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."