【问题标题】:Should I use string constants or string literals我应该使用字符串常量还是字符串文字
【发布时间】:2009-07-22 15:48:24
【问题描述】:

默认情况下,当我有一串文本将通过消息框、标签等输出到屏幕时,我在代码中使用字符串常量。我这样做的主要原因是我不希望这些字符串发生变化在运行时,这样就没有人真正触及它们。

我的问题是:

从内存的角度来看,这种方法似乎是创建一个对象,其生命周期将由 GB 决定,而字符串字面量似乎更有效,并且会更快地被处理掉。我知道这是一个新手问题,但是在使用常量而不是常量时是否有好处(无论多么微小),或者在这种情况下应该使用常量。

我知道这不会对我的应用程序产生任何明显的影响,但我正在努力提高自己作为开发人员的水平,并在合理的时间内建立标准。 :o)

【问题讨论】:

  • 也许我的英语不够好,但“字符串常量”和“字符串文字”之间有什么区别。他们不一样吗?
  • 字符串文字是引号之间的部分(“foo”)。常量是指将文字分配给名称(const string FOO = "foo")。我认为当 Jason 说文字时,他的意思是使用文字内联 (MessageBox.Show("foo"))。

标签: .net string coding-style


【解决方案1】:

两者都没有。 AFAIK 推荐的方法是使用资源文件。

【讨论】:

  • 我同意。忘记文字和常量。绝对使用资源文件。这样,字符串就被保存在外部并且与语言无关。
  • 当然,取决于上下文。无需 SOFT_CODE:en.wikipedia.org/wiki/Softcoding =)
【解决方案2】:

更喜欢字符串常量而不是字符串字面量,但原因是为了让您的代码更易于维护,而不是提高其性能。

【讨论】:

  • 阿门。可维护性将比 OP 提出的微优化带来十倍的回报。
【解决方案3】:

您应该查看“string interning”。基本上,任何源文件中的所有唯一字符串文字(常量或内联)都将存储在一个特殊的表中。它们永远不会被垃圾收集,并且可以从重复使用中受益。

如果您想要更改这些字符串而不想要重新编译(例如,为了国际化),您可能需要考虑使用资源文件

【讨论】:

  • 字符串实习的结果是你应该做最可维护的事情
  • 我相信字符串实习是 C# 4.0 中的默认设置。我认为编译器将文字插入代码中代替常量(和枚举)的情况也是如此。这意味着将常量与其实现分开可能会导致版本控制问题。同意上面 Rob 的观点,你应该做最可维护的事情——但不要将该语句限制为字符串实习。
【解决方案4】:

这取决于您是否需要将这些字符串本地化。如果您需要将您的软件翻译成其他语言的能力,那么我会在资源文件中放置尽可能多的显示给最终用户的字符串。如果您不需要本地化,或者如果有问题的字符串从未显示给最终用户,我会使用常量。如果您的字符串在多个类之间共享,我将创建包含作为公共常量提供的公共字符串的类。除非这些字符串需要在定义它们的程序集之外使用,否则请将它们保持在可能的最低权限级别(私有、受保护、内部)。

【讨论】:

    【解决方案5】:

    出于国际化目的,公认的最佳实践/建议确实是一组资源文件。

    我遵循在他们自己的类中使用字符串常量的相同模式。我发现创建将在整个 Web 应用程序的多个页面上使用的 const 更容易。即使是带有占位符的 const 也有帮助!

      //{1} for the user's full name for example
    const string SOME_LABEL = "Thanks for purchasing {0} products, {1}!";
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-25
      • 2011-01-05
      • 2011-05-13
      • 2011-02-08
      • 2011-05-28
      • 1970-01-01
      • 2014-05-12
      相关资源
      最近更新 更多