Delphi 如何以及在何处覆盖默认字符串类型?

Delphi 如何以及在何处覆盖默认字符串类型?,delphi,Delphi,我想澄清一下,并将默认的string类型声明/覆盖为宽字符串或ansi字符串 例如,string=WideString在Delphi 2009下 如何以及在何处可以声明/设置/更改默认字符串类型,以便整个项目和IDE保证它已被专门覆盖?如果使用Delphi 2009或更高版本。在早期版本中,它被定义为AnsiString 无法重新声明字符串类型 哪里是声明/设置此项的最佳位置,因此整个项目和 IDE保证默认字符串是 声明/覆盖 没有字符串是Delphi中的关键字,不能重新声明 在Unicode

我想澄清一下,并将默认的
string
类型声明/覆盖为宽字符串或ansi字符串

例如,
string=WideString在Delphi 2009下


如何以及在何处可以声明/设置/更改默认字符串类型,以便整个项目和IDE保证它已被专门覆盖?

如果使用Delphi 2009或更高版本。在早期版本中,它被定义为
AnsiString

无法重新声明
字符串
类型

哪里是声明/设置此项的最佳位置,因此整个项目和 IDE保证默认字符串是 声明/覆盖

没有<代码>字符串
是Delphi中的关键字,不能重新声明

在Unicode Delphi版本中,
string
UnicodeString
的别名,在早期版本中是
AnsiString
的别名

WideString
COM BSTR
类型兼容,它不是像
string
AnsiString
UnicodeString


无论您使用哪种Delphi版本(Unicode前版本或Unicode),使用通用
string
类型都是首选

但在需要特定且代码取决于确切类型的地方,请使用
AnsiString
UnicodeString
,即使在特定的Delphi版本中它们可能映射到通用
string

  • 在Unicode Delphi之前版本中使用
    AnsiString
    ,以确保不同版本之间的兼容性和代码的正确性,这取决于变量是
    AnsiString

  • 在Unicode Delphi版本中使用
    UnicodeString
    ,当代码正确性取决于变量为
    UnicodeString


哈哈,谢谢你指出这一点。我希望我们知道——没有任何解释——你不应该那样做;-)@阿贝利斯托,你确定吗?你指的是哪个Delphi版本?@kobik Delphi 7。我不想在以后的版本中进行这样的“破坏”。停下来!对不起,这是假的消息。它是
Integer=string
,而不是
string=Integer
。因为
string
是关键字而
Integer
不是关键字。因此,如果出现在现代Delphi中,您根本无法重新声明
string
,而只能重新声明一些宏。@DalijaPrasnikar您仍然可以使用
Integer=string取笑您的同事;)玩得开心。不,它不是引用计数。@BenjaminWeiss,但别担心,编译器会发出正确的代码,在字符串超出范围时自动释放字符串。区别几乎总是在赋值时生成原始字符串的新副本,除非传入使用const/var关键字的方法。@BenjaminWeiss如果是,则没有必要引入Unicode解构类型。好像没有Unicodehar和Punicodehar类型。全新UnicodeString类型的存在恰恰意味着WideString是一个不同的野兽。
无论您选择哪个Delphi版本
-只是吹毛求疵,但在某些Delphi版本中,根据编译器选项,字符串也可能是短字符串:-)@Arioch'The yep,您在吹毛求疵;-)我完全忘记了这一点,但该编译器指令在任何Unicode Delphi版本中都不起作用。我不认为这在这个时候是真的相关:)