1. 程式人生 > >訪問修飾符(public,private,protected,internal,sealed,abstract)

訪問修飾符(public,private,protected,internal,sealed,abstract)

為了控制元件C#中的物件的訪問許可權,定義物件時可以在前面新增修飾符.

修飾符有五種:private(私有的),protected(受保護的),internal(程式集內部的),public(公開的),以及protectde internal(只有本程式內或者繼承於該類的型別可以訪問).

可以使用修飾符的物件:namespace(名稱空間),class(類),struct(結構),enum(列舉),interface(介面),delegate(委託),function(函式),變數

1.public:

訪問不受限制.是許可權最多的一個修飾符.namespace和enum成員,interface的成員隱式的具有public修飾符.不能再顯式新增其修飾符.

2.private:

只有同一個class或struct中能被訪問.class或truct中的成員如果不加修飾符則預設是private

3.protected:

訪問僅限於當前class或繼承的class.比如在一個class Student中宣告一個函式protected int Add(){    };在則只能在Student中用Add,或者在繼承於Student的子類中用base.Add()來用num.但例項化class得到的物件不能用Add.比如Student s = new Student();  s.Add();這樣是錯誤的.(注意:宣告class,struct前是不能加protected修飾的.只能用public 或internal)

4.internal:

僅限於當前程式集.即同一個project中.

class或struct,interface如果不加修飾符則預設是internal.但也可以顯示宣告為internal或public(注:如果class,struct是在一個class中宣告的也可以protected,private修飾.也就是說一個class中還可以巢狀的宣告一個class)

5.protected internal:

同一程式集或繼承的子類可訪問.其實相當於是protected 和internal兩個許可權累加到一起了.(注意,由於struct是不能繼承的,所以它的成員也不能由protected或protected internal修飾.

注意:派生的class可訪問性不能比基類更高.也就是說如果基類被internal修飾則子類只能用internal修飾.如果基類都public修飾子類可用internal也可用public.

除了許可權修飾符外還有四個修飾符sealed,abstract,virtual,partial(這四個修飾符可以和上面五個許可權修飾符一起用.寫在許可權修飾符前面或後面都行)

sealed只能用來修飾class,表示class不能被繼承.

abstract可用來修飾class和class中的成員.但必須是class被abstract修飾了,成員才能被abstract修飾.它表示此class是抽象類,不能例項化,必須被繼承並重寫抽象函式

virtual只能用來修飾class中的函式,表明是虛擬函式,虛擬函式除了可以被重寫外其他時候跟一般函式一樣.虛擬函式重不重寫是可選的,不是必須的

partial

通過使用關鍵字partial可以把一個class分開來寫,可以在一個project中的不同檔案中.在一個class特別大,由幾個人合作寫時這功能特別有用.

在Winform開發中系統也自動的用partial為我們把一個class分開來寫.比如我們新增Form1.則會看到有兩個檔案Form1.cs, Form1.Designer.cs它們其實就是一個class,通過關鍵字partial分成兩個檔案.我們主要是在Form1.cs中新增程式碼.Form1.Designer.cs是自動生成的跟頁面有關的程式碼.其實我們也完全可以不拖控制元件,而是由自己去Form1.Designer.cs中新增程式碼.不過這樣可太麻煩了啊