【发布时间】:2016-01-26 17:31:25
【问题描述】:
我想使用静态类为我的应用程序创建配置。
首先请原谅我的无知,我不是全职 c# 开发人员。我来自 Ruby/Javascript 世界,动态访问常量和变量是微不足道的。
无论这是否是正确的方法,我目前还不是 100%。非常感谢其他建议的方法。
我的配置有以下静态类设置:
public static class Config
{
public static class MaterialQuality
{
public static class Low
{
public const float Value = 0.1f;
public const int Cost = 10;
}
public static class Medium
{
public const float Value = 0.2f;
public const int Cost = 20;
}
public static class High
{
public const float Value = 0.2f;
public const int Cost = 40;
}
}
}
然后我有一个类Material,它传递了一个与上述类型Low,Medium,High相关的枚举值。
enum 统一的原因,这为开发人员提供了一种快速方法,可以为关卡设计师提供对象的选项列表。
因此,通过选择枚举值,关卡设计师可以设置存储在配置中的属性,而无需实际将值直接输入到对象中。这些值在初始化时针对对象设置。
在构造函数中,我想从传递的MaterialQuality 枚举值的静态配置值中为Cost 和Value 设置成员变量。
public enum MaterialQuality
{
Low,Medium,High
}
public class Material
{
private int Cost;
private float Value;
Material(MaterialQuality quality) {
Cost = Config.MaterialQuality.<quality>.Cost;
Value = Config.MaterialQuality.<quality>.Value;
//in Javascript I'd use associative array access to the object
Cost = Config.MaterialQuality[quality].Cost;
//in Ruby we have const_get() on classes.
Cost = Config.MaterialQuality.const_get(quality).Cost
}
}
这种方法的主要原因是为配置提供单一位置,并为非技术人员提供一种相当简单的方法来更改应用程序的某些部分,而无需深入研究主要类。它还允许我利用智能感知中可用的常量。
【问题讨论】:
-
您应该更好地解释您想要实现的目标,而不是如何改进您的解决方案,这在如何使用 C# 和 OOP(不仅在 C# 中)方面似乎是错误的设计。
-
我可能应该提到这是一个统一项目的一部分。
-
一小时内获得六个答案 - 哇...