【发布时间】:2018-03-21 13:37:29
【问题描述】:
在构造函数的第一行是否必须有 Inherited?
我可以在“继承”之前有其他代码吗?
例子:
constructor TMyIniFile.Create(SectionName: string);
VAR Path: string;
begin
Path:= UserProfileFolder; //initialize path here
inherited Create(Path);
//more code ..
end;
【问题讨论】:
-
我从未尝试过。我认为在调用
inherited之前使用局部变量没有问题,但我认为你不能使用对象的字段。 -
您可以这样做,但这通常是设计缺陷的标志。只有在基本构造函数中调用虚方法才有意义。你应该从构造函数中调用虚方法。
-
@David 那不应该是“应该不打电话”吗?
-
很久以前,
TThread实现中有一个错误,在某些情况下,您需要在构造函数中最后调用Inherited。即使可能,也不要将其作为一种习惯,因为这会使未来的维护者感到困惑。 -
@LURD:你提到的错误是当用
ACreateSuspended=False调用基本构造函数时,它会立即开始运行线程,这样Execute()就可以在构造函数完成初始化之前开始运行TThread对象。但是这个错误早在 Delphi 6 中就已经修复了。
标签: delphi delphi-xe7