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 其他函数成员....................................................................................................................................... 21
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.............................................................................................................................. 53
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 的类型.............................................................................................................................83
4.2 引用类型......................................................................................................................................................83
4.2.1 类类型................................................................................................................................................... 84
4.2.2 对象类型............................................................................................................................................... 84
4.2.3 dynamic 类型........................................................................................................................................ 84
4.2.4 string 类型............................................................................................................................................. 85
4.2.5 接口类型............................................................................................................................................... 85
4.2.6 数组类型............................................................................................................................................... 85
4.2.7 委托类型............................................................................................................................................... 85
4.3 装箱和拆箱..................................................................................................................................................85
4.3.1 装箱转换............................................................................................................................................... 85
4.3.2 拆箱转换............................................................................................................................................... 87
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. 变量....................................................................................................................................................................93
5.1 变量类别......................................................................................................................................................93
5.1.1 静态变量............................................................................................................................................... 93
5.1.2 实例变量............................................................................................................................................... 93
5.1.2.1 类中的实例变量............................................................................................................................ 93
5.1.2.2 结构中的实例变量........................................................................................................................ 94
5.1.3 数组元素............................................................................................................................................... 94
5.1.4 值参数................................................................................................................................................... 94
5.1.5 引用参数............................................................................................................................................... 94
5.1.6 输出形参............................................................................................................................................... 94
5.1.7 局部变量............................................................................................................................................... 95
版权所有 Microsoft Corporation 1999-2012。保留所有权利。
v
C# LANGUAGE SPECIFICATION
5.2 默认值..........................................................................................................................................................95
5.3 明确赋值......................................................................................................................................................96
5.3.1 初始已赋值变量................................................................................................................................... 96
5.3.2 初始未赋值变量................................................................................................................................... 97
5.3.3 确定明确赋值的细则........................................................................................................................... 97
5.3.3.1 一般语句规则................................................................................................................................ 97
5.3.3.2 块语句、checked 和 unchecked 语句........................................................................................... 98
5.3.3.3 表达式语句.................................................................................................................................... 98
5.3.3.4 声明语句........................................................................................................................................ 98
5.3.3.5 if 语句............................................................................................................................................. 98
5.3.3.6 switch 语句.....................................................................................................................................99
5.3.3.7 while 语句.......................................................................................................................................99
5.3.3.8 do 语句........................................................................................................................................... 99
5.3.3.9 for 语句...........................................................................................................................................99
5.3.3.10 break、continue 和 goto 语句....................................................................................................100
5.3.3.11 throw 语句.................................................................................................................................. 100
5.3.3.12 return 语句..................................................................................................................................100
5.3.3.13 try-catch 语句............................................................................................................................. 100
5.3.3.14 try-finally 语句........................................................................................................................... 100
5.3.3.15 try-catch-finally 语句..................................................................................................................101
5.3.3.16 foreach 语句................................................................................................................................102
5.3.3.17 using 语句...................................................................................................................................102
5.3.3.18 lock 语句.....................................................................................................................................102
5.3.3.19 yield 语句....................................................................................................................................102
5.3.3.20 简单表达式的一般规则............................................................................................................ 102
5.3.3.21 带有嵌入表达式的表达式的一般规则.................................................................................... 102
5.3.3.22 调用表达式和对象创建表达式................................................................................................ 103
5.3.3.23 简单赋值表达式........................................................................................................................ 103
5.3.3.24 && 表达式................................................................................................................................. 103
5.3.3.25 || 表达式......................................................................................................................................104
5.3.3.26 !表达式....................................................................................................................................... 105
5.3.3.27 ?? 表达式....................................................................................................................................105
5.3.3.28 ?: 表达式.....................................................................................................................................106
5.3.3.29 匿名函数.................................................................................................................................... 106
5.4 变量引用....................................................................................................................................................107
5.5 变量引用的原子性....................................................................................................................................107
6. 转换..................................................................................................................................................................109
6.1 隐式转换....................................................................................................................................................109
6.1.1 标识转换............................................................................................................................................. 110
6.1.2 隐式数值转换..................................................................................................................................... 110
6.1.3 隐式枚举转换..................................................................................................................................... 110
6.1.4 可以为 null 的隐式转换.....................................................................................................................110
6.1.5 null 文本转换......................................................................................................................................111
6.1.6 隐式引用转换..................................................................................................................................... 111
vi
版权所有 Microsoft Corporation 1999-2012 。保留所有权利。
目录
6.1.7 装箱转换............................................................................................................................................. 111
6.1.8 隐式动态转换..................................................................................................................................... 112
6.1.9 隐式常量表达式转换......................................................................................................................... 112
6.1.10 涉及类型形参的隐式转换............................................................................................................... 112
6.1.11 用户定义的隐式转换....................................................................................................................... 113
6.1.12 匿名函数转换和方法组转换........................................................................................................... 113
6.2 显式转换....................................................................................................................................................113
6.2.1 显式数值转换..................................................................................................................................... 114
6.2.2 显式枚举转换..................................................................................................................................... 115
6.2.3 可以为 null 的显式转换.....................................................................................................................115
6.2.4 显式引用转换..................................................................................................................................... 116
6.2.5 拆箱转换............................................................................................................................................. 117
6.2.6 显式动态转换..................................................................................................................................... 117
6.2.7 涉及类型参数的显式转换................................................................................................................. 118
6.2.8 用户定义的显式转换......................................................................................................................... 119
6.3 标准转换....................................................................................................................................................119
6.3.1 标准隐式转换..................................................................................................................................... 119
6.3.2 标准显式转换..................................................................................................................................... 119
6.4 用户定义的转换........................................................................................................................................119
6.4.1 允许的用户定义转换......................................................................................................................... 119
6.4.2 提升转换运算符................................................................................................................................. 120
6.4.3 用户定义转换的计算......................................................................................................................... 120
6.4.4 用户定义的隐式转换......................................................................................................................... 121
6.4.5 用户定义的显式转换......................................................................................................................... 121
6.5 匿名函数转换............................................................................................................................................122
6.5.1 匿名函数转换为委托类型的计算..................................................................................................... 124
6.5.2 匿名函数转换为表达式树类型的计算............................................................................................. 124
6.5.3 实现示例............................................................................................................................................. 124
6.6 方法组转换................................................................................................................................................127
7. 表达式..............................................................................................................................................................129
7.1 表达式的分类............................................................................................................................................129
7.1.1 表达式的值......................................................................................................................................... 130
7.2 静态和动态绑定........................................................................................................................................130
7.2.1 绑定时间............................................................................................................................................. 131
7.2.2 动态绑定............................................................................................................................................. 131
7.2.3 构成表达式的类型............................................................................................................................. 131
7.3 运算符........................................................................................................................................................131
7.3.1 运算符的优先级和顺序关联性......................................................................................................... 132
7.3.2 运算符重载......................................................................................................................................... 133
7.3.3 一元运算符重载决策......................................................................................................................... 134
7.3.4 二元运算符重载决策......................................................................................................................... 134
7.3.5 候选用户定义运算符......................................................................................................................... 134
7.3.6 数值提升............................................................................................................................................. 135
7.3.6.1 一元数值提升.............................................................................................................................. 135
版权所有 Microsoft Corporation 1999-2012。保留所有权利。
vii
C# LANGUAGE SPECIFICATION
7.3.6.2 二元数值提升.............................................................................................................................. 135
7.3.7 提升运算符......................................................................................................................................... 136
7.4 成员查找....................................................................................................................................................137
7.4.1 基类型................................................................................................................................................. 138
7.5 函数成员....................................................................................................................................................138
7.5.1 实参列表............................................................................................................................................. 140
7.5.1.1 对应形参...................................................................................................................................... 141
7.5.1.2 实参列表的运行时计算.............................................................................................................. 142
7.5.2 类型推断............................................................................................................................................. 143
7.5.2.1 第一阶段...................................................................................................................................... 144
7.5.2.2 第二阶段...................................................................................................................................... 144
7.5.2.3 输入类型...................................................................................................................................... 145
7.5.2.4 输出类型...................................................................................................................................... 145
7.5.2.5 依赖.............................................................................................................................................. 145
7.5.2.6 输出类型推断.............................................................................................................................. 145
7.5.2.7 参数类型显式推断...................................................................................................................... 145
7.5.2.8 精确推断...................................................................................................................................... 145
7.5.2.9 下限推断...................................................................................................................................... 146
7.5.2.10 上限推断.................................................................................................................................... 146
7.5.2.11 固定............................................................................................................................................ 147
7.5.2.12 推断返回类型............................................................................................................................ 147
7.5.2.13 方法组转换的类型推断............................................................................................................ 148
7.5.2.14 查找一组表达式的最通用类型................................................................................................ 149
7.5.3 重载决策............................................................................................................................................. 149
7.5.3.1 适用函数成员.............................................................................................................................. 149
7.5.3.2 更好的函数成员.......................................................................................................................... 150
7.5.3.3 表达式的更佳转换...................................................................................................................... 151
7.5.3.4 类型的更佳转换.......................................................................................................................... 151
7.5.3.5 更佳转换目标.............................................................................................................................. 152
7.5.3.6 泛型类中的重载.......................................................................................................................... 152
7.5.4 动态重载决策的编译时检查............................................................................................................. 152
7.5.5 函数成员调用..................................................................................................................................... 153
7.5.5.1 已装箱实例上的调用.................................................................................................................. 154
7.6 基本表达式................................................................................................................................................154
7.6.1 文本..................................................................................................................................................... 155
7.6.2 简单名称............................................................................................................................................. 155
7.6.2.1 块中的固定含义.......................................................................................................................... 156
7.6.3 带括号的表达式................................................................................................................................. 157
7.6.4 成员访问............................................................................................................................................. 157
7.6.4.1 相同的简单名称和类型名称...................................................................................................... 159
7.6.4.2 语法多义性.................................................................................................................................. 159
7.6.5 调用表达式......................................................................................................................................... 160
7.6.5.1 方法调用...................................................................................................................................... 161
7.6.5.2 扩展方法调用.............................................................................................................................. 162
7.6.5.3 委托调用...................................................................................................................................... 164
viii
版权所有 Microsoft Corporation 1999-2012 。保留所有权利。