Delphi从不同的级别调用函数

时间:2017-01-25 09:56:20

标签: delphi

如何从各个父类调用函数,函数应该与父类中的名称相同。

在Java中有super个关键字,在C#中有base。 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;

1 个答案:

答案 0 :(得分:3)

使用inherited关键字:

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

documentation了解此关键字。

如果你希望在继承链中进一步选择一个类,那么你必须明确地命名它。例如:

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

但请注意,所有这些都是非常强大的代码味道。在每个派生类中,您隐藏了相同名称的方法。通常这应该使用虚拟方法完成。