C#關鍵字:
abstract
可以和類、方法、屬性、索引器及事件一起使用,標識一個可以擴充但不能被實體化的、必須被實現的類或方法。
as
一個轉換操作符,如果轉換失敗,就返回null。
Base
用於訪問被衍生類別或構造中的同名成員隱藏的基類成員。
catch
定義一個代碼塊,在特定類型異常拋出時,執行塊內代碼。參見try和finally。
checked
既是操作符又是語句。確保編譯器運行時,檢查整數類型操作或轉換時出現的溢出。
const
標識一個可在編譯時間計算出來的變數值,即一經指派不可修改的值。
delegate
指定一個聲明為一種委託類型。委託把方法封裝為可調用實體,能在委託實體中調用。
enum
表示一個已命名常量群集的實值型別。
event
允許一個類或對象提供通知的成員,他必須是委託類型。
explicit
一個定義使用者自訂轉換操作符的操作符,通常用來將內建類型轉換為使用者定義型別或反向操作。必須再轉換時調用顯示轉換操作符。
extern
標識一個將在外部(通常不是c#語言)實現的方法。
finally
定義一個代碼塊,在程式控制離開try代碼快後執行。參見try和catch。
fixed
在一個代碼塊執行時,在固定記憶體位置為一個變數指派一個指標。
foreach
用於遍曆一個群集的元素。
goto
一個跳躍陳述式,將程式執行重新導向到一個標籤語句。
Implicit
一個操作符,定義一個使用者定義的轉換操作符。通常用來將預定義類型轉換為使用者定義型別或反向操作。隱式轉換操作符必須在轉換時使用。
interface
將一個聲明指定為介面類型,即實作類別或構造必須遵循的合約。
internal
一個存取修飾詞。
namespace
定義一個邏輯組的類型和命名空間。
operator
用來聲明或多載一個操作符。
out
標識一個參數值會受影響的參數,但在傳入方法時,該參數無需先初始化。
params
聲明一個參數數組。如果使用,必須修改指定的最後一個參數。允許選擇性參數。
readonly
標識一個變數的值在初始化後不可修改。
ref
標識一個參數值可能會受影響的參數。
sealed
防止類型被派生,防止方法和property被覆載。
sizeof
一個操作符,以byte為單位返回一個實值型別的長度。
stackalloc
返回在堆上分配的一個記憶體塊的指標。
struct
struct是一種實值型別,可以聲明常量、欄位、方法、property、索引器、操作符、構造器和內嵌類型。
throw
拋出一個異常。
try
異常處理代碼塊的組成部分之一。try代碼塊包括可能會拋出異常的代碼。參閱catch和finally關鍵字。
typeof
一個操作符,返回傳入參數的類型。
unchecked
禁止溢出檢查。
unsafe
標註包含指標操作的代碼塊、方法或類。
using
當用於命名空間時,using關鍵字允許訪問該命名空間中的類型, 而無需指定其全名。也用於定義finalization操作的範圍。
virtual
一個方法修飾符,標識可被覆載的方法。
volatile
標識一個可被作業系統、某些硬體裝置或並發線程修改的attribute。
sealed 修飾符表示密封用於類時,表示該類不能再被繼承,不能和 abstract 同時使用,因為這兩個修飾符在含義上互斥用於方法和屬性時,表示該方法或屬性不能再被繼承,必須和 override 關鍵字一起使用,因為使用 sealed 修飾符的方法或屬性肯定是基類中相應的虛成員通常用於實現第三方類庫時不想被用戶端繼承,或用於沒有必要再繼承的類以防止濫用繼承造成階層體系混亂恰當的利用 sealed
修飾符也可以提高一定的運行效率,因為不用考慮繼承
abstract & virtual
abstract 修飾符可以和類、方法、屬性、索引器及事件一起使用。
在類聲明中使用 abstract 修飾符以指示類只能是其他類的基類。接下來描述了abstract的一些特性:不能執行個體化;可以包含抽象方法和抽象訪問器;不能用 sealed 修飾符修改抽象類別,意味著該類不能被繼承;從抽象類別派生的非抽象類別必須包括繼承的所有抽象方法和抽象訪問器的實現;
在方法或屬性聲明中使用 abstract 修飾符以指示此方法或屬性不包含實現等等。"abstract"可以修飾類、方法、屬性、索引器及事件
而看到virtual關鍵字的時候,產生了一個疑問:"virtual"關鍵字只能修飾方法和屬性,卻不能修飾類~但清楚記得老師講C++的時候有一個概念,叫虛基類。難道c#把virtual的這個特性去掉了?然後我到google找答案~看到了兩篇文章“c++虛基類”和“深入剖析c#繼承機制”,終於明白了原來是由於這兩者的繼承機制不同而決定的。c++允許多重繼承,而c#只允許衍生類別從一個類中繼承,由於多重繼承產生的二義性問題需要虛基類來解決,所以c++有虛基類的概念,而c#由於單繼承的原因不會產生繼承而帶來的二義性問題,
所以不需要virtual關鍵修飾類。