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.
我正在阅读 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.