【发布时间】:2018-07-29 11:31:58
【问题描述】:
最近我发现了一些(对我来说)看起来很奇怪的 Delphi 代码,我将它隔离到一个单独的小项目中。这是我发现的。 Unit1 编译时没有错误。 Unit2(我提供比较)没有。区别在于 Classes 的方式是used。
unit Unit1;
interface
uses Classes; // difference here
type TThread = class(Classes.TThread)
public
property Terminated;
end;
implementation
end.
Unit2 无法编译。产生各种错误。
unit Unit2;
interface
uses System.Classes; // difference here
type TThread = class(Classes.TThread)
public
property Terminated;
end;
implementation
end.
[dcc32 Error] Unit1.pas(7): E2003 Undeclared identifier: 'Classes'
[dcc32 Error] Unit1.pas(7): E2029 ',' or ':' expected but ')' found
[dcc32 Error] Unit1.pas(9): E2147 Property 'Terminated' does not exist in base class
所以我担心这个项目正在利用编译器错误来实现其目标。编译器错误可能会在以后的版本中修复,然后代码将不再工作。
【问题讨论】:
-
当然,使用编译器错误是不好的做法。但这不是这里发生的事情。您使用的是什么版本的 Delphi,遇到了什么错误?
-
@Dsm。它是 Delphi 10.0 和 Delphi 10.1(都一样) 我已经编辑了问题以包含 Unit2 的错误消息。 Unit1 和 Unit3 没有错误。
-
我在这里看不到编译器错误。 Unit2 的代码是错误的,而 Unit1 的代码依赖于单元作用域名称的正确设置。
-
@nolaspeaker:如果uses中包含全限定
System.Classes,那么在单元的其余部分也必须这样使用,所以Classes.TThread必须全限定为System.Classes.TThread。 FWIW,我宁愿做这样的事情:TFetchMessageThread = class(TThread)。
标签: delphi