【问题标题】:Is inherited keyword called automatically in Delphi?Delphi会自动调用继承的关键字吗?
【发布时间】:2013-06-29 17:55:06
【问题描述】:

根据这个页面

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

它说“它在构造函数的开头和析构函数的结尾被调用。这不是强制性的,但建议作为一种好的做法。”

我没有正确理解这一点吗?这是否意味着我们不需要在构造函数或析构函数中放置“继承”,因为它会被编译器自动插入?

【问题讨论】:

  • 为了解决歧义的症结,引用的句子是说将inherited放在第一位(在构造函数中)或最后(在析构函数中)不是强制性的-从技术上讲,您可以自己放置在调用inherited 之前和之后的代码,只是大多数时候这不是一个好主意。

标签: delphi inherited


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    不,不是这个意思;它的意思是,如果你有理由不调用它,你可以选择不调用它。你应该几乎总是在你覆盖的每个方法中调用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;
    

    【讨论】:

    • 我认为这比公认的答案更清楚。 +1。有可能(罕见)的情况下不调用它,并且故意这样做可能值得“不调用继承”评论,因为一些工具,如来自 peganza 的 Pascal Analyzer 会发出警告,甚至 Delphi 编译器可能会发出提示或警告。
    猜你喜欢
    • 1970-01-01
    • 2012-12-15
    • 2014-02-27
    • 2018-05-30
    • 1970-01-01
    • 2012-09-21
    • 2015-12-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多