我的程序使用了各种常量...... string
,int
,double
等等...存储它们的最佳方法是什么? ?我认为我不想要Enum
,因为数据的类型并不完全相同,我想手动设置每个值。我应该把它们全部存放在一个空的课堂上吗?或者有更好的方法吗?
答案 0 :(得分:122)
您可能可以将它们放在静态类中,并使用静态只读属性。
public static class Routes
{
public static string SignUp => "signup";
}
答案 1 :(得分:26)
IMO使用一个充满常量的类对于常量来说很好。如果他们偶尔会有一些改变,我建议在配置和ConfigurationManager类中使用AppSettings。
当我从AppSettings或类似的实际中提取“常量”时,我仍然会有一个“常量”类来包装配置管理器的读数。拥有Constants.SomeModule.Setting
而不必在任何想要消耗所述设置值的地方直接使用ConfigurationManager.AppSettings["SomeModule/Setting"]
更有意义。
此设置的加分点,因为SomeModule
可能是Constants文件中的嵌套类,您可以轻松地使用依赖注入将SomeModule
直接注入依赖它的类中。您甚至可以在SomeModule
之上提取接口,然后在消费代码中创建对ISomeModuleConfiguration
的依赖性,这样就可以将依赖关系与Constants文件分离,甚至可能进行测试更容易,特别是如果这些设置来自AppSettings并且您使用配置转换更改它们,因为设置是特定于环境的。
答案 2 :(得分:18)
我喜欢做的是以下内容(但请务必阅读以使用正确的类型的常量):
internal static class ColumnKeys
{
internal const string Date = "Date";
internal const string Value = "Value";
...
}
Read this了解为什么const
可能不是您想要的。可能的类型的常量是:
const
个字段。如果值可能将来发生更改,请不要跨程序集(public
或protected
)使用,因为该值将在编译时在其他程序集中进行硬编码。如果更改该值,则其他程序集将使用旧值,直到重新编译它们为止。static readonly
字段static
没有set
答案 3 :(得分:11)
这是IMO的最佳方式。不需要属性或只读:
public static class Constants
{
public const string SomeConstant = "Some value";
}
答案 4 :(得分:4)
空的静态类是合适的。考虑使用几个类,以便最终获得良好的相关常量组,而不是一个巨大的Globals.cs文件。
此外,对于某些int常量,请考虑符号:
[Flags]
enum Foo
{
}
答案 5 :(得分:3)
使用web.config或app.config的另一次投票。配置文件是连接字符串等常量的好地方。我不想查看源代码来查看或修改这些类型的东西。从.config文件中读取这些常量的静态类可能是一个很好的折衷方案,因为它会让您的应用程序访问这些资源,就好像它们是在代码中定义的一样,但仍然可以让您灵活地将它们放在易于查看/可编辑的位置空间。
答案 6 :(得分:1)
是的,用于存储常量的static class
就可以了,除了与特定类型相关的常量。
答案 7 :(得分:0)
如果这些常量是影响应用程序行为的服务引用或开关,我会将它们设置为应用程序用户设置。这样,如果需要更改它们,则不必重新编译,您仍然可以通过静态属性类引用它们。
Properties.Settings.Default.ServiceRef
答案 8 :(得分:0)
我建议使用static readonly静态类。请在下面找到代码段:
public static class CachedKeysManager
{
public static readonly string DistributorList = "distributorList";
}