下面这个简单的例子是我试图解决一个冲突问题的概括,其中我有一个枚举类型成员与一个VCL成员同名。
下面这个简单的例子是我试图解决一个冲突问题的概括,其中我有一个枚举类型成员与一个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
成员),但我想知道是否有一种方法可以限定对另一个单位中属性的引用,在该作用域中存在与该单位名称冲突的标识符。