在.NET中应该将常量字符串存储在哪里?

18
你应该把常用的字符串(如错误信息、通知等)存储在哪里?
我之前会将其放入一个全局类中,其中有一些 const 字符串,但其他人则将其存储在资源文件中。那么最佳存储位置是什么?顺便提一下,我是使用 .NET 的。
5个回答

16

如果你预计需要进行国际化或每个实例的自定义,那么Resx很方便进行交换。但是,手动在它们之间移动它们并不是非常困难。那么:是否可能需要更改?

我会说:如果您选择将它们保留在代码中,请尽可能紧密地将常量作用域限定;例如,如果一个常量仅涉及到“User”实例,请将其放在“User”中。

同样,那些不会改变的内容不应该占据resx的空间; 例如,某些内部知名字符串与数据库中值的含义相关......即使您使用resx也可能不适合将其放在其中。


7

我想,如果你想翻译/本地化你的产品,那么资源文件将是存储这些内容的最佳位置。

我相信两种方法都有其他优缺点,但这是我首先想到的一个。


3

如果它们是你的UI元素的一部分,如标题等,则将它们放入资源文件中。

如果它们是你的程序结构的一部分,例如文件前缀、内部错误消息字符串等,则应将它们放入单独的代码文件中。


3
任何可本地化的内容都应该放在资源文件中。即使您百分之百确认不需要本地化,也将字符串放入资源文件可以使这个转换变得容易。
因此,标题、名称、GUI标签、对话框文本、错误消息等都应放在resx中。现在就去做吧。如果/当您的应用程序需要本地化时,未来的开发人员会感激您的。
现在其他常量则有点困难。我认为没有硬性规定,但通常我尽量将“真实”的常量定义为具有尽可能小范围的const。通过“真正的常量”,我的意思是在应用程序生命周期内不太可能改变的任何内容。我不喜欢将非本地化字符串放在资源文件中,因为它往往会破坏封装。例如,PKDB2函数的要求需要定义为本地。密码对象之外的任何人都不需要知道它是什么。
这些带来了一个相关主题。任何目前静态但未来可能更改的内容(甚至在应用程序的未来版本中)都应声明为只读。这些可以从resx加载,但个人上不这样做。Effective C#在第2项中涵盖了此问题。
还有很多取决于您的公司/团队需要的东西。我曾经参加过一个团队,没有任何内容放在资源文件中,也参加过一个团队,甚至我认为应该本地定义的所有内容都保留在资源文件中。

真的 (+1),但认为本地化仅仅是文本有点不太自然;至少,可能需要进行布局更改才能正确适配 - 还有一系列微妙的问题。 - Marc Gravell
1
同意。问题将范围限制在字符串上,因此我的答案也只涵盖了字符串。你是对的;任何可能因本地化而更改的内容都应该放到 resx 文件中。通常需要一些与本地化相关的经验才能意识到许多更微妙的要点,至少我是这样的。 - Gerald Davis

1

请查看这篇文章,您可以在其中找到一些有用的答案和评论中有价值的讨论。

作为一般规则,您应该:

  • 在创建具有常量的公共类之前三思。
  • 将显示给用户的消息放入资源文件中(您永远不知道项目何时需要本地化)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接