gpt4 book ai didi

Delphi - 当单元名称与属性名称相同时如何解决冲突?

转载 作者:行者123 更新时间:2023-12-03 14:41:18 26 4
gpt4 key购买 nike

下面的简单示例是我试图解决冲突的一个问题的浓缩,其中我有一个与 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是我声明的,而不是 TAlign Controls.pas 中定义的成员.
  • 第二个失败,因为它花了 Controls意思是TForm该名称的属性(property)。

我意识到有很多方法可以解决这个问题(重命名alNone成员是最简单的),但我很好奇是否有一种方法可以限定对另一个单元中的属性的引用,其中单元name 与当前作用域中的标识符冲突。

最佳答案

使用类型名称对其进行限定:

TAlign.alNone

当我写这篇文章时,我没有意识到编译器版本是相关的。此语法仅在 Delphi 2010 或 XE 中可用。答案不适用于标记版本 Delphi 2007。Deltics 答案涵盖了更多细节。

关于Delphi - 当单元名称与属性名称相同时如何解决冲突?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42844960/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com