【发布时间】:2017-03-16 21:18:35
【问题描述】:
下面的简单示例是我试图解决冲突的一个问题的缩影,其中我有一个与 VCL 成员同名的枚举类型成员。
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
type
TSomeType = (
alNone,
alSome,
alMany) ;
procedure TForm1.FormCreate(Sender: TObject);
begin
Self.Align := alNone ; // 1. type mismatch
Self.Align := Controls.alNone ; // 2. "Controls" is also a property of TForm
end ;
end.
- 第一次赋值失败,因为编译器认为
alNone是我声明的,而不是Controls.pas中定义的TAlign成员。 - 第二个失败,因为
Controls表示该名称的TForm属性。
我意识到有办法解决这个问题(重命名 alNone 成员是最简单的),但我很好奇是否有办法限定对另一个单元中的属性的引用,其中 unit名称 与当前范围内的标识符冲突。
【问题讨论】:
标签: delphi scope delphi-2007