我需要一种创建静态类的方法,其中某些常量可以是特定于案例的,但是硬编码了。
我真正想做的是创建一个类,在扩展类时提供几个常量 - 我想要“常量”被硬编码。我想通过定义一些抽象属性,并在扩展类时定义 get { return constant; } 来实现这一点。
我知道这是不可能的,所以现在我面临两个选择,并想知道哪种方式最好,为什么(如果有我忽略的选项,请告诉我!)
1.创建一个带有可为空字段的静态类,并在调用静态方法时如果字段为空则抛出异常。
2.放弃静态类。有一个非静态类具有抽象属性,并在需要时创建对象的实例,尽管所有功能都是静态的。
我知道这可能是主观的和依赖情况的,但是当我考虑这个问题时,我总是困惑不解,希望能得到一些外部输入。此外,我希望可能有一种方法可以实现我的愿望,而我只是想错了。
更新:代码:我将尝试编写一些描述我想要完成的代码。我知道这段代码无法正常工作! 请想像一下,抽象类Calculation位于dll中,由许多项目使用。所有项目的功能都相同,只有Constant因项目而异。
我真正想做的是创建一个类,在扩展类时提供几个常量 - 我想要“常量”被硬编码。我想通过定义一些抽象属性,并在扩展类时定义 get { return constant; } 来实现这一点。
我知道这是不可能的,所以现在我面临两个选择,并想知道哪种方式最好,为什么(如果有我忽略的选项,请告诉我!)
1.创建一个带有可为空字段的静态类,并在调用静态方法时如果字段为空则抛出异常。
2.放弃静态类。有一个非静态类具有抽象属性,并在需要时创建对象的实例,尽管所有功能都是静态的。
我知道这可能是主观的和依赖情况的,但是当我考虑这个问题时,我总是困惑不解,希望能得到一些外部输入。此外,我希望可能有一种方法可以实现我的愿望,而我只是想错了。
更新:代码:我将尝试编写一些描述我想要完成的代码。我知道这段代码无法正常工作! 请想像一下,抽象类Calculation位于dll中,由许多项目使用。所有项目的功能都相同,只有Constant因项目而异。
public abstract static class Calculation
{
private abstract int Constant { get; } //The constant is unknown at this time
public static int Calculate(int inputValue)
{
return inputValue * Constant;
}
}
类Calc在一个单独的项目中定义,该项目需要该功能并了解常量。
public static class Calc : Calculation
{
private override int Constant { get { return 2; }
}
...
static class Program
{
[STAThread]
static void Main()
{
//At some point:
int result = Calc.Calculate(6);
}
}
我认为最简单的方法是创建一个非静态类并创建一个实例,但我担心多个类的实例可能会很昂贵,如果可能的话,我想避免这种情况。
我无法看出如何将其编写为单例模式,而又不在每个项目中重新编写 - 只有dll中的嵌套类。这并不能阻止实现者创建普通类,并且很可能在使用代码的每个项目中重新启动辩论。
更新#2:我所说的第一种选择是:
在dll中的类:
public static class Calculation
{
public int? Constant {get; set;}
public static int Calculate(int inputValue)
{
if (Constant == null)
throw new ArgumentNullException();
return inputValue * (int)Constant;
}
}
如何在另一个项目中使用该函数:
static class Program
{
[STAThread]
static void Main()
{
//At some point:
Calculation.Constant = 2;
int result = Calc.Calculate(6);
}
}
选项一非常简单优雅,但是我担心的是它没有强制实现者设置常量。我担心一个(尽管不太可能的)情况,即一个晦涩的边缘情况将导致属性未被设置,从而导致代码失败(并且常量成为最后一个可疑对象)...