代码之家  ›  专栏  ›  技术社区  ›  awmross

重新声明隐藏基类中的成员

  •  1
  • awmross  · 技术社区  · 14 年前

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

    “Changed”是TControl中的一个受保护的过程。我正在查看的类已用布尔属性重写了它

    property Changed : Boolean read FChanged write FChanged stored true;

    1. 将“Changed”重命名为其他名称。这不是一个实用的选项,因为此属性在应用程序中的任何地方都使用。

    所以我的问题是:

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

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

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

    1 回复  |  直到 14 年前
        1
  •  5
  •   GolezTrol    14 年前

    如果您自己的“Changed”也是一个过程,则可以使用override指令告诉编译器,您向TControl中的base Changed方法添加了功能。如果您的声明不同,或者您希望由于其他原因中断继承链,可以指定reintroducte指令来告诉编译器您已经断开了继承链。

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

    1. 不从TControl继承

    我会选择第一个选项。由于您使用的是Delphi2010,所以您可以使用Delphi中的重构工具在应用程序中重命名属性,尽管我会在最终修改之前彻底检查这些修改,因为它们可能也会影响基类中更改的方法。。。