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

nol*_*ker 2 delphi

最近我发现了一些奇怪的(对我而言)Delphi代码,我把它分离到一个单独的小项目中.这是我发现的.Unit1编译没有错误.Unit2(我提供用于比较)没有.区别在于Classes的方式used.

unit Unit1;

interface

uses Classes; // difference here

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

implementation

end.
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

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

Uwe*_*abe 10

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

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


Jan*_*sen 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.
Run Code Online (Sandbox Code Playgroud)