我正在制作一个使用几个常量的程序。首先,每次我需要使用常量时,我都将其定义为
//C#
private static readonly int MyConstant = xxx;
//Java
private static final int MyConstant = xxx;
在我需要的课程中。过了一段时间,我开始意识到在一个以上的课程中需要一些常量。
此时,我有3个选择:
我最终用第二个选项实现了我的代码。 这是最好的选择吗?我觉得我可能错过了一些其他更好的选择。
让我担心在这里使用单例是这个类的用户无法清楚这个类正在使用单例。也许我可以创建一个包含所有常量所需的ConstantsClass,然后我将它在构造函数中传递给需要它的类?
由于
编辑:我主要用于复杂类型,而不是整数和字符串。至少在C#案例中有所作为,因为这意味着我无法使用const
关键字。
答案 0 :(得分:5)
使用属性文件并将常量放在那里。
答案 1 :(得分:5)
没有关于C#的措辞,但在Java中有几种方法可以解决这个问题。
将access modifier更改为默认值(仅限套餐)或public
。最直接的解决方案。
将它们分组为私有或public
enum
。如果这些值相互,则最直接。例如。 Role.ADMIN
,Role.USER
,Role.GUEST
等
在包私有或public
interface
中声明它们,让类实现它。只有当这些常量属于某些合同时,才能执行此操作。
将它们放入properties files并加载为private static final Properties
并添加public static String getProperty(String key)
。将其包含在某些包私有或public
Configuration
类中。如果这些常量可能对您可以在外部控制的更改敏感,则会更有用。
实例不需要访问常量,因此整个单例概念毫无意义。
答案 2 :(得分:2)
ConfigurationManager.AppSettings Property 。您将设置放入配置文件中,假设这些是您想要在一个地方设置的元素,例如。对于使用ASP.Net的网站,web.config是一个可以放置设置的位置,这样开发,测试和生产环境都可以在运行方式上有不同的设置。
答案 3 :(得分:2)
就int
而言,我通常在C#中使用enum
public enum MyMagicNumbers
{
TheFirst = 1,
TheSecond = 2,
TheLast = 10,
}
对于其他类型 - 如已经提到的BalusC--您只需要一个密封的课程
public sealed class MyMagicStuff
{
private MyMagicStuff() {}
public const string TheFirst = "One";
public const string TheSceond = "Two";
public const string TheLast = "Ten";
}
答案 4 :(得分:1)
我将它定义在一个地方,在一个需要它的类中。我将它设为静态,最终和公共,因此它是真正的常量,可由任何其他需要它的客户端访问。
答案 5 :(得分:0)