C#
语言规范
版本 5.0
版权所有 Microsoft Corporation 1999-2012。保留所有权利。
请将更正、建议及其他反馈信息发送至 csharp@microsoft.com
注意
? 1999-2012 Microsoft Corporation 。保留所有权利。
Microsoft 、Windows 、Visual Basic 、Visual C# 和 Visual C++ 是 Microsoft Corporation 在美国和 /或其他国家 /地区的
注册商标或商标。
本文提及的其他产品和公司名称可能是其各自所有者的商标。
版权所有 Microsoft Corporation 1999-2012。保留所有权利。
目录
目录
1. 介绍 ..................................................................................................................................................................... 1
1.1 Hello world .................................................................................................................................................... 1
1.2 程序结构 ....................................................................................................................................................... 2
1.3 类型和变量 ................................................................................................................................................... 3
1.4 表达式 ........................................................................................................................................................... 6
1.5 语句 ............................................................................................................................................................... 8
1.6 类和对象 ..................................................................................................................................................... 12
1.6.1 成员 ...................................................................................................................................................... 12
1.6.2 可访问性 .............................................................................................................................................. 13
1.6.3 类型形参 .............................................................................................................................................. 13
1.6.4 基类 ...................................................................................................................................................... 14
1.6.5 字段 ...................................................................................................................................................... 14
1.6.6 方法 ...................................................................................................................................................... 15
1.6.6.1 参数 ................................................................................................................................................ 15
1.6.6.2 方法体和局部变量 ........................................................................................................................ 16
1.6.6.3 静态方法和实例方法 .................................................................................................................... 17
1.6.6.4 虚方法、重写方法和抽象方法 .................................................................................................... 18
1.6.6.5 方法重载 ........................................................................................................................................ 20
1.6.7 其他函数成员 ...................................................................................................................................... 20
1.6.7.1 构造函数 ........................................................................................................................................ 22
1.6.7.2 属性 ................................................................................................................................................ 23
1.6.7.3 索引器 ............................................................................................................................................ 23
1.6.7.4 事件 ................................................................................................................................................ 24
1.6.7.5 运算符 ............................................................................................................................................ 24
1.6.7.6 析构函数 ........................................................................................................................................ 25
1.7 结构 ............................................................................................................................................................. 25
1.8 数组 ............................................................................................................................................................. 26
1.9 接口 ............................................................................................................................................................. 27
1.10 枚举 ........................................................................................................................................................... 28
1.11 委托 ........................................................................................................................................................... 29
1.12 特性 ........................................................................................................................................................... 30
2. 词法结构 ........................................................................................................................................................... 33
2.1 程序 ............................................................................................................................................................. 33
2.2 文法 ............................................................................................................................................................. 33
2.2.1 文法表示法 .......................................................................................................................................... 33
2.2.2 词法文法 .............................................................................................................................................. 34
2.2.3 句法文法 .............................................................................................................................................. 34
2.3 语法分析 ..................................................................................................................................................... 34
2.3.1 行结束符 .............................................................................................................................................. 35
2.3.2 注释 ...................................................................................................................................................... 35
2.3.3 空白 ...................................................................................................................................................... 36
2.4 标记 ............................................................................................................................................................. 37
2.4.1 Unicode 字符转义序列 ........................................................................................................................ 37
版权所有 Microsoft Corporation 1999-2012。保留所有权利。
iii
C# LANGUAGE SPECIFICATION
2.4.2 标识符 .................................................................................................................................................. 38
2.4.3 关键字 .................................................................................................................................................. 39
2.4.4 文本 ...................................................................................................................................................... 40
2.4.4.1 布尔值 ............................................................................................................................................ 40
2.4.4.2 整数 ................................................................................................................................................ 40
2.4.4.3 实数 ................................................................................................................................................ 41
2.4.4.4 字符 ................................................................................................................................................ 42
2.4.4.5 字符串 ............................................................................................................................................ 43
2.4.4.6 null 文本 ......................................................................................................................................... 45
2.4.5 运算符和标点符号 .............................................................................................................................. 45
2.5 预处理指令 ................................................................................................................................................. 45
2.5.1 条件编译符号 ...................................................................................................................................... 46
2.5.2 预处理表达式 ...................................................................................................................................... 47
2.5.3 声明指令 .............................................................................................................................................. 47
2.5.4 条件编译指令 ...................................................................................................................................... 48
2.5.5 诊断指令 .............................................................................................................................................. 51
2.5.6 区域指令 .............................................................................................................................................. 51
2.5.7 行指令 .................................................................................................................................................. 52
2.5.8 Pragma 指令 ......................................................................................................................................... 52
2.5.8.1 Pragma warning.............................................................................................................................. 52
3. 基本概念 ........................................................................................................................................................... 55
3.1 应用程序启动 ............................................................................................................................................. 55
3.2 应用程序终止 ............................................................................................................................................. 56
3.3 声明 ............................................................................................................................................................. 56
3.4 成员 ............................................................................................................................................................. 58
3.4.1 命名空间成员 ...................................................................................................................................... 58
3.4.2 结构成员 .............................................................................................................................................. 58
3.4.3 枚举成员 .............................................................................................................................................. 59
3.4.4 类成员 .................................................................................................................................................. 59
3.4.5 接口成员 .............................................................................................................................................. 59
3.4.6 数组成员 .............................................................................................................................................. 59
3.4.7 委托成员 .............................................................................................................................................. 59
3.5 成员访问 ..................................................................................................................................................... 60
3.5.1 已声明可访问性 .................................................................................................................................. 60
3.5.2 可访问域 .............................................................................................................................................. 60
3.5.3 实例成员的受保护访问 ....................................................................................................................... 63
3.5.4 可访问性约束 ...................................................................................................................................... 64
3.6 签名和重载 ................................................................................................................................................. 65
3.7 范围 ............................................................................................................................................................. 66
3.7.1 名称隐藏 .............................................................................................................................................. 68
3.7.1.1 通过嵌套隐藏 ................................................................................................................................ 68
3.7.1.2 通过继承隐藏 ................................................................................................................................ 69
3.8 命名空间和类型名称 ................................................................................................................................. 70
3.8.1 完全限定名 .......................................................................................................................................... 72
iv
版权所有 Microsoft Corporation 1999-2012。保留所有权利。
目录
3.9 自动内存管理 ............................................................................................................................................. 73
3.10 执行顺序 ................................................................................................................................................... 75
4. 类型 ................................................................................................................................................................... 77
4.1 值类型 ......................................................................................................................................................... 77
4.1.1 System.ValueType 类型 ....................................................................................................................... 78
4.1.2 默认构造函数 ...................................................................................................................................... 78
4.1.3 结构类型 .............................................................................................................................................. 79
4.1.4 简单类型 .............................................................................................................................................. 79
4.1.5 整型 ...................................................................................................................................................... 80
4.1.6 浮点型 .................................................................................................................................................. 81
4.1.7 decimal 类型 ......................................................................................................................................... 82
4.1.8 bool 类型 .............................................................................................................................................. 82
4.1.9 枚举类型 .............................................................................................................................................. 82
4.1.10 可以为 null 的类型 ............................................................................................................................ 82
4.2 引用类型 ..................................................................................................................................................... 83
4.2.1 类类型 .................................................................................................................................................. 84
4.2.2 对象类型 .............................................................................................................................................. 84
4.2.3 dynamic 类型 ........................................................................................................................................ 84
4.2.4 string 类型 ............................................................................................................................................ 84
4.2.5 接口类型 .............................................................................................................................................. 85
4.2.6 数组类型 .............................................................................................................................................. 85
4.2.7 委托类型 .............................................................................................................................................. 85
4.3 装箱和拆箱 ................................................................................................................................................. 85
4.3.1 装箱转换 .............................................................................................................................................. 85
4.3.2 拆箱转换 .............................................................................................................................................. 86
4.4 构造类型 ..................................................................................................................................................... 87
4.4.1 类型实参 .............................................................................................................................................. 88
4.4.2 开放和封闭类型 .................................................................................................................................. 88
4.4.3 绑定和未绑定类型 .............................................................................................................................. 89
4.4.4 满足约束 .............................................................................................................................................. 89
4.5 类型形参 ..................................................................................................................................................... 90
4.6 表达式树类型 ............................................................................................................................................. 90
4.7 dynamic 类型 .............................................................................................................................................. 91
5. 变量 ................................................................................................................................................................... 92
5.1 变量类别 ..................................................................................................................................................... 92
5.1.1 静态变量 .............................................................................................................................................. 92
5.1.2 实例变量 .............................................................................................................................................. 92
5.1.2.1 类中的实例变量 ............................................................................................................................ 92
5.1.2.2 结构中的实例变量 ........................................................................................................................ 93
5.1.3 数组元素 .............................................................................................................................................. 93
5.1.4 值参数 .................................................................................................................................................. 93
5.1.5 引用参数 .............................................................................................................................................. 93
5.1.6 输出形参 .............................................................................................................................................. 93
5.1.7 局部变量 .............................................................................................................................................. 94
版权所有 Microsoft Corporation 1999-2012。保留所有权利。
v
C# LANGUAGE SPECIFICATION
5.2 默认值 ......................................................................................................................................................... 94
5.3 明确赋值 ..................................................................................................................................................... 95
5.3.1 初始已赋值变量 .................................................................................................................................. 95
5.3.2 初始未赋值变量 .................................................................................................................................. 96
5.3.3 确定明确赋值的细则 .......................................................................................................................... 96
5.3.3.1 一般语句规则 ................................................................................................................................ 96
5.3.3.2 块语句、 checked 和 unchecked 语句 ........................................................................................... 97
5.3.3.3 表达式语句 .................................................................................................................................... 97
5.3.3.4 声明语句 ........................................................................................................................................ 97
5.3.3.5 if 语句 ............................................................................................................................................ 97
5.3.3.6 switch 语句 .................................................................................................................................... 97
5.3.3.7 while 语句 ...................................................................................................................................... 98
5.3.3.8 do 语句 ........................................................................................................................................... 98
5.3.3.9 for 语句 .......................................................................................................................................... 98
5.3.3.10 break、continue 和 goto 语句 ..................................................................................................... 98
5.3.3.11 throw 语句 ................................................................................................................................... 99
5.3.3.12 return 语句 ................................................................................................................................... 99
5.3.3.13 try-catch 语句 ............................................................................................................................... 99
5.3.3.14 try-finally 语句 ............................................................................................................................. 99
5.3.3.15 try-catch-finally 语句 ................................................................................................................. 100
5.3.3.16 foreach 语句 ............................................................................................................................... 100
5.3.3.17 using 语句 .................................................................................................................................. 101
5.3.3.18 lock 语句 .................................................................................................................................... 101
5.3.3.19 yield 语句 ................................................................................................................................... 101
5.3.3.20 简单表达式的一般规则 ............................................................................................................ 101
5.3.3.21 带有嵌入表达式的表达式的一般规则 .................................................................................... 101
5.3.3.22 调用表达式和对象创建表达式 ................................................................................................ 102
5.3.3.23 简单赋值表达式 ........................................................................................................................ 102
5.3.3.24 && 表达式 ................................................................................................................................. 102
5.3.3.25 || 表达式 ..................................................................................................................................... 103
5.3.3.26 ! 表达式 ...................................................................................................................................... 104
5.3.3.27 ?? 表达式 ................................................................................................................................... 104
5.3.3.28 ?: 表达式 .................................................................................................................................... 105
5.3.3.29 匿名函数 .................................................................................................................................... 105
5.4 变量引用 ................................................................................................................................................... 106
5.5 变量引用的原子性 ................................................................................................................................... 106
6. 转换 ................................................................................................................................................................. 107
6.1 隐式转换 ................................................................................................................................................... 107
6.1.1 标识转换 ............................................................................................................................................ 108
6.1.2 隐式数值转换 .................................................................................................................................... 108
6.1.3 隐式枚举转换 .................................................................................................................................... 108
6.1.4 可以为 null 的隐式转换 .................................................................................................................... 108
6.1.5 null 文本转换 ..................................................................................................................................... 109
6.1.6 隐式引用转换 .................................................................................................................................... 109
vi
版权所有 Microsoft Corporation 1999-2012。保留所有权利。
目录
6.1.7 装箱转换 ............................................................................................................................................ 109
6.1.8 隐式动态转换 .................................................................................................................................... 110
6.1.9 隐式常量表达式转换 ........................................................................................................................ 110
6.1.10 涉及类型形参的隐式转换 ............................................................................................................... 110
6.1.11 用户定义的隐式转换 ....................................................................................................................... 111
6.1.12 匿名函数转换和方法组转换 ........................................................................................................... 111
6.2 显式转换 ................................................................................................................................................... 111
6.2.1 显式数值转换 .................................................................................................................................... 112
6.2.2 显式枚举转换 .................................................................................................................................... 113
6.2.3 可以为 null 的显式转换 .................................................................................................................... 113
6.2.4 显式引用转换 .................................................................................................................................... 114
6.2.5 拆箱转换 ............................................................................................................................................ 115
6.2.6 显式动态转换 .................................................................................................................................... 115
6.2.7 涉及类型参数的显式转换 ................................................................................................................. 116
6.2.8 用户定义的显式转换 ........................................................................................................................ 116
6.3 标准转换 ................................................................................................................................................... 117
6.3.1 标准隐式转换 .................................................................................................................................... 117
6.3.2 标准显式转换 .................................................................................................................................... 117
6.4 用户定义的转换 ....................................................................................................................................... 117
6.4.1 允许的用户定义转换 ........................................................................................................................ 117
6.4.2 提升转换运算符 ................................................................................................................................ 117
6.4.3 用户定义转换的计算 ........................................................................................................................ 118
6.4.4 用户定义的隐式转换 ........................................................................................................................ 118
6.4.5 用户定义的显式转换 ........................................................................................................................ 119
6.5 匿名函数转换 ........................................................................................................................................... 120
6.5.1 匿名函数转换为委托类型的计算 ..................................................................................................... 121
6.5.2 匿名函数转换为表达式树类型的计算 ............................................................................................. 122
6.5.3 实现示例 ............................................................................................................................................ 122
6.6 方法组转换 ............................................................................................................................................... 124
7. 表达式 ............................................................................................................................................................. 127
7.1 表达式的分类 ........................................................................................................................................... 127
7.1.1 表达式的值 ........................................................................................................................................ 128
7.2 静态和动态绑定 ....................................................................................................................................... 128
7.2.1 绑定时间 ............................................................................................................................................ 129
7.2.2 动态绑定 ............................................................................................................................................ 129
7.2.3 构成表达式的类型 ............................................................................................................................ 129
7.3 运算符 ....................................................................................................................................................... 129
7.3.1 运算符的优先级和顺序关联性 ......................................................................................................... 130
7.3.2 运算符重载 ........................................................................................................................................ 131
7.3.3 一元运算符重载决策 ........................................................................................................................ 132
7.3.4 二元运算符重载决策 ........................................................................................................................ 132
7.3.5 候选用户定义运算符 ........................................................................................................................ 132
7.3.6 数值提升 ............................................................................................................................................ 133
7.3.6.1 一元数值提升 .............................................................................................................................. 133
版权所有 Microsoft Corporation 1999-2012。保留所有权利。
vii
C# LANGUAGE SPECIFICATION
7.3.6.2 二元数值提升 .............................................................................................................................. 133
7.3.7 提升运算符 ........................................................................................................................................ 134
7.4 成员查找 ................................................................................................................................................... 135
7.4.1 基类型 ................................................................................................................................................ 136
7.5 函数成员 ................................................................................................................................................... 136
7.5.1 实参列表 ............................................................................................................................................ 138
7.5.1.1 对应形参 ...................................................................................................................................... 139
7.5.1.2 实参列表的运行时计算 .............................................................................................................. 140
7.5.2 类型推断 ............................................................................................................................................ 141
7.5.2.1 第一阶段 ...................................................................................................................................... 142
7.5.2.2 第二阶段 ...................................................................................................................................... 142
7.5.2.3 输入类型 ...................................................................................................................................... 143
7.5.2.4 输出类型 ...................................................................................................................................... 143
7.5.2.5 依赖 .............................................................................................................................................. 143
7.5.2.6 输出类型推断 .............................................................................................................................. 143
7.5.2.7 参数类型显式推断 ...................................................................................................................... 143
7.5.2.8 精确推断 ...................................................................................................................................... 143
7.5.2.9 下限推断 ...................................................................................................................................... 143
7.5.2.10 上限推断 .................................................................................................................................... 144
7.5.2.11 固定 ............................................................................................................................................ 145
7.5.2.12 推断返回类型 ............................................................................................................................ 145
7.5.2.13 方法组转换的类型推断 ............................................................................................................ 146
7.5.2.14 查找一组表达式的最通用类型 ................................................................................................ 147
7.5.3 重载决策 ............................................................................................................................................ 147
7.5.3.1 适用函数成员 .............................................................................................................................. 147
7.5.3.2 更好的函数成员 .......................................................................................................................... 148
7.5.3.3 表达式的更佳转换 ...................................................................................................................... 149
7.5.3.4 类型的更佳转换 .......................................................................................................................... 149
7.5.3.5 更佳转换目标 .............................................................................................................................. 149
7.5.3.6 泛型类中的重载 .......................................................................................................................... 150
7.5.4 动态重载决策的编译时检查 ............................................................................................................. 150
7.5.5 函数成员调用 .................................................................................................................................... 151
7.5.5.1 已装箱实例上的调用 .................................................................................................................. 152
7.6 基本表达式 ............................................................................................................................................... 152
7.6.1 文本 .................................................................................................................................................... 153
7.6.2 简单名称 ............................................................................................................................................ 153
7.6.2.1 块中的固定含义 .......................................................................................................................... 154
7.6.3 带括号的表达式 ................................................................................................................................ 155
7.6.4 成员访问 ............................................................................................................................................ 155
7.6.4.1 相同的简单名称和类型名称 ...................................................................................................... 157
7.6.4.2 语法多义性 .................................................................................................................................. 157
7.6.5 调用表达式 ........................................................................................................................................ 158
7.6.5.1 方法调用 ...................................................................................................................................... 158
7.6.5.2 扩展方法调用 .............................................................................................................................. 159
7.6.5.3 委托调用 ...................................................................................................................................... 162
viii
版权所有 Microsoft Corporation 1999-2012。保留所有权利。