我怎样才能让 "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=] 负责以正确的顺序进行操作。
首先,我什至怀疑这是否可能,但如果可能的话,我很想知道如何实现。我记得以前看到过这种行为,但它可以在 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=] 负责以正确的顺序进行操作。