1. 程式人生 > >C# 成員預設訪問許可權(public、private、protected、internal)

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檔案。一個程式集中可以有多個名稱空間。