我阅读这篇文章是因为我想了解它的用处,class of [ClassName]
并且我看到它们声明了一个虚拟构造函数。所以我做了一个测试,你可以在这里看到:
我(从那篇文章中)了解到,当我在编译时不知道要构造的类并且可以使用class of
. 在我上面显示的代码中,有什么区别?
如果我将 TFirst 构造函数声明为虚拟而不覆盖 TSecond,我当然会收到警告,我可以通过重新引入或覆盖来删除它。但是构造函数不是被自动覆盖了吗(看左边的代码)?我认为他们是等价的。
我阅读这篇文章是因为我想了解它的用处,class of [ClassName]
并且我看到它们声明了一个虚拟构造函数。所以我做了一个测试,你可以在这里看到:
我(从那篇文章中)了解到,当我在编译时不知道要构造的类并且可以使用class of
. 在我上面显示的代码中,有什么区别?
如果我将 TFirst 构造函数声明为虚拟而不覆盖 TSecond,我当然会收到警告,我可以通过重新引入或覆盖来删除它。但是构造函数不是被自动覆盖了吗(看左边的代码)?我认为他们是等价的。
使用两种变体执行此代码,您将看到不同之处。
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.