我应该使用字符串常量还是字符串文字

时间:2009-07-22 15:48:25

标签: .net string coding-style

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

我的问题是:

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

我知道它不会在我的应用程序中产生任何明显的差异,但我正在努力提高自己作为开发人员并建立标准,我保持合理的时间。 :O)

5 个答案:

答案 0 :(得分:12)

都不是。推荐的AFAIK方式是使用资源文件。

答案 1 :(得分:3)

首选字符串常量字符串文字,但原因是为了使代码更易于维护,而不是提高其性能。

答案 2 :(得分:3)

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

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

答案 3 :(得分:1)

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

答案 4 :(得分:1)

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

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

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