利用编译器错误是一种好习惯吗?

时间:2018-02-19 09:10:44

标签: delphi

最近我发现了一些奇怪的(对我而言)Delphi代码,我把它分离到一个单独的小项目中。这是我发现的。 Unit1编译时没有错误。 Unit2(我提供用于比较)没有。不同之处在于类是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

所以我担心的是这个项目正在利用编译器错误来实现它的目标 。编译器错误可能会在以后的版本中修复,然后代码将不再起作用。

2 个答案:

答案 0 :(得分:10)

没有使Unit1编译的编译器错误。它编译是因为在项目设置中,单位范围名称的条目至少包含项目系统,用于解析全名中的 Classes 的引用System.Classes 。由于用途包含 Classes ,因此对 Classes.TThread 的引用也会成功。

在Unit2中,用途包含 System.Classes 。因此,无法再解析引用 Classes.TThread 。将其更改为 System.Classes.TThread ,它可以正常工作。

答案 1 :(得分:9)

如果使用System.Classes,则在引用代码中的classes单元时也必须使用System.Classes,如下所示。

unit Unit2;

interface

uses System.Classes; // difference here

type TThread = class(System.Classes.TThread)
public
  property Terminated;
end;

implementation

end.