关键字速查表

Cheat Table of C# Keywords

C# 的关键字主要有两种:预定义关键字(Predefined Keyword)和上下文关键字(Contextual Keyword)。其中预定义关键字是 C# 原生支持的关键字,它们在任何时候的任何代码下都是固定的用法和方式,如果你要想让你的标识符和该关键字重名,需要使用原义字符 @ 修饰你定义的该变量;上下文关键字则是在一些语法的上下文里才会表示成关键字样式,但自身并不是 C# 一定随时随地都起作用的关键字,这样的关键字可以作为自己定义的变量名。

举个例子,预定义关键字包括比如 foreachabstractclassint 等等,而上下文关键字包括 getsetaddremove 等等。

另外,C# 还存在别的关键字类型,这些关键字并不在 C# 微软官方文档 Microsoft Docs 里,甚至压根没有提及到它们,这些关键字我将会在这里全部给出,不过它们将以脚注的形式呈现出来。

本文陈列 C# 的所有关键字,并且相关的解释页面。

关键字
类型
版本
语义

abstract

预定义

C# 1

用于类和成员表示该类或成员必须由派生类型实现

上下文

C# 8

用于指示接口里实例成员(如果支持的话)的抽象情况

上下文

C# 11

用于配合 static 构成 static abstract 组合修饰,在接口里声明抽象静态成员

add

上下文

C# 1

用于事件成员的添加器声明部分

and

上下文

C# 9

用于合取模式匹配

alias

上下文

C# 2

用于声明 extern alias 指令以区分不同 DLL 文件下的同命名空间的同名的不同类型

allows

上下文

C# 13

用于泛型约束 allows ref struct,表示 ref struct 可用作泛型参数

args

上下文

C# 9

用于表示隐式 Main 方法下的参数,类型是 string[]

as

预定义

C# 1

