Redeclaration隐藏基类中的成员

awm*_*oss 1 delphi

我试图清理我继承的应用程序中的编译器警告.我们的一个类继承自TControl.我得到的警告是"改变的重新声明隐藏基类中的成员"

"已更改"是TControl中受保护的过程.我正在看的类已经用布尔属性覆盖了它

property Changed : Boolean read FChanged write FChanged stored true;

我已经排除了一些选项:

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

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

所以我的问题是:

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

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

我正在使用Delphi 2010

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

Gol*_*rol 5

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

不幸的是,这对属性来说是不可能的,所以除了你的问题之外,没有真正的解决方案

  1. 将"已更改"重命名为其他内容
  2. 使用指令隐藏警告
  3. 不要从TControl继承

我会选择第一个选项.由于您使用的是Delphi 2010,因此您可以使用Delphi中的重构工具在您的应用程序中重命名该属性,尽管在完成修改之前我会彻底检查修改,因为它们也可能会影响基类中的Changed方法. ..