我怎样才能让 "inherited" 出现在我的程序结束而不是开始?

How can I make "inherited" appear at the end of my procedure instead of beginning?

首先,我什至怀疑这是否可能,但如果可能的话,我很想知道如何实现。我记得以前看到过这种行为,但它可以在 IDE.

中明确实现

我有一个基本形式,然后我将其继承为各种其他形式。在基本形式中,我有许多虚方法,它们将被继承的形式覆盖和实现。

有些虚拟方法期望 inherited 在过程的 结束 被调用。但是,默认情况下,它会自动插入到 开头 。这往往会引起混淆,特别是忘记在结尾而不是开头调用它。

如何强制 inherited 插入到 end 而不是 beginning,如下所示,如果都可以吗?

procedure TMyForm.DoStuff;
begin

  inherited;
end;

您无法更改 IDE 的这种行为。

IDE 知道某些方法,例如重写的析构函数,期望 inherited 语句出现在方法体的末尾。对于此类方法,IDE 确实在执行 class 完成时将对 inherited 的调用放在方法体的末尾。但是没有任何机制可以让您告诉 IDE 其他它一无所知的方法将以这种方式对待。

补充一下 David 的回答,如果您需要强制执行此操作顺序,最好的方法是更改​​设计。解耦之后需要发生的操作可以这样做:

type
  TMyBase = class
    protected
      DoBeforeSomething : procedure; virtual; abstract;
    public
      DoSomething : procedure;
  end;

  TMyCustom = class(TMyBase)
    protected
      DoBeforeSomething : procedure; override;
  end;

procedure TMyBase.DoSomething;
begin
  DoBeforeSomething;
  // Do common things now...
end;

procedure TMyCustom.DoBeforeSomething;
begin
  inherited;
  // some custom things...
end;

在这里,消费者总是会调用 DoSomething 方法来执行任何预期的操作,但是继承 class 会覆盖 DoBeforeSomething,它首先在 DoSomething 中被调用在需要完成任何其他操作之前。

这样后代class就不用担心重写DoSomething本身并在"wrong"的地方调用inherited,[=的设计23=] 负责以正确的顺序进行操作。