0

TObject在 Delphi XE7 (Firemonkey) 中有几个类 (of),它们有一个属性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没有看到这样的东西,如果我要尝试使用它,它也不是一个有效的字段。我在文档中看不到有关此类属性的任何内容。仅当属性类型是(至少几周前来自 SVN ISuperObject)的最新版本时,才会出现这种情况。XSuperObject我也尝试过使用类型Integer,我也明白了。

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

编辑

它似乎只在我有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,我不会收到此警告。我的 XSuperObject 副本已经有几周的历史了。

4

2 回答 2

7

是否有可能为此XSuperObject声明一个类助手来TObject引入一个AsJSON属性?这可以解释错误。

更新: Sertac 在评论中证实确实如此。

于 2014-12-28T18:40:03.017 回答
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.
于 2014-12-28T18:35:45.707 回答