C#類的訪問性 類成員的訪問修飾符
所有型別和型別成員都具有可訪問性級別,用來控制是否可以在您程式集的其他程式碼中或其他程式集中使用它們。您在宣告型別或成員時使用以下訪問修飾符之一來指定其可訪問性:
下面的示例演示如何為型別和成員指定訪問修飾符:
不是所有訪問修飾符都可以在所有上下文中由所有型別或成員使用,在某些情況下型別成員的可訪問性受到其包含型別的可訪問性的限制。以下各節提供了有關可訪問性的更多詳細資訊。
類和結構的可訪問性直接在名稱空間中宣告的類和結構(即,沒有巢狀在其他類或結構中的類和結構)可以是公共類和結構,也可以是內部類和結構。如果不指定訪問修飾符,則預設為 internal。巢狀的類和結構還可以宣告為私有類和結構。不可以從包含型別訪問私有巢狀型別。
派生類的可訪問性不能高於其基型別。換句話說,不能有從內部類 A 派生的公共類 B。如果允許這種情況,將會使 A 成為公共類,因為 A 的所有受保護的成員或內部成員都可以從派生類訪問。
可以使用 InternalsVisibleToAttribute 使其他某些程式集能夠訪問您的內部型別。有關更多資訊,請參見友元程式集(C# 程式設計指南)。
類成員和結構成員的可訪問性可以使用五種訪問型別中的任何一種來宣告類成員(包括巢狀的類和結構)。結構成員無法宣告為受保護成員,因為結構不支援繼承。
成員的可訪問性決不能高於其包含型別的可訪問性。例如,在內部型別中宣告的公共方法只具有內部可訪問性。
如果類或結構的成員為屬性、欄位、方法、事件或委託,並且該成員是某個型別或具有引數或返回值型別,則該成員的可訪問性不能超過該型別。例如,如果 C 不是公共類,則不能返回類 C 的公共方法 M。同樣,如果 A 宣告為私有,則型別 A 不能有受保護的屬性。
使用者定義的運算子必須始終宣告為公共運算子。有關更多資訊,請參見 operator(C# 參考)。
解構函式不能具有可訪問性修飾符。
若要設定類成員或結構成員的訪問級別,請向該成員宣告新增適當的關鍵字。下面是一些示例:
說明: |
---|
protected internal 可訪問性的意思是受保護“或”內部,而不是受保護“和”內部。換句話說,可以從同一程式集內的任何類(包括派生類)中訪問 protected |
直接用名稱空間宣告時,可以將介面宣告為公共介面或內部介面,並且與類和結構一樣,介面預設具有內部可訪問性。介面成員始終是公共成員,因為介面的用途是讓其他型別能夠訪問某個類或結構。訪問修飾符不能應用於介面成員。
列舉成員始終是公共的,不能應用任何訪問修飾符。
預設情況下,委託預設具有內部訪問級別。