【问题标题】:How would you manage your constants for each c# class?您将如何管理每个 c# 类的常量?
【发布时间】:2011-10-06 08:58:31
【问题描述】:

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

我不喜欢在我的应用程序中的每个代码中硬编码这些值,因为这会显着降低可维护性。

我有两个选择:

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

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

  1. 创建一个资源文件 (.resx) 并将我的常量值和公式存储在其中。

我在这里的应用程序中使用了第二种方法。我在使用资源文件时遇到的一个问题是我无法对它们使用 .NET 4.0 可选参数功能。

例如以下不起作用:

public void DoSomething(string id = Resources.Constants.Id)
{
// ..
}

错误是在运行时没有确定Id的值。

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

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

谢谢,

【问题讨论】:

    标签: c# asp.net resources constants


    【解决方案1】:

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

    然后,一般来说,公开这些常量有点“代码味道”,暗示一些应该以更好的方式表达的耦合。当您的代码允许时,将它们设为私有(或内部)显然没有害处。

    但是,有时存在全局常量。这些通常是实际配置,应该这样对待。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 据我所知,const 比 static readonly 更好地使用内存。
      • @William: public const 变量在从其他程序集访问时可能会导致维护问题。看看链接的答案。 (也许“内部”这个词是我的一个不幸的选择——我的意思是没有呈现给用户的常量)
      • 我理解 const create 为其他程序集创建的问题,如果它的值在未来发生变化,但常量是常量,不应该改变,所以提出的问题是无效的,因为它一直是设计问题第一名。如果你有常量使用 const,如果你没有常量并且你只需要一个可能会改变的初始化值,使用 static readonly。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-20
      • 2014-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多