Delphi中的System.String到底是什么?

Delphi中的System.String到底是什么?,delphi,delphi-10-seattle,Delphi,Delphi 10 Seattle,我维护了一些非常旧的Delphi代码,这些代码在特定单元中使用EmptyString 编译器将其解析为 costant EmptyString=''-from System.string 现在,我的硬盘或.dcu中没有System.string.pas文件,因此我无法了解更多信息 我发现 C:\Program Files (x86)\Embarcadero\Studio\17.0\source\rtl\sys\system.SysUtils.pas 另一个类似常数: { Empty strin

我维护了一些非常旧的Delphi代码,这些代码在特定单元中使用
EmptyString

编译器将其解析为

costant EmptyString=''-from System.string

现在,我的硬盘或.dcu中没有System.string.pas文件,因此我无法了解更多信息

我发现

C:\Program Files (x86)\Embarcadero\Studio\17.0\source\rtl\sys\system.SysUtils.pas
另一个类似常数:

{ Empty string and null string pointer. These constants are provided for
  backwards compatibility only.  }

  EmptyStr: string = '';
{$IFNDEF NEXTGEN}
  NullStr: PString = @EmptyStr;
乍一看,
EmptyStr
EmptyString
似乎只是在过去被使用过,所以它们在某种程度上被弃用,所以最好直接使用
'
,或者在应用程序中定义重新定义它们的常量

现在,在升级第三方组件后,我意识到
EmptyString
不再被解析

我的问题是: 什么是
System.String
?为什么rtl中没有相应的.pas文件

我用谷歌搜索没有成功

谢谢。

是单元中正式定义的类型

字符串
类型实际上是该类型的别名。文件称其定义为:

Unicode销毁
的文档则说明:


没有Pascal代码来定义该类型,因为它是内置类型或内在类型。所有内置类型都被正式视为是在
系统
单元中声明的,即使您在该单元的Pascal源代码中看不到它们的声明。

我不记得曾经读过
系统.string
,但它可能只是Delphis内置的
字符串
类型。相关代码部分位于System.pas单元中,部分内置于编译器中。System.string单元系统中的类型字符串。它不是一个类或任何东西,它是一个内置类型,是编译器的特殊类型,由运行时管理。这篇文章对它的描述稍微好一点(与PChar一起):@Uli:我有。您将在错误消息等(例如,
不兼容类型:“System.string”和“System.Integer”或类似内容)和RTTI中看到它。感谢您的解释。那么清空字符串在某种程度上是一个“隐藏常量”?建议不要使用它吗?不,
EmptyString
在Delphi RTL中没有定义。如果引用它的代码没有编译,那么代码必须定义
EmptyString
。另一方面,
EmptyStr
是在
System.SysUtils
单元中定义的。您的问题是关于类型
System.String
。不要混淆类型、变量和常量。我已经解释过了。我之前评论中的第二句话。是的,对不起。现在我明白了。我意识到,对于Delphi中的任何字符串,提示都是“System.string”!非常感谢,你澄清了我的疑问,帮助我了解更多关于rtl的知识。
type String = UnicodeString;
type UnicodeString = { built-in type };