1. 程式人生 > >C#類,類成員訪問修飾符

C#類,類成員訪問修飾符

今天想不起C#中類的預設訪問修飾符是internal了還以為是public呢,單元測試時候一直是黃色敬告。所以把csdn的東西翻出了(在百度上搜不到的)。當用internal修飾類(c#預設不加修飾符就是internal)可能會出現問題:當你在繼承或者是例項化一個internal類的時候你的訪問許可權不能打破原來internal類的訪問限制。
例:internal class A{}
        public class B:A{}是不允許的;
        public class C{ public A a=new A();}是不允許的.

msdn參考:
訪問修飾符(C# 程式設計指南)

所有型別和型別成員都具有可訪問性級別,用來控制是否可以在您程式集的其他程式碼中或其他程式集中使用它們。您在宣告型別或成員時使用以下訪問修飾符之一來指定其可訪問性:

同一程式集中的任何其他程式碼或引用該程式集的其他程式集都可以訪問該型別或成員。

private (成員的預設訪問修飾符) (成員方法和成員欄位的預設訪問符)

只有同一類或結構中的程式碼可以訪問該型別或成員。

只有同一類或結構或者派生類中的程式碼可以訪問該型別或成員。

internal (可以修飾類,類的預設修飾符)

同一程式集中的任何程式碼都可以訪問該型別或成員,但其他程式集中的程式碼不可以。(internal指的是同一個程式集,內部成員和型別才是可以訪問的.內部訪問通常用於基於元件的開發,因為它使一組元件能夠以私有方式進行合作,而不必嚮應用程式程式碼的其餘部分公開)

protected internal

同一程式集中的任何程式碼或其他程式集中的任何派生類都可以訪問該型別或成員。

下面的示例演示如何為型別和成員指定訪問修飾符:

不是所有訪問修飾符都可以在所有上下文中由所有型別或成員使用,在某些情況下型別成員的可訪問性受到其包含型別的可訪問性的限制。以下各節提供了有關可訪問性的更多詳細資訊。


c中類的預設訪問修飾符,是private還是internal - 一束光 - 山的那邊很漂亮 類和結構的可訪問性 

直接在名稱空間中宣告的類和結構(即,沒有巢狀在其他類或結構中的類和結構)可以是公共類和結構,也可以是內部類和結構。如果不指定訪問修飾符,則預設為 internal。巢狀的類和結構還可以宣告為私有類和結構。不可以從包含型別訪問私有巢狀型別。

派生類的可訪問性不能高於其基型別。換句話說,不能有從內部類 A 派生的公共類 B。如果允許這種情況,將會使 A 成為公共類,因為 A 的所有受保護的成員或內部成員都可以從派生類訪問。

可以使用 InternalsVisibleToAttribute 使其他某些程式集能夠訪問您的內部型別。有關更多資訊,請參見友元程式集(C# 程式設計指南)


c中類的預設訪問修飾符,是private還是internal - 一束光 - 山的那邊很漂亮 類成員和結構成員的可訪問性 

可以使用五種訪問型別中的任何一種來宣告類成員(包括巢狀的類和結構)。結構成員無法宣告為受保護成員,因為結構不支援繼承。

成員的可訪問性決不能高於其包含型別的可訪問性。例如,在內部型別中宣告的公共方法只具有內部可訪問性。

如果類或結構的成員為屬性、欄位、方法、事件或委託,並且該成員是某個型別或具有引數或返回值型別,則該成員的可訪問性不能超過該型別。例如,如果 C 不是公共類,則不能返回類 C 的公共方法 M。同樣,如果 A 宣告為私有,則型別 A 不能有受保護的屬性。

使用者定義的運算子必須始終宣告為公共運算子。有關更多資訊,請參見 operator(C# 參考)

解構函式不能具有可訪問性修飾符。

若要設定類成員或結構成員的訪問級別,請向該成員宣告新增適當的關鍵字。下面是一些示例:


c中類的預設訪問修飾符,是private還是internal - 一束光 - 山的那邊很漂亮說明:

protected internal 可訪問性的意思是受保護“或”內部,而不是受保護“和”內部。換句話說,可以從同一程式集內的任何類(包括派生類)中訪問 protected internal 成員。若要限制為只有同一程式集內的派生類可以訪問,請將類本身宣告為內部,並將其成員宣告為受保護。


c中類的預設訪問修飾符,是private還是internal - 一束光 - 山的那邊很漂亮 其他型別 

直接用名稱空間宣告時,可以將介面宣告為公共介面或內部介面,並且與類和結構一樣,介面預設具有內部可訪問性。介面成員始終是公共成員,因為介面的用途是讓其他型別能夠訪問某個類或結構。訪問修飾符不能應用於介面成員。

列舉成員始終是公共的,不能應用任何訪問修飾符。

預設情況下,委託預設具有內部訪問級別。