C#关键字


今天突然有一种整理一下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关键修饰类。


« 
» 
快速导航

Copyright © 2016 phpStudy | 豫ICP备2021030365号-3