2011-03-24 101 views
4
internal enum eCoinType 
{ 
    g = 0, 
    h = 1, 
    s = 2 
} 

我已經看到了這條線在同一代碼:約枚舉簡單的問題

eCoinType coin = new eCoinType(); 

是什麼意思?
Enum中的「新」聲明有什麼作用? 謝謝

回答

6

它創建一個eCoinType實例,默認值爲0,對應於eCoinType.g。默認的構造函數是System.Enum class

請注意,儘管使用了關鍵字new,但您仍然創建值類型的項,因爲枚舉是值類型,而不是引用類型。這與使用new創建結構實例相似。

1

只要添加到@BoltClock所說的內容,它將創建一個eCoinType,其默認值爲0,如果是數字類型,則爲enum。所以它會等於:

// These all mean the same thing 
eCoinType coin = eCoinType.g;  // <-- This one is preferred, though 
eCoinType coin = new eCoinType(); 
eCoinType coin = default(eCointType); 
eCoinType coin = (eCoinType)0; 
+0

另外'eCoinType硬幣=超載關鍵字默認(eCoinType)'。 – BoltClock 2011-03-25 00:00:04

+0

啊,好點,這是另一個好的。 – 2011-03-25 00:00:51

0

這是一種壞態度。我讓程序員使用這個默認構造函數來枚舉枚舉的第一個值,而程序員實際上需要枚舉的第一個值。請注意,有些人爲現有枚舉添加了值,而不關心順序,如果他們將新值置於頂部,則會在代碼中發現未定義的行爲。

eCoinType cointype = new eCoinType(); 

在這種情況下等於

eCoinType cointype = eCoinType.g; 

但是,如果你修改eCoinType和g之前放的東西,你已經改變了應用程序邏輯。

Mybe存在對於一個用例(通過使用在不同的插件模塊?聲明枚舉修改應用程序邏輯),但是儘可能多abscure如陰影在Visual Basic :)

+1

如果爲每個枚舉值顯式定義數值,則順序無關緊要。見[這個答案](http://stackoverflow.com/questions/4967656/what-is-the-default-value-for-enum-variable/4967673#4967673)。 – BoltClock 2011-03-25 00:13:41

+0

你是完全正確的,我忘了補充一點。但是數值很少被使用。 – 2011-03-25 00:14:37

+0

是的,這是真的...... – BoltClock 2011-03-25 00:15:08