Einzelnen Beitrag anzeigen

Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

Recordhelper - Methode mit gleichem Namen wie im Record

  Alt 23. Jul 2018, 15:07
Delphi-Version: 10 Seattle
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."
  Mit Zitat antworten Zitat