关键字是预定义的保留标识符,对编译器有特殊意义。 除非前面有 @
前缀,否则不能在程序中用作标识符。 例如,@if
是有效标识符,而 if
则不是,因为 if
是关键字。
abstract | 用于创建抽象类。 |
as | |
base | 基类访问表达式由关键字base后面跟一个点和成员的名称组成。 |
bool | |
break | |
byte | |
case | |
catch | |
char | |
checked | |
class | |
const | |
continue | |
decimal | |
default | |
delegate | |
do | |
double | |
else | |
event | |
explicit | |
extern | |
false | |
finally | |
fixed | |
float | |
for | |
foreach | |
goto | |
if | |
implicit | |
in | |
int | |
interface | 接口使用 interface 关键字声明,它与类的声明类似。 |
internal | |
is | |
lock | |
long | |
namespace | |
new | |
null | |
object | |
operator | 重载运算符是具有特殊名称的函数,是通过关键字 operator 后跟运算符的符号来定义的。 |
out | |
override | |
params | |
private | |
protected | |
public | |
readonly | |
ref | |
return | |
sbyte | |
sealed | 通过在类定义前面放置关键字 sealed,可以将类声明为密封类。当一个类被声明为 sealed 时,它不能被继承。抽象类不能被声明为 sealed。 |
short | |
sizeof | |
stackalloc | |
static | 把类成员定义为静态的。 |
string | |
struct | 用于创建结构体。 |
switch | |
this | |
throw | |
true | |
try | |
typeof | |
uint | |
ulong | |
unchecked | |
unsafe | |
ushort | |
using | using 关键字表明程序使用的是给定命名空间中的名称。 |
virtual | |
using | |
virtual | 声明一个虚方法。 |
void | |
volatile | |
while |
virtual和abstract都是用来修饰父类的,通过覆盖父类的定义,让子类重新定义。
- 1.virtual修饰的方法必须有实现(哪怕是仅仅添加一对大括号),而abstract修饰的方法一定不能实现。
- 2.virtual可以被子类重写,而abstract必须被子类重写。
- 3.如果类成员被abstract修饰,则该类前必须添加abstract,因为只有抽象类才可以有抽象方法。
- 4.无法创建abstract类的实例,只能被继承无法实例化。
抽象方法和虚方法的区别
- 1.虚方法必须有实现部分,抽象方法没有提供实现部分,抽象方法是一种强制派生类覆盖的方法,否则派生类将不能被实例化。
- 2.抽象方法只能在抽象类中声明,虚方法不是。如果类包含抽象方法,那么该类也是抽象的,也必须声明类是抽象的。
- 3.抽象方法必须在派生类中重写,这一点和接口类似,虚方法不需要再派生类中重写。
简单说,抽象方法是需要子类去实现的。虚方法是已经实现了的,可以被子类覆盖,也可以不覆盖,取决于需求。
抽象方法和虚方法都可以供派生类重写。
new关键字
接口中的new关键字:
- 接口成员不能有 new、static、abstract、override、virtual 修饰符。有一点要注意,当一个接口实现一个接口,这2个接口中有相同的方法时,可用 new 关键字隐藏父接口中的方法。
- 接口中只包含成员的签名,接口没有构造函数,所以不能直接使用 new 对接口进行实例化。