2010-09-10 155 views
3
public enum sEnum 
{ 
    zero = 0, one = 1 
} 

public int x; 

public static void a(sEnum s) 
{ 
    x = 3; 
    if (s == sEnum.one) ... 
} 

爲什麼可以在這裏檢查枚舉的值,因爲不使用static關鍵字?這在語言規範中記錄在哪裏?從靜態方法訪問非靜態枚舉值

+0

雖然已經回答了問題,但是想告訴一個錯誤,即當函數a是靜態的,那麼它如何將值3賦值給非靜態成員x。 對不起這個問題的範圍,但我無法阻止自己在該行代碼上值得注意。 我希望你不會介意。 :) – necixy 2010-09-18 18:00:59

回答

6

枚舉是剛剛命名的值,所以你可以在靜態上下文中使用它們,就像任何其他常量一樣。

語言規範狀態的第3.4.3節:

枚舉的成員是在枚舉中聲明的常量

+1

「10.4:即使常量被認爲是靜態成員,常量聲明既不需要也不允許靜態修飾符。」結合3.4.3作出令人滿意的答案。 – seamast 2010-09-10 19:13:32

+0

@seamast:感謝您的更新。 – 2010-09-10 20:01:14

2

我認爲在規格14.3是你在找什麼:

枚舉成員的命名和作用域的方式與類中的域完全類似。枚舉成員的範圍是其包含枚舉類型的主體。在這個範圍內,枚舉成員可以用簡單的名字來引用。從所有其他代碼中,枚舉成員的名稱必須使用枚舉類型的名稱進行限定。枚舉成員沒有任何聲明的可訪問性 - 如果枚舉類型的枚舉類型可訪問,則枚舉成員是可訪問的。