如何摆脱这个编译器警告?

时间:2014-12-28 18:15:27

标签: delphi compiler-warnings delphi-xe7 xsuperobject

我在Delphi XE7(Firemonkey)中有一些类(TObject),它们具有属性AsJson

uses
  System.Classes, System.SysUtils, XSuperObject;

type
  TMyObject = class(TObject)
  public
    property AsJson: ISuperObject read GetAsJson;
  end;

但是,编译器会给我这些警告:

[dcc32 Warning] MyUnit.pas(383): W1009 Redeclaration of 'AsJson' hides a member in the base class

我正在查看TObject的基类并且看不到这样的事情,如果我试图使用它,它也不是一个有效的字段。我在文档中没有看到关于这样一个属性的内容。只有当属性类型为ISuperObject时才会出现这种情况,XSuperObjectInteger的最新版本(至少几周前来自SVN)。我也尝试使用类型XSuperObject,我也得到了它。

这个警告在我的场景中意味着什么,我该如何摆脱它?

修改

似乎只有当我在使用条款中有program Project1; {$APPTYPE CONSOLE} {$R *.res} uses System.SysUtils, XSuperObject in 'C:\...\XSuperObject.pas', XSuperJSON in 'C:\...\XSuperJSON.pas'; type TMyObject = class(TObject) private FTest: Integer; public property AsJson: Integer read FTest; end; begin end. 时才会发生......

[dcc32 Warning] Project1.dpr(17): W1009 Redeclaration of 'AsJson' hides a member in the base class

以上示例产生:

XSuperObject

如果我只删除{{1}},我就不会收到此警告。我的XSuperObject副本已经有几周了。

2 个答案:

答案 0 :(得分:7)

XSuperObject是否可能为TObject声明了一个类帮助器,这会引入AsJSON属性?这可以解释错误。

更新:Sertac在评论中确认情况确实如此。

答案 1 :(得分:1)

以下代码也会触发此类警告。我怀疑你在某处重新宣布TObject课程。

program Project1;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils;

type
  ISuperObject = interface
  end;

  TObject = class
  public
    function AsJSON: string; virtual;
  end;

  TMyObject = class(TObject)
  public
    function GetAsJson: ISuperObject;
    property AsJson: ISuperObject read GetAsJson;
  end;

function TObject.AsJSON: string;
begin

end;

function TMyObject.GetAsJson: ISuperObject;
begin

end;

begin
end.