我需要一種方法來創建一個靜態類,其中一些常量可以是特定的,但硬編碼。靜態抽象類
我真正想要做的是有一個類,其中提供了幾個常量時擴展類 - 我想'常量'硬編碼。我想我會做一些抽象的屬性,並定義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字。 –
你可以用一些示例來描述 - 可能不是可編譯的代碼嗎? –