Delphi中的System.String到底是什么?
我维护了一些非常旧的Delphi代码,这些代码在特定单元中使用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
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 };