1

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

在此处输入图像描述

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

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

4

1 回答 1

4

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

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.
于 2017-07-10T11:33:09.093 回答