C# 语言规范

C# 语言规范的 1.2 和 2.0 版是关于 C# 语法的权威资料。
它们包含该语言各个方面的详细信息,包括 Visual C# 产品文档未涉及的许多语法点。

1.2 规范讨论了在 Visual C# 2005 推出之前为该语言添加的功能,
而 2.0 规范则讨论了针对 Visual C# 2005 添加的功能。

可以从以下位置获得 Microsoft Word 格式的 C# 语言规范:

在 MSDN Online 上的位置是:
http://msdn.microsoft.com/vcsharp/programming/language/default.aspx

在 Visual Studio 中的位置是:
Microsoft Visual Studio 2005 安装目录下的 VC#\Specifications\2052\ 目录中。

有兴趣的话 可以阅读一下这个权威的参考资料
其中C#2.0版的目录如下:
----------------------
19. C# 2.0 简介 1
19.1 泛型 1
19.1.1 为什么要使用泛型? 1
19.1.2 创建和使用泛型 2
19.1.3 泛型类型实例化 3
19.1.4 约束 4
19.1.5 泛型方法 5
19.2 匿名方法 6
19.2.1 方法组转换 8
19.3 迭代器 8
19.4 分部类型 11
19.5 可空类型 12
20. 泛型 15
20.1 泛型类声明 15
20.1.1 类型形参 15
20.1.2 实例类型 16
20.1.3 基规范 17
20.1.4 泛型类的成员 17
20.1.5 泛型类中的静态字段 18
20.1.6 泛型类中的静态构造函数 18
20.1.7 访问受保护成员 19
20.1.8 泛型类中的重载 19
20.1.9 形参数组方法和类型形参 20
20.1.10 重写和泛型类 20
20.1.11 泛型类中的运算符 21
20.1.12 泛型类中的嵌套类型 22
20.1.13 应用程序入口点 23
20.2 泛型结构声明 23
20.3 泛型接口声明 23
20.3.1 所实现接口的唯一性 23
20.3.2 显式接口成员实现 24
20.4 泛型委托声明 25
20.5 构造类型 25
20.5.1 类型实参 26
20.5.2 开放和封闭类型 26
20.5.3 构造类型的基类和接口 27
20.5.4 构造类型的成员 27
20.5.5 构造类型的可访问性 28
20.5.6 转换 28
20.5.7 using 别名指令 29
20.5.8 属性 29
20.5.9 数组和泛型 IList 接口 29
20.6 泛型方法 30
20.6.1 泛型方法签名 31
20.6.2 虚泛型方法 31
20.6.3 调用泛型方法 33
20.6.4 类型实参推断 33
20.6.5 语法多义性 35
20.6.6 通过委托使用泛型方法 35
20.6.7 不能是泛型的成员 36
20.7 约束 36
20.7.1 满足约束 40
20.7.2 类型形参上的成员查找 41
20.7.3 类型形参和装箱 41
20.7.4 涉及类型形参的转换 42
20.8 表达式和语句 44
20.8.1 对象创建表达式 44
20.8.2 typeof 运算符 44
20.8.3 引用相等运算符 45
20.8.4 is 运算符 46
20.8.5 as 运算符 46
20.8.6 异常语句 46
20.8.7 lock 语句 46
20.8.8 using 语句 46
20.8.9 foreach 语句 46
20.9 查找规则的修改 47
20.9.1 命名空间和类型名称 47
20.9.2 成员查找 49
20.9.3 适用函数成员 50
20.9.4 更好的函数成员 50
20.9.5 简单名称 51
20.9.6 成员访问 52
20.9.7 方法调用 54
20.10 右移语法变化 55
21. 匿名方法 57
21.1 匿名方法表达式 57
21.2 匿名方法签名 57
21.3 匿名方法转换 57
21.4 匿名方法块 59
21.5 外层变量 59
21.5.1 捕获的外层变量 59
21.5.2 局部变量实例化 60
21.6 匿名方法计算 62
21.7 委托实例相等性 63
21.8 明确赋值 63
21.9 方法组转换 64
21.10 委托创建表达式 65
21.11 实现示例 65
22. 迭代器 69
22.1 迭代器块 69
22.1.1 枚举器接口 69
22.1.2 可枚举接口 69
22.1.3 产生类型 69
22.1.4 this 访问 70
22.2 枚举器对象 70
22.2.1 MoveNext 方法 70
22.2.2 Current 属性 71
22.2.3 Dispose 方法 71
22.3 可枚举对象 72
22.3.1 GetEnumerator 方法 72
22.4 yield 语句 72
22.4.1 明确赋值 74
22.5 实现示例 74
23. 分部类型 81
23.1 分部声明 81
23.1.1 属性 81
23.1.2 修饰符 82
23.1.3 类型参数和约束 82
23.1.4 基类 82
23.1.5 基接口 83
23.1.6 成员 83
23.2 名称绑定 84
24. 可空类型 85
24.1 可空类型 85
24.1.1 成员 85
24.1.2 默认值 86
24.1.3 值类型约束 86
24.2 转换 86
24.2.1 null 文本转换 86
24.2.2 可空转换 86
24.2.3 装箱和取消装箱转换 87
24.2.4 允许的用户定义转换 87
24.2.5 用户定义转换的计算 88
24.2.6 提升的转换 88
24.2.7 用户定义的隐式转换 88
24.2.8 用户定义的显式转换 89
24.3 表达式 90
24.3.1 提升运算符 90
24.3.2 允许的用户定义运算符 91
24.3.3 运算符重载解析 91
24.3.4 相等操作符和空 91
24.3.5 is 运算符 91
24.3.6 as 运算符 92
24.3.7 复合赋值 92
24.3.8 bool? 类型 92
24.3.9 空合并运算符 93
25. 其他功能 95
25.1 属性访问器的可访问性 95
25.1.1 访问器声明 95
25.1.2 访问器的使用 96
25.1.3 重写和接口实现 97
25.2 静态类 97
25.2.1 静态类声明 97
25.2.2 引用静态类类型 98
25.3 命名空间别名限定符 98
25.3.1 限定的别名成员 100
25.3.2 别名的唯一性 101
25.4 Extern 别名 102
25.4.1 Extern 别名指令 103
25.5 Pragma 指令 104
25.5.1 Pragma warning 105
25.6 默认值表达式 105
25.7 条件属性类 106
25.8 固定大小缓冲区 107
25.8.1 固定大小缓冲区的声明 107
25.8.2 表达式中的固定大小缓冲区 108
25.8.3 Fixed 语句 109
25.8.4 明确赋值检查 109

原文地址:https://www.cnblogs.com/freeliver54/p/635029.html