您如何管理每个c#类的常量?

您如何管理每个c#类的常量?,c#,asp.net,resources,constants,C#,Asp.net,Resources,Constants,在所有应用程序中,始终会使用一些常量值 我不喜欢在我的应用程序中用每种代码对这些值进行硬编码,因为这会显著降低可维护性 我有两个选择: 在目标类中创建一个内部常量类,并添加公共常量值,例如 内部静态类常量 { 公共常量字符串IdAttribute=“id”; } 或 创建一个资源文件(.resx)并在其中存储我的常量值和公式 我在这里的应用程序中使用了第二种方法。我在使用资源文件时遇到的一个问题是,我无法对它们使用.NET4.0可选参数功能 e、 g.以下选项不起作用: public void

在所有应用程序中,始终会使用一些常量值

我不喜欢在我的应用程序中用每种代码对这些值进行硬编码,因为这会显著降低可维护性

我有两个选择:

  • 在目标类中创建一个内部常量类,并添加公共常量值,例如

    内部静态类常量 { 公共常量字符串IdAttribute=“id”; }

  • 创建一个资源文件(.resx)并在其中存储我的常量值和公式
  • 我在这里的应用程序中使用了第二种方法。我在使用资源文件时遇到的一个问题是,我无法对它们使用.NET4.0可选参数功能

    e、 g.以下选项不起作用:

    public void DoSomething(string id = Resources.Constants.Id)
    {
    // ..
    }
    
    错误在于运行时未确定Id的值

    基本上,您会使用和推荐哪种方法来管理每个类的常量?为什么?

    我目前的方法是,如果我有只应该在一个类中使用的常量,我将在该类中创建一个静态常量类。如果我的常量要在多个类或项目中使用,我会将它们放在一个资源文件中,例如PageUrls.resx


    谢谢,

    就我个人而言,我宁愿在它们逻辑上所属的类中定义常量,就像(比如)DateTime.MinValue一样

    然后,一般来说,公开这些常量有点“代码味道”,这意味着一些耦合可能应该以更好的方式表达。在代码允许的情况下,将它们设置为私有(或内部)显然没有害处


    然而,有时总的常量是全局的。这些通常是实际配置,应该这样对待。

    我个人使用的资源主要用于呈现给用户的常量。主要的优势是可以将其本地化


    对于内部常量,我更喜欢变量。当它们被许多类共享时,我会将它们放入一个常量类,否则在需要它们的类中

    const比静态只读更好地使用内存。@William:
    public const
    变量从其他程序集访问时可能会导致维护问题。看看链接的答案。(可能“internal”一词是我的一个不幸选择-我的意思是没有向用户提供常量)我理解const create对于其他程序集的问题,如果它的值将来会更改,但是常量是常量,并且不应该更改,因此提出的问题是无效的,因为它首先是一个设计问题。若您有常数use const,若您并没有常数,并且您只需要一个可能更改的初始化值,那个么使用静态只读。