1. 程式人生 > >C#的類修飾符和成員修飾符

C#的類修飾符和成員修飾符

一、類修飾符

類修飾符:public、internal、 partial、abstract、sealed、static、new、protected、private、protected internal

1、public:訪問不受限制的,所有的本程式集以及其他的程式集裡面的類都能夠訪問

2、internal:本程式集內的類可以訪問


3、partial:部分類,可以將一個類分成幾部分寫在不同檔案中,最終編譯時將合併成一個檔案,且各個部分不能分散在不同程式集中


4、abstract:修飾類的時候表示該類為抽象類不能夠建立該類的例項。修飾方法的時候表示該方法需要由子類來實現,如果子類沒有實現該方法那麼子類同樣是抽象類;且含有抽象方法的類一定是抽象類


5、sealed:修飾類時表示該類不能夠被繼承

6、static:修飾類時表示該類時靜態類不能夠例項化該類的物件,那麼這個類也就不能夠含有物件成員,即該類所有成員為靜態

7、new:只能用於巢狀的類,表示對繼承父類同名型別的隱藏

8、protected、private、protected internal:只能用於巢狀的類

巢狀型別的訪問修飾符為public、internal、protected、privateprotected internal

二、成員修飾符

成員修飾符:public、protected、private、internal、protected internal、abstract、virtual、override、readonly、const、sealed、new

1、public:訪問沒有限制,所有的本程式集以及其他的程式集裡面的物件都能夠訪問

2、protected: 自身成員以及子類成員可訪問

3、private:只有自身成員才能夠訪問

4、internal:本程式集內的成員可以訪問

5、protected internal 內部保護訪問。只限於本程式集或是其他程式集繼承的子類訪問,其他不能訪問

6、abstract:修飾方法的時候表示該方法需要由子類來實現,如果子類沒有實現該方法那麼子類同樣是抽象類;且含有抽象方法的類一定是抽象類。abstract不能和new同時用。


7、static 修飾建構函式時,建構函式不能含有任何引數,不能含有修飾符,建構函式不能物件成員進行初始化

操作。但是能夠對靜態成員進行初始化或者呼叫。在靜態建構函式中初始化的靜態成員為最終初始化結果。

8、virtual:修飾方法成員,表示虛方法。父類可以含有該類的實現,子類可以覆寫該函式。

9、override:表示該方法為覆寫了父類的方法。

10、readonly:修飾字段,表示該欄位為只讀欄位。
注意:readonly修飾引用型別時由於操作不當可能修改該只讀物件狀態。

readonly是執行時只讀,內容在執行時確定,所以修改了readonly型別成員後無需重新編譯即可生效

11、const:修飾字段,表示該欄位為只讀欄位。並且在編譯時必須能夠明確知道該欄位的值,其值是硬編碼到程式中去的,修改了該型別成員後需要重新編譯才能使修改生效

Readonly不能修飾區域性變數,const可以修飾區域性變數

12、sealed: 修飾方法時表示該方法不能被覆寫。同時對一個類作abstract和sealed的修飾是沒有意義的,也是被禁止的。

13、new修飾符只能用於巢狀的類,表示對繼承父類同名型別的隱藏。

三、訪問修飾符

1、類訪問修飾符

(1)非巢狀的類

名稱空間或編譯單元內的只有public和internal兩種修飾,預設是internal 。

(2)巢狀的類

巢狀型別無論是類還是結構,巢狀型別的訪問修飾符為public、internal、protected、privateprotected internal

巢狀型別的預設訪問修飾符為private

2、介面訪問修飾符

介面訪問修飾符包括public、internal、protected、privateprotected internal等,預設為public,可以省略。

3、成員訪問修飾符

public 可以被任意訪問;

protected 只可以被本類和其繼承子類訪問;

internal 只可以被本組合體(Assembly,也叫程式集)內所有的類訪問,組合體是C#語言中類被組合後的邏輯單位和物理單位,其編譯後的副檔名往往是“.DLL”或“.EXE”。

protected internal 唯一的一種組合限制修飾符,它只可以被本程式集其他程式集的繼承子類所訪問。

private 只可以被本類所訪問。

在類內部預設的修飾符為private。