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

标签 delphi lazarus freepascal

我将我的项目从 Delphi 转移到 Lazarus。在表单中,我有一个带有参数 var Active: Boolean 的私有(private)方法。在Delphi中没问题,但Lazarus给出错误错误:重复标识符“Active”提示:标识符已在第641行单元FORMS中定义,第641行有:

property Active: Boolean read FActive;

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

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}

它确实按预期进行编译,并且您不会收到错误。我刚刚尝试过这个。

关于delphi - 类的属性和方法参数的重复标识符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44159694/

相关文章:

delphi - 将 TCustomActionList 后代的内容转储为人类可读的形式

node.js - 如何在 Delphi 中创建客户端以便与 socket.io 一起使用

string - 字符串内的换行符显示在 TMemoBox 上

delphi - 如何在 freepascal/lazarus 的子进程中实现 cef3 渲染进程处理程序

freepascal - 在lazarus中使用TEventLog

delphi - 使用 TJpegImage 组件将 bmp 转换为 jpg 时出现问题

编译 Lazarus 代码时,Linux 链接器标志 -lXi 未找到 lib

arrays - 如何使用数组作为值在 Pascal 中创建关联数组

delphi - 在 FPC 下的自动化对象中使用标识符或保留字

delphi - OpenGL Delphi中的渲染错误