Hallo,
Das ist quasi eine Folgefrage zu
TValue.AsVariant und Boolean - Fehler?
Da ich gerade (noch) nicht auf 10.2 umsteigen kann musste ich mir anders behelfen:
Delphi-Quellcode:
TValueHelper = record helper for TValue
public
function AsVariant() : Variant;
end;
function TValueHelper.AsVariant: Variant;
begin
if (IsType<Boolean>()) then
Result := AsBoolean()
else
Result := Self.AsVariant(); // !
end;
Die markierte Zeile führt allerdings zu einer Endlosrekursion.
"inherited" funktioniert in dem Zusammenhang nicht und auch sonst habe ich keine Art gefunden wie ich das original TValue.AsVariant aufrufen kann.
Mein letzter und extremster Versuch:
Delphi-Quellcode:
function TValueHelper.AsVariant: Variant;
var originalAsVariant: function(Self: TValue): Variant;
begin
originalAsVariant := @TValue.AsVariant;
if (IsType<Boolean>()) then
Result := AsBoolean()
else
Result := originalAsVariant(Self);
end;
Aber selbst in diesem Fall springt er wieder in den TValueHelper.AsVariant. Bedeutet das, dass das original-TValue.AsVariant nicht mehr existiert und nicht nur überdeckt sondern
ersetzt wurde?
Denn so sieht es für mich momentan aus.
Die Frage ist nun: Existiert die ursprüngliche Methode noch und wenn ja, wie kann ich sie aufrufen?
Disclaimer: Mir ist klar, dass ich das ganze umgehen kann, indem ich meine Helper-Methode einfach umbenenne, aber einerseits wäre mir ein Überdecken lieber und andererseits bin ich jetzt neugierig was da jetzt im Hintergrund wirklich passiert
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."