Iva*_*gky 3 delphi freepascal lazarus
我将我的项目从Delphi转移到Lazarus.在一个表单中,我有一个带参数的私有方法var Active: Boolean.在Delphi这是确定的,但拉撒路给出一个错误Error: Duplicate identifier "Active"和Hint: Identifier already defined in unit FORMS at line 641上线641有:
property Active: Boolean read FActive;
Run Code Online (Sandbox Code Playgroud)
更改参数名称(使用重构)并不困难,但为什么我不能对方法的属性和参数使用相同的名称?
为了确保它不是Delphi自动转换的错误,我在Lazarus中创建了新项目并添加了私有方法
procedure Test(var Active: Boolean);
Run Code Online (Sandbox Code Playgroud)
结果是一样的.即使我使用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;
Run Code Online (Sandbox Code Playgroud)
我不知道为什么FPC将它标记为错误.它不应该.
FWIW,如果你改变了
{$mode objfpc}
Run Code Online (Sandbox Code Playgroud)
至
{$mode delphi}
Run Code Online (Sandbox Code Playgroud)
它按预期编译,你不会收到错误.我刚试过这个.
| 归档时间: |
|
| 查看次数: |
316 次 |
| 最近记录: |