04_1.keyword.md 18 KB

关键字

关键字是对编译器具有特殊意义的预定义保留字符。它们不能在程序中用作标识符,除非它们有一个 @ 前缀。例如,@if 是有效的标识符,但 if 不是,因为 if 是关键字。

关键字教程地址

修饰符

访问修饰符

访问修饰符是关键字,用于指定成员或类型已声明的可访问性。 本部分介绍四个访问修饰符:

  • public
  • protected
  • internal
  • private

可使用访问修饰符指定以下六个可访问性级别:

  • public:访问不受限制
  • protected:访问限于包含类或者包含类的派生类
  • internal:访问限于当前程序集
  • protected internal:访问限于当前程序集或包含类的派生类
  • [private]():访问限于包含类
  • private protected:访问限于包含类或当前程序集中包含类的派生类

各种类型对象成员的默认方位修饰符及可用修饰符

对象 成员默认访问修饰符 可用修饰符
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以外的修饰符。

其他修饰符

  • abstract:抽象修饰符,可用于类、方法、属性、索引和事件。 标记为抽象的成员必须由派生自抽象类的非抽象类来实现。
  • async:使用async修饰符,可以将方法、lambda表达式或匿名方法指定为异步。
  • const:使用 const 关键字来声明某个常量字段或常量局部变量。 常量字段和常量局部变量不是变量并且不能修改。
  • event:用于声明事件。
  • externextern 修饰符用于声明在外部实现的方法。 extern 修饰符的常见用法是在使用 Interop 服务调入非托管代码时与 DllImport 特性一起使用。 在这种情况下,还必须将方法声明为 static
  • in(泛型修饰符):对于泛型类型参数,in 关键字可指定类型参数是逆变的。 可以在泛型接口和委托中使用 in 关键字。
  • new 修饰符:在用作声明修饰符时,new 关键字可以显式隐藏从基类继承的成员。 隐藏继承的成员时,该成员的派生版本将替换基类版本。
  • out 关键字(泛型修饰符):对于泛型类型参数,out 关键字可指定类型参数是协变的。 可以在泛型接口和委托中使用 out 关键字。
  • override 修饰符:扩展或修改继承的方法、属性、索引器或事件的抽象或虚拟实现需要 override 修饰符。
  • readonlyreadonly 关键字是一个可在四个上下文中使用的修饰符:
    • 在字段声明中,readonly 指示只能在声明期间或在同一个类的构造函数中向字段赋值。
    • readonly struct 类型定义中,readonly 指示结构类型是不可变的。
    • 在结构类型内的实例成员声明中,readonly 指示实例成员不修改结构的状态。
    • ref readonly方法返回中,readonly 修饰符指示该方法返回一个引用,且不允许向该引用写入内容。
  • sealed 修饰符 :应用于某个类时,sealed 修饰符可阻止其他类继承自该类。
  • static 修饰符:使用 static 修饰符可声明属于类型本身而不是属于特定对象的静态成员。
  • unsafe 关键字unsafe 关键字表示不安全上下文,该上下文是任何涉及指针的操作所必需的。
  • virtualvirtual 关键字用于修改方法、属性、索引器或事件声明,并使它们可以在派生类中被重写。
  • volatilevolatile 关键字指示一个字段可以由多个同时执行的线程修改。

语句关键字

类别 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 checkedunchecked,用于对整型算术运算和转换启用或关闭溢出检查
fixed语句 fixed语句可防止垃圾回收期重新定位可移动的变量
lock语句 lock语句获取给定对象的互斥 lock,执行语句块,然后释放 lock。

方法参数

  • 参数数组的 params 关键字:使用 params 关键字可以指定采用数目可变的参数的方法参数。 参数类型必须是一维数组。
  • in 参数修饰符in 关键字会导致按引用传递参数,但确保未修改参数。 它让形参成为实参的别名,这必须是变量。
  • ref 关键字ref 关键字指示按引用传递值。
  • out 参数修饰符out 关键字通过引用传递参数。它与 ref 关键字相似,只不过 ref 要求在传递之前初始化变量。

命名空间关键字

  • namespace 关键字:关键字用于声明包含一组相关对象的作用域。 可以使用命名空间来组织代码元素并创建全局唯一类型。
  • using:using 关键字有三个主要用途:
    • using 语句定义一个范围,在此范围的末尾将释放对象。
    • using 指令为命名空间创建别名,或导入在其他命名空间中定义的类型。
    • using static 指令导入单个类的成员。

泛型类型约束关键字

  • new 约束new 约束指定泛型类声明中的类型实参必须有公共的无参数构造函数。 若要使用 new 约束,则该类型不能为抽象类型。
  • where(泛型类型约束:泛型定义中的 where 子句指定对用作泛型类型、方法、委托或本地函数中类型参数的参数类型的约束。

访问关键字

  • base 关键字 base 关键字用于从派生类中访问基类的成员。
  • this 关键字this 关键字指代类的当前实例,还可用作扩展方法的第一个参数的修饰符。

文字关键字

上下文关键字

关键字 说明
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 子句中的上下文关键字。