Delphi XE2 - 继承类不调用基类的构造函数......?

Jos*_*ine 0 delphi inheritance class

在创建一个继承自另一个类的类时,在创建派生类时,是否应该调用基类的构造函数?

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.
Run Code Online (Sandbox Code Playgroud)

我认为这应该导致MessageBox显示"TBase"然后"TDerived".但事实并非如此.当上面的代码运行时,它只会导致一个MessageBox显示"TDerived".

bum*_*mmi 9

constructor TDerived.xMain;
begin
  inherited;
  MessageBox(0,'TDerived','TDerived',0);
end;
Run Code Online (Sandbox Code Playgroud)


RBA*_*RBA 6

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

begin
  inherited;//call the ancestor TBase.xMain
  MessageBox(0,'TDerived','TDerived',0);
end;
Run Code Online (Sandbox Code Playgroud)

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

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

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