2017-01-25 2 views
2

Wie Funktionen von einzelnen Elternklassen aufgerufen werden, sollte Funktion den gleichen Namen wie in der Elternklasse haben.Delphi Aufruffunktionen aus verschiedenen Klassenebenen

In Java gibt es das Schlüsselwort super, in C# gibt es base. Was ist das Äquivalent in Delphi?

type 
    MyParentClass = class 
    function Dosomething: Integer; 
    end; 

    MyChildClass = class(MyParentClass) 
    function DoSomething: Integer; 
    end; 

    MyGrandChildClass = class(MyChildClass) 
    function DoSomething: Integer; 
    end; 


function MyParentClass.Dosomething : Integer; 
begin 
     result := 5; 
end; 


function MyChildClass.Dosomething : Integer; 
begin 
     result := Dosomething + 15 ; // result should be 20 ! 
end; 


function MyGrandChildClass.Dosomething : Integer; 
begin 
     result := Dosomething + 40 ; // result should be 60 ..... 
end; 
+0

sollte jetzt behoben werden – user1769184

+0

Related: http://stackoverflow.com/questions/12505695/how-to-access-base-super-class-in-delphi –

Antwort

3

Verwenden Sie das inherited Stichwort:

function MyChildClass.DoSomething : Integer; 
begin 
    result := inherited DoSomething + 15 ; 
end; 

lesen über dieses Schlüsselwort an der documentation.

Wenn Sie eine Klasse weiter oben in der Vererbungskette auswählen möchten, müssen Sie sie explizit benennen. Zum Beispiel:

function MyGrandChildClass.DoSomething : Integer; 
begin 
    result := MyParentClass(Self).DoSomething + 15 ; 
end; 

Beachten Sie jedoch, dass dies ein sehr starker Code-Geruch ist. In jeder abgeleiteten Klasse verbergen Sie die gleichnamige Methode. Normalerweise sollte dies mit einer virtuellen Methode gemacht werden.

+0

Hauptfrage: Wie Funktion von MyParentClass aufrufen? 'geerbter Dosomething'-Aufruf nur vom letzten Elternteil. – Zam

+1

@Zam Nicht von meinem Lesen. Immerhin bezieht sich die Frage explizit auf "base" von C#. –

Verwandte Themen