首先,我怀疑这是可能的,但如果是的话,我很想知道如何。我记得以前看过这种行为,但它可以在IDE中明确实现。
我有一个基本形式,然后我继承到其他各种形式。在基本形式中,我有许多虚拟方法,这些方法将被继承的表单覆盖和实现。
某些虚拟方法希望在过程的 end 中调用inherited
。但是,默认情况下,它会自动插入开头。这往往会引起混淆,特别是忘记在最后而不是在开始时调用它。
如果可能的话,我如何强制inherited
插入 end 而不是开头,如下所示?
procedure TMyForm.DoStuff;
begin
inherited;
end;
答案 0 :(得分:6)
您无法更改IDE的此行为。
IDE知道某些方法,例如重写的析构函数,期望inherited
语句出现在方法体的末尾。对于这样的方法,IDE确实在执行类完成时将inherited
的调用放在方法体的末尾。但是没有任何机制可以让你告诉IDE其他方法,它什么都不知道,应该这样对待。
答案 1 :(得分:3)
要添加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
方法来执行任何预期的操作,但是继承类会覆盖DoBeforeSomething
,这在DoSomething
之前被调用,然后才需要执行其他操作完成。
这样,后代类不必担心覆盖DoSomething
本身并在“错误”位置调用inherited
,该类的设计负责将操作置于正确的位置顺序。