2017-01-25 41 views
2

如何從各個父類中調用函數,函數應該具有與父類相同的名稱。不同職業等級的德爾福電話函數

在Java中有super關鍵字,在C#中有base。德爾福有什麼等價物?

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

現在應該修復 – user1769184

+0

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

回答

3

使用inherited關鍵字:

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

閱讀關於在documentation這個關鍵字。

如果您希望挑選繼承鏈的更深層次的類,那麼您必須明確地命名它。例如:

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

但是請注意,所有這些都是非常強烈的代碼異味。在每個派生類中,你隱藏了同名的方法。通常這應該用虛擬方法來完成。

+0

主要問題:如何從MyParentClass中調用函數? '只從最後一位父母那裏繼承了'Domenthing'。 – Zam

+1

@Zam不是由我的閱讀。畢竟,這個問題明確提到了C#中的'base'。 –