我需要一种方法来创建一个静态类,其中一些常量可以是特定的,但硬编码。静态抽象类
我真正想要做的是有一个类,其中提供了几个常量时扩展类 - 我想'常量'硬编码。我想我会做一些抽象的属性,并定义get {return constant; }扩展类时。
我知道这是不可能的,所以现在我面临两个选择,我想知道什么是最好的,为什么(如果有我错过选项,请让我知道!)
- 创建带有空字段的静态类,如果在调用静态方法时字段为空,则抛出异常。
- 放弃静态类。具有抽象属性的非静态类,并在需要的地方创建对象的实例,即使所有功能都是静态的。
我知道这可能是主观的和依赖于个案的,但是当我想到这个问题时我会绕着圈子走,并且真的可以用一些外部输入。我希望可以不做我想做的事情,我只是想着这个错误。
更新:代码:我将尝试编写一些描述我想完成的代码。 我知道这段代码无法工作!
想象一下,抽象类Calculation是在一个dll中,被许多项目使用。它们的功能都是一样的,只是常量因项目而异。
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;
}
}
计算值是在一个单独项目在需要的功能和常数是已知的定义的类。
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);
}
}
选项一是非常简单和优雅,什么都困扰我,没有什么力实现者设置常量。我担心一个(不可能的)情景,在这种情况下,一个不起眼的角落案件将导致财产不被设置,并且代码失败(并且最后一名嫌疑人不断)...
为什么你认为你需要一个静态类?而“特定案例,但硬编码”是什么意思?你能发表一个具体的例子吗? – svick
您无法扩展(继承)静态类,那么您的场景究竟是什么?一小段代码值1000字。 –
你可以用一些示例来描述 - 可能不是可编译的代码吗? –