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。
C#默認給非abstract類生成的構造函數為public,給abstract類生成的構造函數為protected
自己寫的構造函數,如果不標示訪問權限,默認為private
4.接口interface的訪問權限
同class一樣,可以為public和internal,默認為internal
但是接口中的方法默認訪問權限為public,並且不能顯示的定義其他訪問類型。
5.抽象類abstract class(該類只能作為父類被用於繼承,而不能進行對象實例化)
抽象類中必須有一個以上的抽象方法,訪問類型可以定義為:public、protected、internal,不能是private
6.枚舉enum和結構struct權限
枚舉類型成員默認為public訪問修飾符,且不能顯示的使用其他修飾符。
結構成員默認private修飾符,
結構成員無法聲明為protected成員,因為結構不支持繼承。
PS:命名空間和程序集的區別
命名空間用於對類型進行邏輯分組。程序集則是程序的物理分組,對應於一個dll或exe文件。一個程序集中可以有多個命名空間。