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