程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> C#關鍵字

C#關鍵字

編輯:關於.NET

今天突然有一種整理一下C#關鍵字的沖動,就轉化為行動了!

C#關鍵字完整列表

abstract

as

base

bool

break

byte

case

catch

char

checked

class

const

continue

decimal

default

delegate

do

double

else

enum

ecent

explicit

extern

false

finally

fixed

float

for

foreach

get

goto

if

implicit

in

int

interface

internal

is

lock

long

namespace

new

null

object

out

override

partial

private

protected

public

readonly

ref

return

sbyte

sealed

set

short

sizeof

stackalloc

static

struct

switch

this

throw

true

try

typeof

uint

ulong

unchecked

unsafe

ushort

using

value

virtual

volatile

volatile

void

where

while

yIEld

 

 

 

 

 

 

 

 

其中有幾個比較容易弄錯的

關鍵字                                                            描      述

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 修飾符也可以提高一定的運行效率,因為不用考慮繼承 
sealed(C# 參考)
當對一個類應用 sealed 修飾符時,此修飾符會阻止其他類從該類繼承。
在下面的示例中,類 B 從類 A 繼承,但是任何類都不能從類 B 繼承。

   class A {}   
   sealed class B : A {}
還可以在重寫基類中的虛方法或虛屬性的方法或屬性上使用 sealed 修飾符。
這將使您能夠允許類從您的類繼承,並防止它們重寫特定的虛方法或虛屬性。
在下面的示例中,C 從 B 繼承,但 C 無法重寫在 A 中聲明並在 B 中密封的虛函數 F。

Code

說明: 
當在類中定義新的方法或屬性時,通過不將這些方法或屬性聲明為 virtual,可防止派生類重寫這些方法或屬性。
將 abstract 修飾符用於密封類是錯誤的做法,因為抽象類必須由提供抽象方法或屬性的實現的類繼承。

當應用於方法或屬性時,sealed 修飾符必須始終與 override 一起使用。

由於結構是隱式密封的,因此它們不能被繼承。

abstract & virtual
abstract 修飾符可以和類、方法、屬性、索引器及事件一起使用。在類聲明中使用 abstract 修飾符以指示類只能是其他類的基類。接下來描述了abstract的一些特性:不能實例化;可以包含抽象方法和抽象訪問器;不能用 sealed 修飾符修改抽象類,意味著該類不能被繼承;從抽象類派生的非抽象類必須包括繼承的所有抽象方法和抽象訪問器的實現;
在方法或屬性聲明中使用 abstract 修飾符以指示此方法或屬性不包含實現等等。"abstract"可以修飾類、方法、屬性、索引器及事件。

而看到virtual關鍵字的時候,產生了一個疑問:"virtual"關鍵字只能修飾方法和屬性,卻不能修飾類~但清楚記得老師講c++的時候有一個概念,叫虛基類。難道c#把virtual的這個特性去掉了?然後我到google找答案~看到了兩篇文章“c++虛基類”和“深入剖析c#繼承機制”,終於明白了原來是由於這兩者的繼承機制不同而決定的。c++允許多重繼承,而c#只允許派生類從一個類中繼承,由於多重繼承產生的二義性問題需要虛基類來解決,所以c++有虛基類的概念,而c#由於單繼承的原因不會產生繼承而帶來的二義性問題,
所以不需要virtual關鍵修飾類。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved