使用Globals Constants的正确方法

Bru*_*ant 21 .net c# resources app-config

在几乎每个项目中,我都无法决定如何处理某些全局常量值.在过去的日子里,当我编写没有使用dll的C++程序时,很容易.只需创建和.h文件,其中包含一些const为我的项目描述某些常量值的文件.然后我把每个文件都包括在内,并且ta-da!有效.清洁,尊重DRY原则并且很简单.

现在我的项目是C#.Net,它为我提供了大量的选项来解决这个问题.据我所知:

  1. 创建一个程序集,其唯一目的是为项目保存常量值.然后,每个其他大会都应参考这一个.我尊重DRY和KISS,因为添加引用很简单.这里的主要问题是我需要重新编译整个源代码来更新这些值.

  2. 使用app.config文件并让所有其他程序集在​​初始化期间检索常量.所以我添加了为了访问全局值而必须初始化所有内容的开销.更灵活但也更痛苦.

  3. 使用资源.我认为它与app.config相同.

所以,我知道有一个更好的方法来做这个常量声明.但我不知道,到目前为止,一直无法找到如何做到这一点.你能帮忙吗?我有糖果!

谢谢大家

JSB*_*ոգչ 8

呃,假设你的常量不是很大,你应该只能public const在你选择的类中声明它们:

namespace MyProject
{
    public class Awesome
    {
        public const int SomewhatAwesome = 1;
        public const int ExtraAwesome = 2;
        /* etc */
    }
}
Run Code Online (Sandbox Code Playgroud)

您应该将您的const成员包含在与它们相关的类中,即,如果SomewhatAwesome并且ExtraAwesome是由Awesome类使用,那么它们应该是在该类中声明的常量.不要仅仅为了保持常量值创建额外的程序集,也不要为常量创建专用的静态类或命名空间,除非没有其他任何东西将常量组合在一起.

app.config文件用于最终用户在运行时可以更改的设置.不要在该文件中放置不应更改的常量.资源用于"大"对象,例如文本文件和图像,这些对象可能是乏味的或不可能包含为文字类成员.不要在资源中放入简单的东西,如整数和短字符串.


Wil*_*ean 7

您可以使用readonly关键字而不是const在值更改时重新编译所有内容.

摘自MSDN:

虽然const字段是编译时常量,但readonly字段可用于运行时常量

有关详细信息,请参阅此链接.


gkr*_*ers 0

如果您希望这些值能够在运行时更改,请使用 app.config。

如果您希望它们在运行时修复,那么每次您想要更改它们时,您都必须(并且想要阻止用户乱搞它们)重新编译,因此请使用适合您的语言的任何内容。对于 C# 来说,是某种 GlobalValues 类/程序集。

不要将资源文件用于全局值或设置,除非您想要将一组值作为一个组进行交换(例如,为不同的语言进行编译时)。