Redeclaration隐藏基类中的成员

时间:2010-11-18 00:44:55

标签: delphi

我正在尝试清理我继承的应用程序中的编译器警告。我们的一个类继承自TControl。我得到的警告是“Redeclaration of Changed隐藏基类中的成员”

“已更改”是TControl中受保护的过程。我正在查看的类已使用布尔属性

覆盖它

property Changed : Boolean read FChanged write FChanged stored true;

我已经排除了一些选项:

  1. 从“已更改”重命名为其他内容。这不是一个实用的选项,因为此属性在应用程序的任何位置都使用。

  2. 使用编译器指令隐藏警告。我可以这样做,但我更愿意找出警告的含义以及如何纠正它。

  3. 所以我的问题是:

    1)这个警告真的有问题吗? “隐藏基础成员”有什么含义?

    2)如何在不重命名属性或隐藏警告的情况下删除编译器警告?

    我正在使用Delphi 2010

    [编辑:有一些使用重构工具重命名违规财产的建议。我已经排除了这一点,因为重构工具在这个代码库上根本不起作用]

1 个答案:

答案 0 :(得分:5)

如果您自己的'Changed'也是一个过程,您可以使用override指令告诉编译器您在TControl中向基本Changed方法添加功能。如果你的声明不同或者你想要打破继承链的其他原因,你可以指定reintroduce指令告诉编译器你有意破坏链。

不幸的是,这对于属性是不可能的,因此除了

之外,没有真正的解决方案可以解决您的问题
  1. 将“已更改”重命名为其他内容
  2. 使用指令隐藏警告
  3. 不要从TControl继承
  4. 我会选择第一个选项。由于您使用的是Delphi 2010,因此您可以使用Delphi中的重构工具在您的应用程序中重命名该属性,尽管在完成修改之前我会彻底检查修改,因为它们也可能会影响基类中的Changed方法。 ..