允许对象尝试对指定类型转换,不抛异常(但转换失败后返回 null

ascending

上下文

C# 3

用于 LINQ 查询表达式的 orderby 从句,表示排序过程为升序排序

assembly

特性

C# 1

用于表示特性用于一个程序集

async

上下文

C# 5

用于异步方法及异步 Lambda 的声明

await

上下文

C# 5

用于调用异步方法,等待该异步方法的携程执行,待完成后获取异步处理后的结果

上下文

C# 8

用于声明 await usingawait foreach 语句的配合关键字

base

预定义

C# 1

调用基类型构造器和非抽象成员

bool

预定义

C# 1

数据类型 System.Boolean 的别名

break

预定义

C# 1

用于跳出循环语句和 switch 的每一个 case 语句

上下文

C# 2

构成 yield break 语句的一部分

by

上下文

C# 3

用于 LINQ 查询表达式的 group-by 从句,表示按什么结果分组

byte

预定义

C# 1

数据类型 System.Byte 的别名

case

预定义

C# 1

用于表述每一种 switch 语句的情况

catch

预定义

C# 1

用于配合 try 块捕获异常类型,可重复使用该关键字捕获不同的异常类型

char

预定义

C# 1

数据类型 System.Char 的别名

checked

预定义

C# 1

表示表达式或块内代码在运算超出数据范围时候抛出异常

上下文

C# 11

表示一些可能导致溢出的基本运算符,允许重载的时候规定溢出行为

class

预定义

C# 1

用于声明类类型

上下文

C# 2

用于泛型约束,表示泛型参数必须是一个引用类型

上下文

C# 10

用于配合 record 关键字,声明记录类

const

预定义

C# 1

用于常量的声明,该类型变量于编译期间生成且数据只读

continue

预定义

C# 1

用于直接结束当前循环过程,准备进行下一轮循环过程

decimal

预定义

C# 1

数据类型 System.Decimal 的别名

default

预定义

C# 1

用于 switch 语句表示缺省的数值情况

预定义

C# 1

用于 default 表达式表达某种数据类型的初始默认值

上下文

C# 7

(C# 7.1)用于隐式 default 表达式

上下文

C# 9

用于 default 泛型约束,表示无约束的泛型参数调用方法

delegate

预定义

C# 1

用于委托类型的声明

descending

上下文

C# 3

用于 LINQ 查询表达式的 orderby 从句,表示排序过程为降序排序

上下文

C# 2

用于匿名函数的声明

上下文

C# 9

用于函数指针的声明

do

预定义

C# 1

表示 do-while 循环的声明

double

预定义

C# 1

数据类型 System.Double 的别名

dynamic

上下文

C# 4

表示数据为动态类型,调用成员可按弱类型方式调用,调用成员过程将推后到运行时验证

else

预定义

C# 1

用于 if-else 条件判断语句的声明

enum

预定义

C# 1

用于枚举类型的声明

equals

上下文

C# 3

用于 LINQ 查询表达式的 join-in-on-equals 从句,表示等值连接的对象或成员

event

预定义

C# 1

用于事件成员的声明

特性

C# 1

用于表示特性用于一个事件

explicit

预定义

C# 1

用于显式转换器的声明

上下文

C# 13

用于修饰 extension,表示该扩展类型必须以实例类型使用

extension

上下文

C# 13

用于表示一个类型的扩展类型。它可提供扩展实现(如扩展成员、扩展接口实现)以及值类型的类派生效果

extern

预定义

C# 1

用于声明 C/C++ 代码封装起来的外部函数

上下文

C# 2

用于声明 extern alias 指令以区分不同 DLL 文件下的同命名空间的同名的不同类型

false

预定义

C# 1

表示 bool 类型的其中一个常量

field

特性

C# 1

用于表示特性用于一个字段

上下文

C# 12

用于半自动属性,表示出属性底层包装的字段

finally

预定义

C# 1

用于 try-catch-finallytry-finally 语句

file

上下文

C# 11

用于声明只在当前文件里访问的嵌套或顶级类型

fixed

预定义

C# 1

用于固定数组、字符串等对象,以防止 GC 在使用对象指针的时候被回收

上下文

C# 2

用于在结构里声明一个定长缓冲区,可以不固定的同时完成缓冲区的对象索引

float

预定义

C# 1

数据类型 System.Single 的别名

for

预定义

C# 1

用于 for 循环的声明

foreach

预定义

C# 1

用于 foreach 循环的声明

上下文

C# 8

用于 await foreach 循环的声明,表示元素异步迭代

from

上下文

C# 3

用于 LINQ 查询表达式的 from-in 从句,表示迭代一个集合的成员

get

上下文

C# 1

用于属性的取值器声明部分

global

上下文

C# 2

表示全局命名空间,防止出现自定义 System 命名空间而导致无法编译代码的问题

上下文

C# 10

配合 using 构成 global usingglobal using static 指令

goto

预定义

C# 1

用于跳转到指定的标签上去

group

上下文

C# 3

用于 LINQ 查询表达式的 group-by 从句,表示将一个集合分组

if

预定义

C# 1

用于 ifif-else 条件判断语句的声明

implicit

预定义

C# 1

用于隐式转换器的声明

上下文

C# 13

用于修饰 extension,表示该类型以类扩展方法的形式存在,可不引用其所在的类型即可使用

in

预定义

C# 1

用于 foreach 循环里表示迭代过程

上下文

C# 3

用于 from-in 从句或 join-in-on-equals 从句

上下文

C# 4

用于接口和委托类型的泛型参数,声明该泛型参数具有逆变性

上下文

C# 7

(C# 7.2)用于参数,表示参数以引用传递,且只读

上下文

C# 12

用于实参表示传入的数值是以引用传递,且内数值只读

init

上下文

C# 9

用于属性的赋值器,替代 set 关键字,表示该属性的赋值只出现在实例化的时候

int

预定义

C# 1

数据类型 System.Int32 的别名

into

上下文

C# 3

用于 LINQ 查询表达式的 selectgroupjoin 从句之中,接续迭代

interface

预定义

C# 1

用于声明接口类型

internal

预定义

C# 1

用于声明对象的访问级别只在项目里可见;也可配合 protected 构成 protected internal 级别

is

预定义

C# 1

用于数据类型校验(在模式匹配里称为类型模式)

上下文

C# 7

用于声明模式、var 模式、解构模式和常量模式

上下文

C# 8

用于弃元模式、属性模式、对位模式和递归模式

上下文

C# 9

用于括号模式、关系模式和逻辑模式

上下文

C# 10

用于拓展属性模式

上下文

C# 11

用于列表和分片模式

join

上下文

C# 3

用于 LINQ 查询表达式的 join-in-on-equals 从句,表示连接集合

let

上下文

C# 3

用于 LINQ 查询表达式的 let 从句,表示临时变量定义

lock

预定义

C# 1

用于 lock 语句的声明

long

预定义

C# 1

数据类型 System.Int64 的别名

managed

上下文

C# 9

用于函数指针声明,表示函数指针只用于 C# 代码(托管代码)

method

特性

C# 1

用于表示特性用于一个方法

module

特性

C# 2

用于表示特性用于一个模块

nameof

上下文

C# 6

用于表示 nameof 表达式,获取成员自己的字符串信息

namespace

预定义

C# 1

用于声明命名空间块

上下文

C# 9

用于声明命名空间指令

new

预定义

C# 1

用于 new 语句实例化对象

预定义

C# 1

用于声明在成员或嵌套类型上,表示成员或类型与基类型某可见成员或嵌套类型重名,需完全覆盖

上下文

C# 2

用于泛型参数约束,表示该类型参数具有 public 修饰的无参构造器

上下文

C# 9

用于隐式 new 语句

nint

上下文

C# 9

用于兼容 C/C++ 的不定长整型,C# 里翻译成 System.IntPtr 类型

not

上下文

C# 9

用于取反一个模式

notnull

上下文

C# 8

用于泛型约束,表示泛型参数不能是可空类型

nuint

上下文

C# 9

用于兼容 C/C++ 的不定长整型,C# 里翻译成 System.UIntPtr 类型

null

预定义

C# 1

用于表示所有可空数据类型的默认数值

object

预定义

C# 1

数据类型 System.Object 的别名,是所有非指针数据类型的最终基类型

on

上下文

C# 3

用于 LINQ 查询表达式的 join-in-on-equals 从句,带出等值连接的条件

operator

预定义

C# 1

用于声明转换器和运算符重载

or

上下文

C# 9

用于析取模式匹配

orderby

上下文

C# 3

用于 LINQ 查询表达式的 orderby 从句,用于排序

out

预定义

C# 1

用于修饰参数,表示该参数作为输出参数使用

上下文

C# 4

用于接口和委托类型的泛型参数,声明该泛型参数具有协变性

override

预定义

C# 1

用于重写基类型的 virtualabstract 成员

param

特性

C# 1

用于表示特性用于一个参数

params

预定义

C# 1

用于修饰参数,表示该参数是一个变长数组参数

partial

上下文

C# 2

用于将类型拆分为多文件存储

上下文

C# 3

用于分离私有无返回值实例方法的声明和实现,为不同文件管理

上下文

C# 9

用于分离所有方法的声明和实现,为不同文件管理

private

预定义

C# 1

用于声明对象的访问级别只在当前类型里可见

property

特性

C# 1

用于表示特性用于一个属性

protected

预定义

C# 1

用于声明对象的访问级别只在当前类型和它的派生类型里可见

上下文

C# 7

(C# 7.2)和 private 配合构成 private protected 修饰级别,避免跨程序集的派生行为

public

预定义

C# 1

用于声明对象的访问级别是随时随地均可见

readonly

预定义

C# 1

用于修饰字段表示该字段在运行时不可修改

上下文

C# 7

(C# 7.2)修饰结构,表示所有实例成员(构造器除外)均不会修改对象内的值

上下文

C# 7

(C# 7.2)用于配合 ref 修饰过的返回值,表示对象返回一个只读引用

上下文

C# 7

(C# 7.3)用于配合 ref 修饰迭代变量,表示变量在 foreach 循环里传只读引用

上下文

C# 8

用于修饰结构的实例成员(构造器除外)表示该成员不修改对象内的值

record

上下文

C# 9

用于声明一个记录类类型

上下文

C# 10

用于声明一个记录类型,配合 structclass 构成 record structrecord class

ref

预定义

C# 1

用于修饰参数,表示该参数是引用传递

上下文

C# 7

用于表示充当 struct 类型修饰符,表示类型只用于栈内存分配

上下文

C# 7

(C# 7.2)用于方法或属性、索引器等成员的的返回类型上,表示对象返回引用

上下文

C# 7

(C# 7.3)用于 foreach 的迭代变量,使其传引用

上下文

C# 11

用于 ref struct 类型的字段成员修饰,表示字段以引用传递

上下文

C# 13

用于泛型约束 allows ref struct,表示 ref struct 可用作泛型参数

remove

上下文

C# 1

用于事件成员的删除器声明部分

required

上下文

C# 11

用于修饰非只读属性或字段,表示它不论在实例化还是对象初始化器的时候都必须初始化

return

预定义

C# 1

用于返回结果和退出方法执行

特性

C# 1

用于表示特性用于一个返回值

上下文

C# 2

构成 yield return 语句的一部分

sbyte

预定义

C# 1

数据类型 System.SByte 的别名

scoped

上下文

C# 11

用于修饰 ref struct 类型的参数或临时变量,限制该值只能在当前声明范围内可用

上下文

C# 11

用于修饰传引用的参数或临时变量,限制该引用只能在当前声明范围内可用

上下文

C# 12

允许显式给出,修饰一些本身就隐式 scoped 了的临时变量

上下文

C# 12

用于修饰包含引用字段的 ref struct 类型,限制该类型的值只能在当前声明范围内可用

上下文

C# 12

用于放在 ref struct 类型的参数或临时变量的 ref 修饰符之后,限制该类型的引用只能在当前声明范围内可用

sealed

预定义

C# 1

用于修饰类型或成员,表示该类型或成员不再提供派生和重写操作

select

上下文

C# 3

用于 LINQ 查询表达式的 select 从句,获取迭代映射的结果

set

上下文

C# 1

用于属性的取值器声明部分

short

预定义

C# 1

数据类型 System.Int16 的别名

sizeof

预定义

C# 1

用于计算非托管类型的内存占用字节数

stackalloc

预定义

C# 1

用于声明一个栈内存数组

上下文

C# 8

用于表示一个 Span<T>ReadOnlySpan<T> 的表达式

static

预定义

C# 1

用于修饰成员,表示成员是静态的

上下文

C# 2

用于修饰类,表示类只存储静态成员,且不提供无参实例构造器,且不实现接口

上下文

C# 8

用于表示本地函数不捕获变量

上下文

C# 9

用于表示 Lambda 和匿名函数不捕获变量

上下文

C# 11

用于接口里的抽象或虚成员,表示该成员为静态抽象或静态虚成员

string

预定义

C# 1

数据类型 System.String 的别名

struct

预定义

C# 1

用于声明一个结构

上下文

C# 2

用于泛型约束,表示一个泛型参数必须是一个值类型

上下文

C# 10

配合 record 关键字,用于声明记录结构

上下文

C# 13

用于泛型约束 allows ref struct,表示 ref struct 可用作泛型参数

switch

预定义

C# 1

用于声明 switch 语句

上下文

C# 8

用于声明 switch 表达式

this

预定义

C# 1

表示类型里的默认实例成员,在执行过程期间替代为别的实例

预定义

C# 1

表示调用当前类型的别的构造器

上下文

C# 3

修饰参数,表示该方法为扩展方法,该参数实例表示该方法的逻辑调用实例

throw

预定义

C# 1

用于抛出异常实例,以及抛出隐式异常实例

true

预定义

C# 1

表示 bool 类型的其中一个常量

try

预定义

C# 1

用于 try-catchtry-catch-finallytry-finally 语句的声明

type

特性

C# 1

用于表示特性用于一个类型

typeof

预定义

C# 1

用于获取类型自身的反射信息

typevar

特性

C# 2

用于表示特性用于一个泛型参数

uint

预定义

C# 1

数据类型 System.UInt32 的别名

ulong

预定义

C# 1

数据类型 System.UInt64 的别名

unchecked

预定义

C# 1

表示表达式或块内代码在运算超出数据范围时候旋转数值

unmanaged

上下文

C# 7

用于 unmanaged 泛型约束,表示泛型参数可使用指针运算

上下文

C# 9

用于函数指针声明,表示指向的函数为非托管代码里存储的函数

unsafe

预定义

C# 1

表示块内代码可以使用不安全代码(指针等行为)

ushort

预定义

C# 1

数据类型 System.UInt16 的别名

using

预定义

C# 1

用于声明 using 块,表示使用完后自动内存释放

预定义

C# 1

用于声明 using 指令导入命名空间

上下文

C# 2

用于 using 别名指令

上下文

C# 6

用于 using static 指令和 using static 别名指令

上下文

C# 8

用于 await using 修饰,表示变量使用异步释放

上下文

C# 9

用于声明 using 变量

上下文

C# 10

用于 global usingglobal using static 指令以及别名指令

value

上下文

C# 1

用于属性和事件里各个访问器,并提供参数值

var

上下文

C# 3

用于隐式类型声明

上下文

C# 7

用于声明模式匹配

virtual

预定义

C# 1

用于实例成员可让派生类型重写逻辑

上下文

C# 11

用于配合 static 构成 static virtual 组合修饰,在接口里声明虚静态成员

void

预定义

C# 1

用于方法、属性赋值取值器等成员不返回任何实例,同时也是 System.Void 的别名

volatile

预定义

C# 1

用于修饰字段,表示字段经常被多个线程修改,以禁用 JIT 对变量数据计算的优化,避免优化后多线程里无法成功赋值

when

上下文

C# 6

用于异常筛选 catch-when 语句

上下文

C# 7

用于 switch 语句里进行模式匹配时带上条件

上下文

C# 8

用于 switch 表达式里进行模式匹配时带上条件

where

上下文

C# 2

用于泛型参数的泛型约束声明

上下文

C# 3

用于 LINQ 查询表达式的 where 从句,表示筛选迭代对象

while

预定义

C# 1

用于 while 循环和 do-while 循环的声明

with

上下文

C# 9

用于记录类类型的 with 表达式过程

上下文

C# 10

用于任何结构和匿名类型的 with 表达式过程

yield

上下文

C# 2

用于迭代器模式下构成 yield breakyield return 语句,产生迭代数值

_

上下文

C# 7

用于放弃成员的返回值,以及值元组的成员使用弃元

上下文

C# 7

用于声明模式、var 模式和解构模式的弃元

上下文

C# 8

用于递归模式(包括对位模式和属性模式)声明对象的弃元

上下文

C# 8

用于 switch 表达式的默认情况(也叫弃元模式)

上下文

C# 9

用于 Lambda 表达式,表示 Lambda 里的参数在方法体里不使用

上下文

C# 10

用于扩展属性模式的弃元

上下文

C# 11

用于列表模式和分片模式的弃元

__arglist

未归档

C# 1

用于兼容 C/C++ 里的变长参数表列

__makeref

未归档

C# 1

用于获取一个值类型对象的引用,用以表示数据类型自身的赋值取值过程

__reftype

未归档

C# 1

用于表示一个值类型引用的实际数据类型

__refvalue

未归档

C# 1

用于表示一个值类型引用的实际数据数值

__fieldof

反汇编

C# 1

用于表示反射字段的基本信息,返回值类型为 FieldInfo

__methodof

反汇编

C# 1

用于表示反射方法的基本信息,返回值类型为 MethodInfo

__methodptr

反汇编

C# 1

用来表示一个委托类型实际引用的方法的地址

最后更新于