0

当创建一个从另一个类继承的类时,不应该在创建派生类时调用基类的构造函数吗?

Type
  TBase = Class
    constructor xMain;
  End;
  TDerived  = Class(TBase)
    constructor xMain;
  End;

constructor TBase.xMain;
begin
  MessageBox(0,'TBase','TBase',0);
end;

constructor TDerived.xMain;
begin
  MessageBox(0,'TDerived','TDerived',0);
end;


Var
  xTClass:TDerived;
begin
  xTClass := TDerived.xMain;
end.

我认为这应该导致 MessageBox 显示“TBase”,然后显示“TDerived”。然而,事实并非如此。运行上述代码时,它只会导致一个 MessageBox 显示“TDerived”。

4

2 回答 2

9
constructor TDerived.xMain;
begin
  inherited;
  MessageBox(0,'TDerived','TDerived',0);
end;
于 2012-11-11T10:26:16.023 回答
6

在 TDerived.xMain 中添加继承;否则不会调用祖先的代码;

begin
  inherited;//call the ancestor TBase.xMain
  MessageBox(0,'TDerived','TDerived',0);
end;

这个问题也将帮助您理解继承的保留字:

Delphi:如何在虚拟方法上调用继承的继承祖先?

另一个很好的资源是http://www.delphibasics.co.uk/RTL.asp?Name=Inherited

于 2012-11-11T10:31:13.650 回答