限定符是用於限定類型和類型成員的聲明。包含訪問限定符、abstract、const、event、extern、override、sealed、static、virtual等。
基本介紹
- 中文名:限定符
- 包含:abstract、const、event等
訪問限定符,abstract(抽象),const(常量),event(事件),extern(外部),override(覆蓋),readonly(唯讀),sealed(封裝),static,virtual,
訪問限定符
訪問限定符是用於指定成員或者類型的可訪問性的關鍵字。
● public
● protected
● internal
● private
下面的五種可訪問級可以通過使用訪問限定符進行指定:
public protected internal internal protected private
abstract(抽象)
abstract 限定符被用於類、方法以及屬性。
在類定義中使用abstract 限定符,表明該類僅僅用來作為其他類的基類。
抽象類有以下特徵:
● 抽象類是不能被例示的。
● 抽象類可以包含抽象方法和存取器。
● 不可能用被封裝的限定符修改抽象類,即該類不能被繼承。
● 由抽象類繼承而來的非抽象類必須包括所有派生抽象方法和存取器的實際套用。
方法或屬性聲明中的抽象限定符用來指明該方法或屬性中不包含實際套用。
抽象方法有以下特徵:
● 抽象方法是隱式虛方法。
● 抽象方法聲明只允許在抽象類中存在。
● 因為抽象方法聲明並不提供實際套用,所以事實上並沒有方法體;方法聲明以分號結束,並且在簽名後沒有括弧。
● 套用由非抽象類的覆蓋方法(overriding method)提供。
● 在抽象方法聲明中使用靜態、虛擬或者覆蓋限定符,都是錯誤的。除了聲明和調用文法中有區別,其他時候抽象屬性和抽象方法工作起來都很類似。
● 在靜態屬性中使用抽象限定符是錯誤的。
● 在繼承類中,可使用包含覆蓋限定符的屬性聲明來覆蓋���象繼承屬性。抽象類必須為所有接口提供套用。
const(常量)
關鍵字const 用來修改一個域或本地變數的聲明。它將該域或本地變數的值指定為不可修改。常量聲明介紹了給定類型一個或者多個常量。聲明採用以下格式:
[attributes] [modifiers] const type declarators;
其中,
attributes (可選)
可選擇的聲明信息。
modifiers (可選)
可選擇的限定符,包含新的限定符和4個訪問限定符(access modifiers)之一。
type
以下類型之一:位元組、字元、短整數、整數、長整數、浮點數、雙位元組數、小數、布爾數、串、枚舉類型或者引用類型。
Declarators
用逗號隔開的被聲明量。聲明量有如下結構:
identifier = constant-expression
attributes (屬性 )和modifiers( 限定符 )套用於所有由常量聲明的成員。
常量聲明的 Type ( 類型 ) 指定了聲明介紹的成員的類型。常量表達必須產生一個目標類型的值,或者是一個可以顯式轉化為目標類型的類型的值。
常量表達的值在編譯時可以被充分估算。因此,引用類型的常量的可能值只能是串(string)和空(null)。
event(事件)
指定事件。
[attributes] [modifiers] event type declarator;
[attributes] [modifiers] event type member-name {accessor-declarations};
其中:
accessor-declarations
property accessors的聲明, 用來讀寫屬性。
attributes (可選)
可選聲明信息。
declarator
事件名稱。
member-name
事件屬性名稱。
modifiers (可選)
可選限定符,包括new(新), static(靜態), 以及 4 個access modifiers(訪問限定符)之一。
type
希望用來聯繫事件的代表。
extern(外部)
在方法聲明中使用 extern限定符,指明該方法是外部實現的。通常情況下,外部限定符都和DllImport屬性一起使用。
將abstract(抽象)和extern(外部)限定符放在一起修飾相同成員是錯誤的。使用 extern限定符意味著該方法在 C#外部實施,而使用 abstract 限定符的意思是類中不提供該方法的實施。
因為外部方法聲明不提供實際套用,所以沒有方法體;方法聲明簡單地由分號結束,並且在簽名後沒有括弧({ })。
override(覆蓋)
override 限定符用來修改方法或屬性。覆蓋方法為從基類繼承的成員提供新的套用。被覆蓋聲明所覆蓋的方法稱之為被覆蓋庫方法(overridden base method)。被覆蓋庫方法必須與覆蓋方法有相同的簽名。
非虛擬或者靜態方法是不能被覆蓋的。被覆蓋類方法必須是虛擬、抽象或覆蓋方法。覆蓋聲明不能改變虛擬方法的可訪問性。覆蓋方法和虛擬方法都必須有相同的訪問級別限定符。
不能使用下列限定符對覆蓋方法進行修改:
new static virtual abstract (新、靜態、虛擬、抽象)
覆蓋屬性聲明指定的訪問限定符、類型和名字必須與被繼承屬性完全相同,被覆蓋屬性必須是虛擬、抽象或是覆蓋。
readonly(唯讀)
Readonly關鍵字是在域(field)中使用的限定符。當域聲明包含 readonly限定符時,則由聲明引入該域的賦值只能作為同類聲明或構造函式的一部分。
sealed(封裝)
被封裝類不能被繼承。將被封裝類作為基類使用是錯誤的。在類聲明中使用被封裝限定符,用來防止對類的意外繼承。
說明
● 不允許在被封裝類中使用abstract(抽象)限定符。
● 結構是隱式封裝,因此,它們不能被繼承。
static
使用 static 限定符可以聲明靜態成員,靜態成員屬於類型本身而不屬於特定的對象。Static 限定符可以在欄位、方法、屬性、操作符和構造函式中使用,但是不能在索引器、析構函式或者類型中使用。
說明
1. 常量或者類型聲明是隱式靜態成員。
2. 靜態成員不能通過實例進行引用,而應該通過類型名稱引用。
virtual
virtual關鍵字用於修改方法或者屬性聲明,這種情況下方法或者屬性由虛擬成員調用。虛擬成員的執行可以由派生類中的覆蓋成員進行修改。調用虛擬成員時,會為覆蓋成員檢查對象的運行時間類型。如果沒有派生類覆蓋成員,將調用大多數派生類中的覆蓋成員(它們可能是原始成員)。
默認情況下,方法是非虛擬的。用戶不能覆蓋一個非虛擬的方法。用戶也不能將virtual限定符同下列限定符一起使用:
static abstract override
除了在聲明和調用的語法上有所區別外,虛擬屬性的行為類似於抽象方法。
● 對靜態屬性使用virtual限定符是錯誤的。
● 虛擬繼承屬性可以在派生類中被使用override限定符的屬性聲明所覆蓋。