訪問修飾符 訪問修飾符是一些關鍵字,用於指定聲明的成員或類型的可訪問性,C 有4個訪問修飾符:public、private、protected、internal,使用這些訪問修飾符可以指定以下5個訪問級別: public: 同一程式集(DLL或EXE)中的任何其他代碼或引用該程式集的其他程式集都可以 ...
訪問修飾符
訪問修飾符是一些關鍵字,用於指定聲明的成員或類型的可訪問性,C#有4個訪問修飾符:public、private、protected、internal,使用這些訪問修飾符可以指定以下5個訪問級別:
- public: 同一程式集(DLL或EXE)中的任何其他代碼或引用該程式集的其他程式集都可以訪問該類型或成員。
- private: 只有同一類或結構中的代碼可以訪問該類型或成員。
- protected: 只有同一類或結構或者此類的派生類中的代碼才可以訪問該類型或成員。
- internal: 同一程式集中的任何代碼都可以訪問該類型或成員,但的代碼不可以。
- protected internal: 在一程式集中,protected internal體現的是internal的性質;在其他程式集中,protected internal體現的是protected的性質。
一個成員或類型只能有一個訪問級別。
類型的可訪問性
不嵌套在其他類型中的頂級類型的可訪問性只能是internal或public,這些類型的預設可訪問性是internal。嵌套類型是其他類型的成員,具有和其它成員一樣的可訪問性。
class A {} // 預設可訪問性是internal
class B
{
class Nested {} // 預設可訪問性是private
}
成員的可訪問性
類型 | 預設的成員可訪問性 | 該成員允許聲明的可訪問性 |
---|---|---|
enum | public | 無 |
class | private | public、private、protected、internal、protected internal |
interface | public | 無 |
struct | private | pubic、private、internal |
abstract
使用abstract修飾的類為抽象類,抽象類只能是其他類的基類,不能與sealed、static一起使用。
abstract可以修飾抽象類中的方法或屬性,此時,方法或屬性不能包含實現,且訪問級別不能為私有。
抽象類不能被實例化。
sealed
使用sealed修飾的類為密封類,密封類無法被繼承,不能和abstract、static一起使用。
當sealed用於方法或屬性時,必須始終與override一起使用。
static
使用static修飾的類為靜態類,靜態類所有成員都必須是靜態的,不能與abstract、sealed一起使用。
static可以修飾方法、欄位、屬性或事件,始終通過類名而不是實例名稱訪問靜態成員,靜態欄位只有一個副本。
靜態類不能被實例化。
const
使用const關鍵字來聲明某個常量欄位或常量局部變數,必須在聲明常量時賦初值。
不能與static一起使用,常量預設是static的,常量欄位只有一個副本。
readonly
使用readonly關鍵字來聲明只讀欄位。
只讀欄位可以在聲明或構造函數中初始化,每個類或結構的實例都有一個獨立的副本。
可以與static一起使用,聲明靜態只讀欄位。
靜態只讀欄位可以在聲明或靜態構造函數中初始化,靜態常量欄位只有一個副本。
virtual
virtual關鍵字用於修飾方法、屬性、索引器或事件聲明,並使它們可以在派生類中被重寫。
預設情況下,方法是非虛擬的。 不能重寫非虛方法。
virtual修飾符不能與static、abstract、private或override修飾符一起使用。
override
要擴展或修改繼承的方法、屬性、索引器或事件的抽象實現或虛實現,必須使用override修飾符。
重寫的成員必須是virtual、abstract或override的。
參考資料
1、修飾符
2、可訪問級別