Wie kann ich die vererbte Vorfahrenmethode in überschriebenen virtuellen Funktionen aufrufen?

8

Das funktioniert:

%Vor%

Warum funktioniert das auch nicht?

%Vor%

Die Deklaration von TMyObjEx ist wie folgt:

%Vor%     
Cœur 04.12.2008, 14:53
quelle

5 Antworten

10

Hier ist die richtige Antwort.

Der richtige Weg, dies zu tun, ist wie oben erwähnt:

%Vor%

Die Art und Weise, wie Sie es tun möchten, wird von der Sprache nicht unterstützt.

Also letztlich die Antwort auf Ihre Frage "Warum funktioniert das nicht auch?" liegt daran, dass die Sprache nicht so gestaltet ist.

    
Nick Hodges 04.12.2008 21:04
quelle
8

Die automatische Übergabe von Parametern funktioniert nicht, wenn Sie das Ergebnis der Methode benötigen. Sie müssen den Namen der Methode und die Parameter eingeben, sorry.

    
Lars Truijens 04.12.2008 15:08
quelle
6

Warum es nicht unterstützt wird, schrieb Hallvard ein plausible Erklärung vor einigen Jahren in seinem Blog:

  

Ein Vorbehalt mit dem "geerbt"; Syntax ist, dass es für Funktionen nicht unterstützt wird. Zum   Funktionen müssen Sie die explizite Syntax einschließlich des Methodennamens und beliebiger Argumente verwenden.   Zum Beispiel:

     

[etwas Code]

     

Das mag im Delphi-Sprachdesign wie ein Versehen aussehen, aber ich denke schon   beraten. Das Grundprinzip dahinter ist wahrscheinlich, dass wenn TMyClass.MethodC abstrakt ist (oder   in der Zukunft abstrakt gemacht), wird die Ergebniszuweisung in der abgeleiteten Klasse sein   entfernt, und so hat Ergebnis plötzlich undefinierten Wert. Dies würde sicherlich subtil verursachen   Fehler.

    
gabr 05.12.2008 07:04
quelle
1

Zuerst dachte ich, du könntest einfach inherited benutzen, wenn du an dem Ergebnis der Funktion nicht interessiert bist, das scheint nicht der Fall zu sein. Der Aufruf geerbter Funktionsmethoden erfordert den Methodennamen und die Parameter. So ist es halt. Sie müssen auch den Methodennamen angeben, wenn Sie andere Parameter als die aktuelle Methode übergeben oder wenn Sie eine völlig andere Methode aufrufen.

    
Rob Kennedy 04.12.2008 15:07
quelle
-1

Scheint, dass die Delphi-Dokumentationen noch ein schwarzes Loch haben ... (Oooooh, was sind die guten Neuigkeiten dazu?)

Meine Tests zeigen an, dass das Schlüsselwort geerbt ohne etwas verwendet wird, nachdem es nur für die Methoden Konstruktor, Destruktor und Prozedur funktioniert. Auf Funktion -Methoden funktioniert es nicht AT ALL .

Allerdings habe ich es nie entdeckt, weil ich die geerbte Methode in der Regel auch dann aufrufen möchte, wenn ich sie nicht brauche (Motivation: Strg + Linksklick verwenden zu können es und folgen Sie dem Fluss des Codes einfacher ohne Debugging).

    
Fabricio Araujo 04.12.2008 17:27
quelle

Tags und Links