2012-05-17 29 views
1

我讀過Eric Lippert撰寫的寫得很好的blog post,但它沒有解釋可訪問性修飾符的具體情況。C#:爲什麼成員的可訪問性修飾符是可選的(而不是必需的)?

傳統的stackoverflow wisdom說總是明確指定「私人」,這意味着成員應該要求修改。

+0

因爲MS很酷:) – Tom

+0

C#語言規範說:「當一個類成員聲明不包含任何訪問修飾符時,假定爲private」。爲了顯而易見,我仍然通常明確地輸出「私人」,儘管我知道有些人反對這個慣例。 –

+0

http://www.cookcomputing.com/blog/archives/private-access-modifier-in-csharp –

回答

1

那麼這不是沒有默認的修飾符集,如果沒有定義。在C#中,即使您沒有指定,您可能想知道程序執行方式(預期結果)的缺省修飾符時,也會設置默認修飾符。

enumstruct,或class將默認爲internal典型條件下(在命名空間或只是坐在那裏獨自一人在一個文件中),但結構或類的內部聲明時,將默認爲private

所有方法,字段和屬性的默認訪問修飾符均爲「私有」。

+0

稍微更詳細的答案在這裏:http://stackoverflow.com/questions/3763612/default-visibility-for-c-sharp-classes-and-members-fields-methods-etc –

+0

你爲什麼認爲枚舉是公開的默認?我對C#規範的閱讀說,它們在命名空間或編譯單元中是公共的,而在類或結構體中是私有的。 – Gabe

+0

我在問爲什麼方法,字段和屬性具有默認訪問修飾符,而不是要求程序員指定它。 – Jon

0

可能是C#的設計者想要並且喜歡「宗教」打架是否包含退款訪問修飾符?

(在情況下,只有一個訪問級別是可能的,訪問修飾符通常不允許是:例如,一個接口的成員或枚舉總是public,但它不是允許寫使A partial方法是總是如此。因爲static構造函數不能被顯式調用,所以沒有有意義的訪問級別。顯式接口實現對於直接調用並不是真正可見的,但可以通過接口類型自由訪問(如果接口類型從外部可見)名稱空間可以沒有訪問修飾符。)

與您的建議相反的規則urse是一個規則,表示不允許指定一個不會改變任何內容的修飾符。這意味着不能明確聲明名稱空間的直接成員(包括隱含的「全局名稱空間」),並且不能明確聲明internal,並且類或結構(包括嵌套類型)的成員不能具有關鍵字private。有些人使用這個慣例。

請注意,屬性和索引器的getter和setter不能指定冗餘訪問級別。這裏唯一允許的只是兩個訪問器中的一個(在這種情況下必須有兩個)來指定更嚴格的訪問。

相關問題