C# 成員預設訪問許可權(public、private、protected、internal)
1.C#五個修飾符的許可權
修飾符 級別 適用成員 解釋
public 公開 類及類成員的修飾符 對訪問成員沒有級別限制
private 私有 類成員的修飾符 只能在類的內部訪問
protected 受保護的 類成員的修飾符 在類的內部或者在派生類中訪問,不管該類和派生類是不是在同一程式集中
internal 內部的 類和類成員的修飾符 只能在同一程式集(Assembly)中訪問
protected internal 受保護的內部:如果是繼承關係,不管是不是在同一程式集中都可以訪問;如果不是繼承關係只能在同一程式集中訪問
2.類class的訪問許可權
類的訪問修飾符只有兩種:public、internal。如果class前面沒有加任何修飾符的話,預設是internal。
public class:任何地方都可以訪問到。
internal class或class:只有同一個程式集中能訪問到(程式集代表能生成exe或dll的專案,一個程式集中可以有多個名稱空間)。例如:一個解決方案中有兩個專案,就代表有兩個程式集,兩個程式集分別為A、B。其中A中有個class為internal級別的,那麼B引用了A的程式集也是不能呼叫這個類。
3.類成員(欄位和方法)的訪問許可權
類成員的修飾符可以為:public、private、protected、internal、protected internal。
如果類成員(欄位和方法)前面沒有加有修飾符的話,預設訪問許可權是private。
但是建構函式預設訪問許可權為public
4.介面interface的訪問許可權
同class一樣,可以為public和internal。
但是介面中的方法預設訪問許可權為public,並且不能顯示的定義其他訪問型別。
5.抽象類abstract class(該類只能作為父類被用於繼承,而不能進行物件例項化)
抽象類中必須有一個以上的抽象方法,訪問型別可以定義為:public、protected、internal,不能是private
6.列舉enum和結構struct許可權
列舉型別成員預設為public訪問修飾符,且不能顯示的使用其他修飾符。
結構成員預設private修飾符,
結構成員無法宣告為protected成員,因為結構不支援繼承。
PS:名稱空間和程式集的區別
名稱空間用於對型別進行邏輯分組。程式集則是程式的物理分組,對應於一個dll或exe檔案。一個程式集中可以有多個名稱空間。