关键字是对编译器具有特殊意义的预定义保留字符。它们不能在程序中用作标识符,除非它们有一个 @ 前缀。例如,@if 是有效的标识符,但 if 不是,因为 if 是关键字。
访问修饰符是关键字,用于指定成员或类型已声明的可访问性。 本部分介绍四个访问修饰符:
public
protected
internal
private
可使用访问修饰符指定以下六个可访问性级别:
各种类型对象成员的默认方位修饰符及可用修饰符
对象 | 成员默认访问修饰符 | 可用修饰符 |
---|---|---|
enum | public | 无 |
class | private | public、protected、internal、private、protected internal、private protected |
interface | public | public、protected、internal、private、protected internal、private protected |
struct | private | public、internal、private |
具有
private
可访问性的interface成员必须具有默认的实现,并且只有C# 8.0后支持除public以外的修饰符。
async
修饰符,可以将方法、lambda表达式或匿名方法指定为异步。const
关键字来声明某个常量字段或常量局部变量。 常量字段和常量局部变量不是变量并且不能修改。extern
修饰符用于声明在外部实现的方法。 extern
修饰符的常见用法是在使用 Interop 服务调入非托管代码时与 DllImport
特性一起使用。 在这种情况下,还必须将方法声明为 static
。in
关键字可指定类型参数是逆变的。 可以在泛型接口和委托中使用 in
关键字。new
关键字可以显式隐藏从基类继承的成员。 隐藏继承的成员时,该成员的派生版本将替换基类版本。out
关键字可指定类型参数是协变的。 可以在泛型接口和委托中使用 out
关键字。override
修饰符。readonly
关键字是一个可在四个上下文中使用的修饰符:
readonly
指示只能在声明期间或在同一个类的构造函数中向字段赋值。readonly struct
类型定义中,readonly
指示结构类型是不可变的。readonly
指示实例成员不修改结构的状态。ref readonly
方法返回中,readonly
修饰符指示该方法返回一个引用,且不允许向该引用写入内容。sealed
修饰符可阻止其他类继承自该类。static
修饰符可声明属于类型本身而不是属于特定对象的静态成员。unsafe
关键字表示不安全上下文,该上下文是任何涉及指针的操作所必需的。virtual
关键字用于修改方法、属性、索引器或事件声明,并使它们可以在派生类中被重写。volatile
关键字指示一个字段可以由多个同时执行的线程修改。类别 | c#关键字 |
---|---|
选择语句 | if、else、switch、case |
迭代语句 | do、for、foreach、while |
跳转语句 | break、continue、default、goto 、return、yield |
异常处理语句 | throw、try-catch、try-finally、try-catch-finally |
Checked和Unchecked | checked、unchecked,用于对整型算术运算和转换启用或关闭溢出检查 |
fixed语句 | fixed语句可防止垃圾回收期重新定位可移动的变量 |
lock语句 | lock语句获取给定对象的互斥 lock,执行语句块,然后释放 lock。 |
params
关键字可以指定采用数目可变的参数的方法参数。 参数类型必须是一维数组。in
关键字会导致按引用传递参数,但确保未修改参数。 它让形参成为实参的别名,这必须是变量。ref
关键字指示按引用传递值。out
关键字通过引用传递参数。它与 ref 关键字相似,只不过 ref
要求在传递之前初始化变量。using
关键字有三个主要用途:
new
约束指定泛型类声明中的类型实参必须有公共的无参数构造函数。 若要使用 new
约束,则该类型不能为抽象类型。where
子句指定对用作泛型类型、方法、委托或本地函数中类型参数的参数类型的约束。null
关键字是表示不引用任何对象的空引用的文字值。 null
是引用类型变量的默认值。 普通值类型不能为 NULL,可为空的值类型除外。bool
类型关键字是 .NET System.Boolean 结构类型的别名,它表示一个布尔值,可为 true
或 false
。关键字 | 说明 |
---|---|
add | 定义一个自定义事件访问器,客户端代码订阅事件时会调用该访问器。 |
and | 创建在两个嵌套模式均匹配时匹配的模式。 |
async | 指示修改后的方法、lambda 表达式或匿名方法是异步的。 |
await | 挂起异步方法,直到等待的任务完成。 |
dynamic | 定义一个引用类型,实现发生绕过编译时类型检查的操作。 |
get | 为属性或索引器定义访问器方法。 |
global | 未以其他方式命名的全局命名空间的别名。 |
init | 为属性或索引器定义访问器方法。 |
nint | 定义本机大小的整数数据类型。 |
not | 创建在否定模式不匹配时匹配的模式。 |
nuint | 定义本机大小的无符号整数数据类型。 |
or | 创建在任一嵌套模式匹配时匹配的模式。 |
partial | 在整个同一编译单元内定义分部类、结构和接口。 |
record | 用于定义记录类型。 |
remove | 定义一个自定义事件访问器,客户端代码取消订阅事件时会调用该访问器。 |
set | 为属性或索引器定义访问器方法。 |
value | 用于设置访问器和添加或删除事件处理程序。 |
var | 使编译器能够确定在方法作用域中声明的变量类型。 |
when | 指定 catch 块的筛选条件或 switch 语句的 case 标签。 |
where | 将约束添加到泛型声明。 (另请参阅 where)。 |
yield | 在迭代器块中使用,用于向枚举数对象返回值或用于表示迭代结束。 |
子句 | 说明 |
---|---|
from | 指定数据源和范围变量(类似于迭代变量)。 |
where | 基于由逻辑 AND 和 OR 运算符(&& 或 ` |
select | 指定执行查询时,所返回序列中元素的类型和形状。 |
group | 根据指定的密钥值对查询结果分组。 |
into | 提供可作为对 join、group 或 select 子句结果引用的标识符。 |
orderby | 根据元素类型的默认比较器对查询结果进行升序或降序排序。 |
join | 基于两个指定匹配条件间的相等比较而联接两个数据源。 |
let | 引入范围变量,在查询表达式中存储子表达式结果。 |
in | join 子句中的上下文关键字。 |
on | join 子句中的上下文关键字。 |
equals | join 子句中的上下文关键字。 |
by | group 子句中的上下文关键字。 |
ascending | orderby 子句中的上下文关键字。 |
descending | orderby 子句中的上下文关键字。 |