2013-01-22 36 views
3

我有一個類,我想在System.Drawing中包含一個類似於Point.Empty的「Empty」常量成員。那可能嗎?如何在類中包含「空」常量

這裏是什麼給了一個錯誤的簡化版本:

public class TrivialClass 
{ 
    public const TrivialClass Empty = new TrivialClass(0); 
    public int MyValue; 
    public TrivialClass(int InitialValue) 
    { 
     MyValue = InitialValue; 
    } 
} 

給出的錯誤是:TrivialClass.Empty是類型TrivialClass的。除字符串以外的引用類型的const字段只能用null初始化。

如果它的事項,我想用這樣的:

void SomeFunction() 
{ 
    TrivialClass myTrivial = TrivialClass.Empty; 
    // Do stuff ... 
} 
+3

'是的,我知道這是.NET並沒有Main'再想想.. .. – I4V

+0

@ I4V感謝您的洞察力。有趣的,我會稍後看看,但我不明白這對問題有什麼幫助。 – AppFzx

+0

@AppFzx:他只是說.NET *會使用靜態的'Main'方法作爲默認入口點。 – mellamokb

回答

11

可以使用static readonly這些類型。常量只能用文字值(例如數字,字符串)初始化。

public class TrivialClass 
{ 
    public static readonly TrivialClass Empty = new TrivialClass(0); 
    public int MyValue; 
    public TrivialClass(int InitialValue) 
    { 
     MyValue = InitialValue; 
    } 
} 

查找定義後。 Point.Empty也是static readonlyReference here

+0

完美,這工作!謝謝 – AppFzx

+1

是否可以使用'const'與它是引用類型還是值類型無關。您只能將編譯時間常數分配給這樣的標識符。對於任何作爲編譯時間文字的引用值(即'null'或任何字符串文字),這些都可以工作。對於值類型,他們仍然需要編譯時文字(意思幾乎只是數字類型)。 'default(...)'不是一個編譯時間文字。 – Servy

+0

@servy或字符串,字符。 –

1

只是一個快速的拍攝,但我會建議Point.Empty是一個靜態成員,而不是一個常數:

public class TrivialClass 
{ 
    public static readonly TrivialClass Empty = new TrivialClass(0); 
    ... 
} 
+0

你說得對,'Point.Empty'是靜態的。它也是隻讀的。看到我的答案。 –