2012-02-10 102 views
6

根據MSDN herehere(以及accepted answer to this qstn),枚舉的默認可訪問性爲public。 然而,這段代碼:C#中枚舉的默認訪問修飾符

public class Test 
{ 
    enum Color { RED, BLUE, GREEN }; 
    public void SetColor(Color c) { } 
} 

會提出這個編譯錯誤:

Error 1 Inconsistent accessibility: parameter type 'Test.Color' is less accessible than method 'Test.SetColor(Test.Color)'

(也就是當你設定的枚舉爲private你得到同樣的錯誤。)此錯誤只能是明確修改枚舉爲public解決。文檔不正確?

[我正在編譯C#2010和.NET 4.0。]

+6

引用了枚舉的* members *的默認可訪問性,而不是枚舉本身。 – 2012-02-10 23:42:07

+4

C#公共成員名稱(包括枚舉成員)應該是UpperCamelCase。 – SLaks 2012-02-10 23:44:01

回答

10

這是不正確的。

enum 類型的默認可訪問性與任何其他類型相同;內部爲頂級類型,私有爲嵌套類型。

您鏈接到的網頁聲明,默認值(和,其實只),枚舉成員訪問級別(RedBlue等)是公開的。

4

提到的MSDN文章和SO答案指的是「枚舉成員」 - 即例如Test.Color.RED,而不是Test.Color作爲枚舉本身。

Test.Color是類的成員 - 因此是私人的。

1

我認爲,因爲您在沒有修飾符的情況下在類中聲明,所以它假定爲私有的,因爲它是類中的標準行爲。指定應該解決問題的公衆。但是,請注意Code Analysis會建議將此枚舉放置在課程外部。

-1

那是因爲你沒有公有,保護內部在你的枚舉,它採用默認值(這是內部類和枚舉)

遺憾的混亂,你不能讓財產公開因爲枚舉是私人

的公共財產是外部公衆應該有人使用你的程序和編譯器告訴你它

2

該表指的是成員;成員是「紅色」,「藍色」和「格林」,並且確實是公共字面常量,並且不允許指定可訪問性。

對比,例如,對一個類(字段,方法,常量等)的成員;在這裏,根據表格,默認值是「私人」,儘管您可以指定更高的可訪問性。