是否可以将保留字用于字段名称?

Jan*_*gen 8 delphi

出于兼容性原因(对象被序列化并导出并且必须与外部名称匹配)我希望字段名称为'type',即

TTBaseWebResponse = class
private
   type: String;
   success: Integer;       
end;

or

TTBaseWebResponse = class
private
   ftype: String;
   fsuccess: Integer;       
public
   type: string read fstring write fstring;
   success: integer read fsuccess write fsuccess;   
end;
Run Code Online (Sandbox Code Playgroud)

Delphi(XE2)甚至不会编译它.这是可能吗?怎么样?

Ken*_*son 9

尝试在字段名称前使用&

  • 那是因为它的名字*是没有&符号的*`type`.&符只是解析器的转义字符.不解析时,您不需要转义任何内容.在代码中的其他位置引用字段时,可以通过完全限定名称来避免使用&符号.例如,`Response.type`. (6认同)
  • 这样做的神奇之处在于RTTI似乎知道这个领域是'类型'(没有&符号)'一直向下'.我正在使用SuperObjects的TSuperRttiContext来序列化对象,JSON输出是:{"success":1,"type":"TTBaseWebResponse"}没有&符号 - 就像我想要的那样. (3认同)

Dav*_*nan 8

这包含在文档中:

扩展标识符

您可能会遇到与Delphi语言保留字同名的标识符(例如,类中的类型或方法).例如,一个类可能有一个名为的方法begin.Delphi保留的单词如begin不能用于标识符名称.

如果您完全符合标识符,那么没有问题.例如,如果要将Delphi保留字类型用于标识名称,则必须使用其完全限定名称:

var TMyType.type
// Using a fully qualified name avoids ambiguity with Delphi language keyword.
Run Code Online (Sandbox Code Playgroud)

作为一个较短的替代方案,&符号(&)可用于解决标识符和Delphi语言保留字之间的歧义.的&防止被解析为一个关键字的关键字(即,一个保留字).如果遇到与Delphi关键字同名的方法或类型,则可以在标识符名称前加上&符号时省略命名空间规范.但是当您声明一个与关键字同名的标识符时,您必须使用&:

type
  &Type = Integer; 
  // Prefix with '&' is ok.
Run Code Online (Sandbox Code Playgroud)


Dar*_*man 6

是的,你必须在名字之前使用&;

TTBaseWebResponse = class
private
  &type: String;
  success: Integer;       
end;
Run Code Online (Sandbox Code Playgroud)