2014-06-19 52 views
1

我正在使用c#並試圖爲我的自定義類型常量字段分配邏輯(非空值)。這裏是如何。爲什麼我不能爲我的常量字段賦值?

public class Types_of_Accuracy{ 
1 public const Types_of_Accuracy Decimal_Places=Type_of_Accuracy(false); 
2 private bool SD; 
3 public const Types_of_Accuracy Significant_Digits=Type_of_Accuracy(true); 
4 private static Types_of_Accuracy Type_of_Accuracy(bool Significant_digits){ 
5  Types_of_Accuracy TA=new Types_of_Accuracy(); 
6  TA.SD=Significant_digits; 
7  return TA; 
8 } 
} 

當我嘗試編譯。我得到這些錯誤。

  • 第1行|'Types_of_Accuracy.Decimal_Places'的類型是'Types_of_Accuracy'。除字符串以外的引用類型的const字段只能用null初始化。 (CS0134)
  • 第3行|'Types_of_Accuracy.Significant_Digits'的類型是'Types_of_Accuracy'。除字符串以外的引用類型的const字段只能用null初始化。 (CS0134)

到目前爲止,我最喜歡的解決方案是用下面的代碼替換上面的代碼。

public class Types_of_Accuracy{ 
1 static Types_of_Accuracy(){ 
2 Decimal_Places.SD=false; 
3 Significant_Digits.SD=true; 
4 } 
5 public const Types_of_Accuracy Decimal_Places=null; 
6 private bool SD; 
7 public const Types_of_Accuracy Significant_Digits=null; 
} 

任何改進將不勝感激。

+3

一個建議:刪除下劃線並使用[資本駱駝案例](http://en.wikipedia.org/wiki/CamelCase) –

回答

5
  • 常量字段必須用常量值進行初始化。
  • 而且它們必須是值類型或字符串,或者使用null初始化。

Types_of_Accuracy是一個類(引用類型),並且您試圖用方法調用來初始化常量,這些常量不是常量。作爲一種變通方法,可以作爲static readonly代替聲明字段:

public static readonly Types_of_Accuracy Decimal_Places = Type_of_Accuracy(false); 
public static readonly Types_of_Accuracy Significant_Digits = Type_of_Accuracy(true); 

這是不完全一樣的常數:使用只讀字段的值實際上會在運行時讀取場,同時採用恆定將取代它在編譯時具有它的價值。但在大多數情況下,這種差異並不重要。

2

一個const是一個編譯時間常數,引用類型不能在編譯時被分配,所以你需要使用一個只讀靜態字段,而不是在運行時將它們分配

public class Types_of_Accuracy{ 
    public static readonly Types_of_Accuracy Decimal_Places=Type_of_Accuracy(false); 
    private bool SD; 
    public static readonly Types_of_Accuracy Significant_Digits=Type_of_Accuracy(true); 
    private static Types_of_Accuracy Type_of_Accuracy(bool Significant_digits){ 
     Types_of_Accuracy TA=new Types_of_Accuracy(); 
     TA.SD=Significant_digits; 
     return TA; 
    } 
} 
相關問題