我在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
时才会出现这种情况,XSuperObject
是Integer
的最新版本(至少几周前来自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副本已经有几周了。
答案 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.