是否在Delphi中自动调用了继承关键字?

时间:2013-06-29 17:55:06

标签: delphi inherited

根据这个页面

http://www.delphibasics.co.uk/RTL.asp?Name=Inherited

它说“它在构造函数的开头调用,在析构函数的末尾调用。它不是强制性的,但建议作为良好的实践。”

我不明白这个吗?这是否意味着我们不需要在构造函数或析构函数中放置'inherited',因为它会被编译器自动插入?

2 个答案:

答案 0 :(得分:11)

不,inherited不会自动调用;你必须自己做(如果你想调用你通常做的继承程序)。您甚至可以在时选择,例如this answer。通常,您可以在构造函数的开头和析构函数的末尾执行此操作。

答案 1 :(得分:9)

不,这不是它的意思;它的含义是,如果你有理由不打电话,你可以选择不打电话。你应该几乎总是在你所覆盖的每个方法中调用inherited,除非你需要在你的后代中不会发生父母所做的事情。

除非你有充分的理由不这样做,否则你应该始终将inherited作为构造函数的第一行,以及析构函数的最后一行。 从不自动调用。

Delphi让它变得非常简单;如果重写的方法与父项具有相同的参数,则甚至不必传递它们:

constructor TMyClass.Create(AOwner: TComponent);
begin
  inherited;          // Automatically passes AOwner to parent constructor
  // Do other construction here
end;

destructor TMyClass.Destroy;
begin
  // Do your own cleanup
  inherited;
end;