public enum sEnum
{
zero = 0, one = 1
}
public int x;
public static void a(sEnum s)
{
x = 3;
if (s == sEnum.one) ...
}
爲什麼可以在這裏檢查枚舉的值,因爲不使用static關鍵字?這在語言規範中記錄在哪裏?從靜態方法訪問非靜態枚舉值
public enum sEnum
{
zero = 0, one = 1
}
public int x;
public static void a(sEnum s)
{
x = 3;
if (s == sEnum.one) ...
}
爲什麼可以在這裏檢查枚舉的值,因爲不使用static關鍵字?這在語言規範中記錄在哪裏?從靜態方法訪問非靜態枚舉值
枚舉是剛剛命名的值,所以你可以在靜態上下文中使用它們,就像任何其他常量一樣。
語言規範狀態的第3.4.3節:
枚舉的成員是在枚舉中聲明的常量
「10.4:即使常量被認爲是靜態成員,常量聲明既不需要也不允許靜態修飾符。」結合3.4.3作出令人滿意的答案。 – seamast 2010-09-10 19:13:32
@seamast:感謝您的更新。 – 2010-09-10 20:01:14
我認爲在規格14.3是你在找什麼:
枚舉成員的命名和作用域的方式與類中的域完全類似。枚舉成員的範圍是其包含枚舉類型的主體。在這個範圍內,枚舉成員可以用簡單的名字來引用。從所有其他代碼中,枚舉成員的名稱必須使用枚舉類型的名稱進行限定。枚舉成員沒有任何聲明的可訪問性 - 如果枚舉類型的枚舉類型可訪問,則枚舉成員是可訪問的。
雖然已經回答了問題,但是想告訴一個錯誤,即當函數a是靜態的,那麼它如何將值3賦值給非靜態成員x。 對不起這個問題的範圍,但我無法阻止自己在該行代碼上值得注意。 我希望你不會介意。 :) – necixy 2010-09-18 18:00:59