【问题标题】:Parameter name conflict with class member参数名称与类成员冲突
【发布时间】:2019-11-23 06:49:35
【问题描述】:

我有一个参数,它的名称与 with/do 范围内的过程相同。经过数小时的调查,我意识到了这一点,但现在我正在寻找一种比重命名参数更好的解决方案。

Procedure Test(Param:TMyTape);
begin
    with TSomeClass.Create do
    try
        AClassFunc(Param);   // << There is a Param method inside TSomeClass
    finally
        free;
    end;
end;

TSomeClass 中的 Param 方法使 Param 参数无用。如果Param 方法的结果类型与Param 参数相同,那么编译器甚至不会注意到。

Q:是否可以参考Param参数解决这个问题,不需要重命名Param

另一种解决方案可能是为 TSomeClass 声明一个变量并且不使用 with/do 子句。我也不在找这个。

【问题讨论】:

  • 据我所知,我说:您已经概述了这两种解决方案。我认为没有一种语法可以允许您真正想要的东西。我建议你放弃 with 并将对象分配给一个变量。
  • Ime, with 只会产生可避免的问题。
  • 我的强烈建议是去重命名你的Param参数。事实上,避免对法米和方法使用相同的名称。为什么? Delphi 实际上是唯一允许这样做的 Object Pascal 编译器。例如,如果您将代码移植到 FPC 中,您将遇到一大堆重复名称错误。此外,如果您遵循 Delphi 代码格式规范,所有函数参数的名称中都应该有 A 前缀。

标签: class delphi parameters delphi-xe6


【解决方案1】:

是否可以参考Param参数来解决这个问题并且不需要重命名Param?

如果您要使用with,则不是。

另一种解决方案可能是为 TSomeClass 声明一个变量并且不使用 with/do 子句。

这种方法行得通,也是我编写代码的方式。只有极少数场景适合with。这不是其中之一。

【讨论】:

    猜你喜欢
    • 2015-02-26
    • 2011-04-15
    • 1970-01-01
    • 2012-10-01
    • 2020-06-18
    • 2019-07-13
    • 1970-01-01
    • 1970-01-01
    • 2014-04-30
    相关资源
    最近更新 更多