Delphi 虚拟构造函数

Delphi virtual constructor

我正在阅读 this 文章,因为我想了解 class of [ClassName] 的用途,并且我看到他们声明了一个虚拟构造函数。所以我做了一个测试,你可以在这里看到:

我(从那篇文章)了解到,当我在编译时不知道要构造的 class 并且我可以使用 class of 时,虚拟构造函数很有用。在我上面显示的代码中,有什么区别?

如果我在没有覆盖 TSecond 的情况下将 TFirst 构造函数声明为虚拟的,我当然会收到警告广告,我可以通过重新引入或覆盖来删除它。但是构造函数不是自动覆盖了吗(看左边的代码)?我认为他们是等价的。

使用这两种变体执行此代码,您将看到不同之处。

type
  TFirstClass = class of TFirst;

constructor TFirst.Create;
begin
  Writeln('TFirst.Create');
end;

constructor TSecond.Create;
begin
  Writeln('TSecond.Create');
end;

var
  firstClass: TFirstClass;
  first: TFirst;
begin
  firstClass := TSecond;
  first := firstClass.Create;
end.