如何从各个父类调用函数,函数应该与父类中的名称相同。
在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;
答案 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;
但请注意,所有这些都是非常强大的代码味道。在每个派生类中,您隐藏了相同名称的方法。通常这应该使用虚拟方法完成。