当前位置 : 主页 > 编程语言 > delphi >

delphi – 类的属性和方法参数的重复标识符

来源:互联网 收集:自由互联 发布时间:2021-06-23
我将我的项目从Delphi转移到Lazarus.在一个表单中,我有一个私有方法,参数var Active:Boolean.在Delphi中没关系,但Lazarus给出错误错误:重复标识符“活动”和提示:标识符已在第641行的单元
我将我的项目从Delphi转移到Lazarus.在一个表单中,我有一个私有方法,参数var Active:Boolean.在Delphi中没关系,但Lazarus给出错误错误:重复标识符“活动”和提示:标识符已在第641行的单元FORMS中定义,在第641行有:

property Active: Boolean read FActive;

更改参数名称(使用重构)并不困难,但为什么我不能对方法的属性和参数使用相同的名称?
为了确保它不是Delphi自动转换的错误,我在Lazarus中创建了新项目并添加了私有方法

procedure Test(var Active: Boolean);

结果是一样的.即使我使用const或什么都不使用var.
我查看了FPC文档,但未发现任何此类限制.我只是好奇.

您应该能够为属性和参数使用相同的名称.它们具有不同的范围,因此最接近范围的那个(参数,应该被视为与局部变量在同一范围内)应该隐藏范围(属性)中的“更远”.在Delphi中,即使在该方法中,您仍然可以访问该属性,但是您应该将其限定为Self.Active:

procedure TForm1.Test(var Active: Boolean);
var
  ParamActive: Boolean;
  FormActive: Boolean;
begin
  ParamActive := Active;      // gets the var parameter
  FormActive := Self.Active;  // gets the property
  ...
end;

我不知道为什么FPC将它标记为错误.它不应该.

更新

FWIW,如果你改变了

{$mode objfpc}

{$mode delphi}

它按预期编译,你不会收到错误.我刚试过这个.

网友评论