例:internal class A{}
public class B:A{}是不允許的;
public class C{ public A a=new A();}是不允許的.
msdn參考:
訪問修飾符(C# 編程指南)
所有類型和類型成員都具有可訪問性級別,用來控制是否可以在您程序集的其他代碼中或其他程序集中使用它們。您在聲明類型或成員時使用以下訪問修飾符之一來指定其可訪問性:
- public (可以修飾類)
-
同一程序集中的任何其他代碼或引用該程序集的其他程序集都可以訪問該類型或成員。
- private (成員的默認訪問修飾符) (成員方法和成員字段的默認訪問符)
-
只有同一類或結構中的代碼可以訪問該類型或成員。
- protected
-
只有同一類或結構或者派生類中的代碼可以訪問該類型或成員。
- internal (可以修飾類,類的默認修飾符)
-
同一程序集中的任何代碼都可以訪問該類型或成員,但其他程序集中的代碼不可以。(internal指的是同一個程序集,內部成員和類型纔是可以訪問的.內部訪問通常用於基於組件的開發,因爲它使一組組件能夠以私有方式進行合作,而不必嚮應用程序代碼的其餘部分公開)
- protected internal
-
同一程序集中的任何代碼或其他程序集中的任何派生類都可以訪問該類型或成員。
下面的示例演示如何爲類型和成員指定訪問修飾符:
不是所有訪問修飾符都可以在所有上下文中由所有類型或成員使用,在某些情況下類型成員的可訪問性受到其包含類型的可訪問性的限制。以下各節提供了有關可訪問性的更多詳細信息。
類和結構的可訪問性
直接在命名空間中聲明的類和結構(即,沒有嵌套在其他類或結構中的類和結構)可以是公共類和結構,也可以是內部類和結構。如果不指定訪問修飾符,則默認爲 internal。嵌套的類和結構還可以聲明爲私有類和結構。不可以從包含類型訪問私有嵌套類型。
派生類的可訪問性不能高於其基類型。換句話說,不能有從內部類 A 派生的公共類 B。如果允許這種情況,將會使 A 成爲公共類,因爲 A 的所有受保護的成員或內部成員都可以從派生類訪問。
可以使用 InternalsVisibleToAttribute 使其他某些程序集能夠訪問您的內部類型。有關更多信息,請參見友元程序集(C# 編程指南)。
類成員和結構成員的可訪問性
可以使用五種訪問類型中的任何一種來聲明類成員(包括嵌套的類和結構)。結構成員無法聲明爲受保護成員,因爲結構不支持繼承。
成員的可訪問性決不能高於其包含類型的可訪問性。例如,在內部類型中聲明的公共方法只具有內部可訪問性。
如果類或結構的成員爲屬性、字段、方法、事件或委託,並且該成員是某個類型或具有參數或返回值類型,則該成員的可訪問性不能超過該類型。例如,如果 C 不是公共類,則不能返回類 C 的公共方法 M。同樣,如果 A 聲明爲私有,則類型 A 不能有受保護的屬性。
用戶定義的運算符必須始終聲明爲公共運算符。有關更多信息,請參見 operator(C# 參考)。
析構函數不能具有可訪問性修飾符。
若要設置類成員或結構成員的訪問級別,請向該成員聲明添加適當的關鍵字。下面是一些示例:
說明: |
---|
protected internal 可訪問性的意思是受保護“或”內部,而不是受保護“和”內部。換句話說,可以從同一程序集內的任何類(包括派生類)中訪問 protectedinternal 成員。若要限制爲只有同一程序集內的派生類可以訪問,請將類本身聲明爲內部,並將其成員聲明爲受保護。 |
其他類型
直接用命名空間聲明時,可以將接口聲明爲公共接口或內部接口,並且與類和結構一樣,接口默認具有內部可訪問性。接口成員始終是公共成員,因爲接口的用途是讓其他類型能夠訪問某個類或結構。訪問修飾符不能應用於接口成員。
枚舉成員始終是公共的,不能應用任何訪問修飾符。
默認情況下,委託默認具有內部訪問級別。