【问题标题】:How and where can I overwrite the default string type?如何以及在哪里可以覆盖默认字符串类型?
【发布时间】:2015-11-12 09:53:30
【问题描述】:

我想让事情变得直截了当,并将默认的 string 类型声明/覆盖为宽字符串或 ansi 字符串。

例如string = WideString; Delphi 2009 下

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

【问题讨论】:

    标签: delphi


    【解决方案1】:

    声明/设置它的最佳位置在哪里,所以整个项目和 IDE 保证,默认字符串是明确的 声明/覆盖?

    无处可去。 string是Delphi中的关键字,不能重新声明。

    Delphi keywords

    在 Unicode Delphi 版本中,stringUnicodeString 的别名,在早期版本中是 AnsiString 的别名。

    WideStringCOM BSTR 类型兼容,它不像stringAnsiStringUnicodeString 那样被引用计数

    String Types


    无论您使用哪个 Delphi 版本(Unicode 之前的版本,或 Unicode),都首选使用泛型 string 类型。

    但是在您需要具体且代码取决于确切类型的地方使用AnsiStringUnicodeString,即使它们可能映射到通用string,尤其是Delphi 版本。

    • 在 pre-Unicode Delphi 中使用 AnsiString 以确保跨版本的兼容性和代码中的代码正确性,这取决于变量为 AnsiString

    • 在 Unicode Delphi 版本中使用 UnicodeString 以在代码正确性取决于变量 UnicodeString 时验证您的代码

    【讨论】:

    • 不,它不被引用计数。
    • @BenjaminWeiss 但别担心,当字符串超出范围时,编译器会发出正确的代码来自动释放字符串。区别几乎总是在分配时生成原始字符串的新副本,除非您使用 const/var 关键字传入方法。
    • @BenjaminWeiss 如果是,那么引入 UnicodeString 类型就没有意义了。就像没有 Unicodehar 和 PUnicodeChar 类型一样。全新 UnicodeString 类型的存在恰恰意味着 WideString 是一头不同的野兽。
    • No matter which Delphi version you - 只是吹毛求疵,但在某些 Delphi 版本中,取决于编译器选项,字符串也可能是 ShortString :-)
    • @Arioch'是的,你在吹毛求疵 ;-) 我完全忘记了那个,但是该编译器指令在任何 Unicode Delphi 版本中都不起作用。我认为在这个时间点上它并不真正相关:)
    【解决方案2】:

    如果您使用 Delphi 2009 或更高版本string is defined as UnicodeString。在早期版本中,它被定义为AnsiString

    没有办法重新声明string 类型。

    【讨论】:

    • 哈哈,感谢您指出这一点。我希望我们知道 - 没有任何解释 - 你不应该这样做;-)
    • @Abelisto,你确定吗?你指的是哪个 Delphi 版本?
    • @kobik Delphi 7. 我不会尝试在以后的版本中进行这种“破坏”。
    • 停下!抱歉虚假信息。是Integer = string,而不是string = Integer。因为string 是关键字而Integer 不是。因此,如果 string 存在于现代 Delphi 中,则根本无法重新声明它,而不是重新声明一些宏。
    • @DalijaPrasnikar 您仍然可以使用Integer = string; 取笑您的同事;) 玩得开心。
    猜你喜欢
    • 1970-01-01
    • 2019-05-09
    • 2015-03-17
    • 1970-01-01
    • 2011-11-14
    • 2018-10-08
    • 2015-06-10
    • 2020-08-10
    • 1970-01-01
    相关资源
    最近更新 更多