根据这个页面
http://www.delphibasics.co.uk/RTL.asp?Name=Inherited
它说“它在构造函数的开头和析构函数的结尾被调用。这不是强制性的,但建议作为良好做法。”
我没有正确理解这一点吗?这是否意味着我们不需要将“继承”放在构造函数或析构函数中,因为它会被编译器自动插入?
根据这个页面
http://www.delphibasics.co.uk/RTL.asp?Name=Inherited
它说“它在构造函数的开头和析构函数的结尾被调用。这不是强制性的,但建议作为良好做法。”
我没有正确理解这一点吗?这是否意味着我们不需要将“继承”放在构造函数或析构函数中,因为它会被编译器自动插入?
不,inherited
不会自动调用;你必须自己做(如果你想调用继承的过程,你通常会这样做)。您甚至可以选择何时执行此操作,例如,请参阅此答案。通常,您在构造函数的开头和析构函数的结尾执行此操作。
不,不是这个意思;它的意思是,如果你有理由不调用它,你可以选择不调用它。您几乎应该总是调用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;