我正在尝试清理我继承的应用程序中的编译器警告。我们的一个类继承自TControl。我得到的警告是“Redeclaration of Changed隐藏基类中的成员”
“已更改”是TControl中受保护的过程。我正在查看的类已使用布尔属性
覆盖它 property Changed : Boolean read FChanged write FChanged stored true;
我已经排除了一些选项:
从“已更改”重命名为其他内容。这不是一个实用的选项,因为此属性在应用程序的任何位置都使用。
使用编译器指令隐藏警告。我可以这样做,但我更愿意找出警告的含义以及如何纠正它。
所以我的问题是:
1)这个警告真的有问题吗? “隐藏基础成员”有什么含义?
2)如何在不重命名属性或隐藏警告的情况下删除编译器警告?
我正在使用Delphi 2010
[编辑:有一些使用重构工具重命名违规财产的建议。我已经排除了这一点,因为重构工具在这个代码库上根本不起作用]
答案 0 :(得分:5)
如果您自己的'Changed'也是一个过程,您可以使用override指令告诉编译器您在TControl中向基本Changed方法添加功能。如果你的声明不同或者你想要打破继承链的其他原因,你可以指定reintroduce指令告诉编译器你有意破坏链。
不幸的是,这对于属性是不可能的,因此除了
之外,没有真正的解决方案可以解决您的问题我会选择第一个选项。由于您使用的是Delphi 2010,因此您可以使用Delphi中的重构工具在您的应用程序中重命名该属性,尽管在完成修改之前我会彻底检查修改,因为它们也可能会影响基类中的Changed方法。 ..