首页>参考读物>计算机科学与技术>软件与程序设计

C#程序设计语言(原书第4版)
作者 : (美) Anders Hejlsberg;Mads Torgersen;Scott Wiltamuth;Peter Golde 著
译者 : 陈宝国 黄俊莲 马燕新 译
丛书名 : 计算机科学丛书
出版日期 : 2011-07-21
ISBN : 978-7-111-34778-1
定价 : 99.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 573
开本 : 16
原书名 : The C# Programming Language
原出版社: Pearson Education Asia
属性分类: 店面
包含CD :
绝版 : 未绝版
图书简介

C#语言结合了快速应用开发语言的高效和C/C++语言的强大。C# 4.0是对C# 3.0的进一步完善和扩展,它在C# 3.0的语法糖之外又引入了以动态语言为主的新特色。本书由C#的缔造者Anders Hejlsberg和他的同事们合著,全部内容都更新到了C# 4.0版。本书提供了C# 4.0语言完整的规格说明、参考资料、范例代码和来自9位卓越的C#大师的详细注解。这些注解所达到的深度和广度是很难在其他书中找到的。本书的正文介绍了C#的概念,而这些恰到好处的注解则解释了为什么这些特性是重要的,应该怎么使用它们,它们和其他语言的关系是什么,甚至它们是如何进化而来的。
对任何希望深入理解C#的程序员来说,这本书都是不容错过的参考经典。

图书特色

C#程序设计语言(原书第4版)
The C# Programming Language Fourth Edition
(美) Anders Hejlsberg  Mads Torgersen
Scott Wiltamuth   Peter Golde    著 陈宝国 黄俊莲 马燕新 译

据我的经验,我敢说每个程序员在读本书的时候都至少会有一次“啊,原来如此”的感叹,它能让你的编程水平更上一层楼。
 —— 选自Don Box的序言
本书为.NET专业开发人员提供了很好的参考。它涵盖了所有基础知识,从专家观点到参考,再到用法。本书是想要扩充知识和专业技能的开发人员的重要参考读物。
 —— John Montgomery,微软开发部首席团队经理

C#语言结合了快速应用开发语言的高效和C/C++语言的强大。本书全部内容更新到C# 4.0版,提供了C# 4.0语言的完整规范、参考资料、范例代码和来自12位卓越的C#大师的详细注解。这些注解所达到的深度和广度在其他书中难得一见。C# 4.0新添加动态绑定、命名和可选参数以及协变和逆变泛型等特性,恰到好处的注解解释了这些特性的重要性、使用方法、与其他语言的关系等。
对任何希望深入理解C#的程序员来说,本书都是不容错过的经典书籍。

作者简介
Anders Hejlsberg 是编程界的传奇人物。他是C#语言的架构师,同时也是微软技术专家。
Mads Torgersen 是微软C#的项目经理,负责日常语言设计工作以及维护C#语言的规范。
Scott Wiltamuth 是Visual Studio Professional团队的合作项目主管。他在微软参与过OLE Automation、Visual Basic、VBScript、JScript、Visual J++和Visual C#等开发工具的开发工作。
Peter Golde 作为微软在ECMA委员会(这个委员会负责C#的标准化工作)的主要代表,领导实现了编译器并参与了C#语言的设计工作。

图书前言

C#项目始于12年前的1998年12月,当初的目标是要为全新的(还未命名的).NET平台创建一种简单、现代化、面向对象和类型安全的编程语言。一路走来,C#也算是历经坎坷。现在这门语言已经拥有超过一百万的程序员,发布了4个版本,其中每一个版本都加入了许多重要的新特性。
  本书也同样出到了第4版。它提供了C#编程语言的完整技术规范,而且有两点内容是前几版没有的。当然,最显著的就是它涵盖了C# 4.0的新特性,包括动态绑定、指定和可选参数以及协变(covariant)与逆变(contravariant)泛型。这一版修订的主要目的是加强C#与.NET环境外部的对象之间的交互。C# 3.0中的LINQ使得用来访问外部数据源的代码的语言集成度更高,与之相比,C# 4.0的动态绑定使得C#与那些来自动态编程语言(例如Python、Ruby和JavaScript)的对象之间的交互更加自然,就好像是在与C#的本地对象进行交互一样。
  在本书的前一版中,一些著名的C#专家提供了大量的注解。我们不断收到这方面的积极反馈,而且也很高兴在这一版中融入了一些新的和原来的注解者提供的新一轮更深入、更有趣的见解、指导、背景和观点。我们也非常高兴地看到这些注解和本书的核心内容相辅相成,让C#的特性跃然纸上。
  创建C#语言是很多人共同努力的结果。C# 1.0的设计团队由Anders Hejlsberg、Scott Wiltamuth、Peter Golde、Peter Sollich和Eric Gunnerson组成。而C# 2.0团队的成员有Anders Hejlsberg、Peter Golde、Peter Hallam、Shon Katzenberger、Todd Proebsting和Anson Horton。
  此外,C#和.NET公共语言运行时(Common Language Runtime)中泛型的设计和实现是基于微软研究院里Don Syme和Andrew Kennedy构建的“Gyro”原型之上。C# 3.0则是由Anders Hejlsberg、Erik Meijer、Matt Warren、Mads Torgersen、Peter Hallam和Dinesh Kulkarni负责设计。C# 4.0的设计团队则由Anders Hejlsberg、Matt Warren、Mads Torgersen、Eric Lippert、Jim Hugunin、Lucian Wischik和Neal Gafter组成。
  要感谢所有影响了C#设计的人是不可能的,尽管如此我们还是要感谢你们。闭门造车是不会有好设计的,所以来自庞大和热情的程序员社区的意见和建议都是无价的。
  C#是(并将继续是)我们工作过的最有挑战性和最令人振奋的项目之一。希望你们用得开心,我们也做得高兴。

Anders Hejlsberg
Mads Torgersen
Scott Wiltamuth
西雅图,华盛顿
2010年9月

上架指导

计算机\程序设计

封底文字

“据我的经验,我敢说每个程序员在读这本书的时候都至少会有一次‘啊,原来如此’的感叹,它能让你的编程水平更上一层楼。”
——选自Don Box为本书所做的序

C#语言结合了快速应用开发语言的高效和C/C++语言的强大。现在C# 4.0又加入了动态绑定、命名和可选参数以及协变和逆变泛型等新特性,这些特性把C#语言提升到了一个新的层次上,使程序的编写更简洁,不再依赖于静态类型定义。这使得C#与动态编程语言(例如Python、Rudy和JavaScript)的交互更自然,就好像这些语言中的对象都是C#的本地对象一样。本书正是C# 4.0的权威技术指南。

本书由C#语言的架构师Anders Hejlsberg和他的同事们Mads Torgersen、Scott Wiltamuth和Peter Golde等合著,全部内容都更新到了C# 4.0版。本书提供了C# 4.0语言完整的规范、参考资料、范例代码和来自12位卓越的C#大师的详细注解。

这些注解所达到的深度和广度在其他书中难得一见。本书的正文介绍了C#的概念,而这些恰到好处的注解则解释了为什么这些特性是重要的,应该怎么使用它们,它们和其他语言的关系是什么,甚至它们是如何演化而来的。

对任何希望深入理解C#的程序员来说,这本书都是不容错过的经典书籍。
本书的注解者包括:Brad Abrams、Joseph Albahari、Krzysztof Cwalina、Jesse Liberty、Eric Lippert、Christian Nagel、Vladimir Reshetnikov、Marek Safar、Chris Sells、Peter Sestoft、Jon Skeet和Bill Wagner。

本系列丛书由微软核心技术的领导者和首席权威专家们创作并提供支持,它的作者阵容由业内最权威的作者和微软及开发社区中的首席软件架构师和程序员组成。
——Don Box
  微软卓越的工程师
本书为.NET专业开发人员提供了很好的参考。它涵盖了所有基础知识,从专家观点到参考,再到用法,应有尽有。本系列丛书是那些想要明智地扩充知识和专业技能的开发人员的重要参考读物。
——John Montgomery
  微软开发部首席团队经理

图书序言

自2000年夏.NET发布以来,已经过去十个年头了。在我看来,当时.NET最重要的两点就是结合了托管代码的本地执行和用于程序之间通信的XML消息机制。然而那个时候我还没有意识到C#会变得那么重要。
  C#从一开始就是程序员理解和使用.NET的主要方式。如果你问一个普通的.NET程序员,一个值类型和一个引用类型的区别是什么,他会不假思索地回答 “结构和类的区别”,而不会回答“一个是从System.ValueType继承的类型,而另一个不是从System.ValueType继承的类型”。原因何在?因为我们都是用语言,而不是通过API来和运行时(更重要的是,和其他人)交流想法和意图的。
  如果没有一门出色的语言,一个平台要想成功是不可能的。C#最初就为人们如何看待.NET打下了坚实的基础。随着.NET的不断发展,C#的重要性也与日俱增,诸如迭代器和真正的闭包(也称为匿名方法),都是用C#编译器实现的纯语言特性,而不是平台自带的特性。C# 3.0的发布更意味着C#成为了.NET不断创新的主角,它引入了标准化的查询操作符,简洁的lambda表达式、扩展方法,以及在运行时访问表达式树的能力,而这些都是通过语言和编译器的开发实现的。C# 4.0最重要的特性(动态调用)也主要是语言和编译器的特性,而不是对CLR自身的改进。
  说到C#就一定会提到它的缔造者Anders Hejlsberg,他像一位牧羊人一样坚守着他创造的这门语言。我非常荣幸地在C# 3.0设计阶段连续好几个月参加了C#的设计会议,Anders的工作让我大开眼界。他有着出色的天赋,深谙程序员喜欢什么和不喜欢什么,同时他又能和设计团队紧密合作,并最终获得最佳的设计方案。
  特别是在C# 3.0上,在从函数式语言社区获取灵感并将它们带给广大开发者的过程中,Anders展现出了无与伦比的能力,要知道这绝对不是一件容易的事情。Guy Steele曾经在谈论Java时说道:“我们没打算要吸引Lisp程序员,我们的目标是C++程序员。我们成功地把他们从转向Lisp的路上吸引过来。”当我看到C# 3.0的时候,我就知道C#已经至少获得了一名C++程序员(就是我自己啦)的青睐。C# 4.0向着Lisp(以及JavaScript、Ptython、Ruby等)又靠近了一步,它增加了在不依赖静态类型定义的情况下编写程序的能力。
  虽然C#很出色,但是为了理解它的精妙之处,并确保所有人都使用一个一致的C#,我们还是需要有一个参考文档—一个用自然语言(也就是英语)写成的并遵守一种统一范式(BNF范式)的文档。而你手中的这本书正是这样的一份文档。根据我的经验,我敢说每个.NET程序员在读本书时都至少会有一次“啊,原来如此”的感叹,它能让你的专业水平更上一层楼。
  请享受阅读本书所带来的快乐吧。

Don Box
雷德蒙,华盛顿
2010年5月

作者简介

(美) Anders Hejlsberg;Mads Torgersen;Scott Wiltamuth;Peter Golde 著:Anders Hejlsberg是编程界的传奇人物。他是C#语言的架构师,同时也是微软技术专家。他在1996年加入微软,之前13年的职业生涯则是在Borland度过,他曾经是Delphi和Turbo Pascal的首席架构师。 Mads Torgersen是微软C#的项目经理,负责日常语言设计工作以及维护C#语言的规范。 Scott Wiltamuth是Visual Studio Professional团队的合作项目主管。他在微软参与过很多开发工具的工作,包括OLE Automation、Visual Basic、Visual Basic for Applications、VBScript、Jscript、Visual J++和Visual C#。 Peter Golde是最初的Microsoft C#编译器的首席程序员。他作为微软在ECMA委员会(这个委员会负责了C#的标准化工作)的主要代表,领导实现了编译器并参与了语言的设计工作。他目前在微软公司是负责编译器的架构师。

译者简介

陈宝国 黄俊莲 马燕新 译:暂无简介

译者序

C#一直是程序员使用.NET的主要方式。如果离开了C#,.NET平台的强大也就无从谈起了,想要获得哪怕是今天一半的成功,可能也是根本没有希望的。C#从一开始就把.NET提升到了一个非常高的成功起点上。随着.NET的不断发展,C#的重要性也与日俱增。在共同发展的过程中,C#也开发出了大量优秀的与平台无关的语言特性,从而与.NET平台自身的创新交相辉映,成为一对最佳拍档。
  C# 4.0是对C# 3.0的进一步完善和扩展,它在C# 3.0的基础上又引入了以动态语言为主的新特色,例如,C#4.0加入了dynamic关键字,可以将变量的static类型声明为dynamic,虽然名为dynamic,但它还属于一种静态类型,而把静态类型声明为dynamic之后,该类型的操作就只会在运行时进行解析,我们从中不难看出JavaScript的身影,这也标志着它离动态语言又近了一步,使得开发人员的编程效率得到进一步提高。这说明,虽然C#从本质上说仍然属于一种静态语言,但是对象的意义已经不再是纯粹的静态对象了,它们开始有了动态特征,这既体现在它们的结构上,也体现在它们的行为上,至少从编译器的角度来看是这样的。
  本书无疑是讲解C# 4.0的经典之作,我想这一点各位读者早就赞同了,无须我再赘述。本书还有一大特色就是贯穿全书的注解,正如Don Box所说“每个.NET程序员在读这本书的时候都至少会有一次‘啊,原来如此’的感叹”,而我发现这些注解是引起我发出这样的感叹最多的地方。在本书中,各位C#专家提供了新一轮更深入的见解,堪称点睛之笔。
  本书由黄俊莲、陈宝国、马燕新翻译完成。由于译者水平有限,在翻译过程中难免会有一些错误,恳请读者批评指正。

译  者
2011年4月

图书目录

译者序
序言
前言
作者简介

第1章  介绍 1
1.1  Hello,World 2
1.2  程序结构 3
1.3  类型和变量 5
1.4  表达式 9
1.5  语句 10
1.6  类和对象 14
1.6.1  成员 15
1.6.2  访问控制 16
1.6.3  类型参数 16
1.6.4  基类 17
1.6.5  字段 18
1.6.6  方法 19
1.6.7  其他函数成员 28
1.7  结构 35
1.8  数组 37
1.9  接口 39
1.10  枚举 40
1.11  委托 42
1.12  特性 43
第2章  词法结构 45
2.1  程序 45
2.2  文法 45
2.2.1  文法表示法 45
2.2.2  词法文法 46
2.2.3  语法文法 46
2.3  词法分析 46
2.3.1  行终结符 47
2.3.2  注释 47
2.3.3  空白符 48
2.4  标记 49
2.4.1  Unicode字符转义序列 49
2.4.2  标识符 50
2.4.3  关键字 51
2.4.4  字面量 52
2.4.5  操作符和标点符号 57
2.5  预处理指令 58
2.5.1  条件编译符号 59
2.5.2  预处理表达式 59
2.5.3  声明指令 60
2.5.4  条件编译指令 61
2.5.5  诊断指令 63
2.5.6  区域指令 64
2.5.7  行指令 64
2.5.8  编译指示指令 65
第3章  基本概念 67
3.1  应用程序起始 67
3.2  应用程序终止 68
3.3  声明 68
3.4  成员 70
3.4.1  命名空间成员 71
3.4.2  结构成员 71
3.4.3  枚举成员 71
3.4.4  类成员 71
3.4.5  接口成员 72
3.4.6  数组成员 72
3.4.7  委托成员 72
3.5  成员访问 72
3.5.1  声明可访问性 72
3.5.2  可访问域 74
3.5.3  实例成员的保护访问 76
3.5.4  访问限制 78
3.6  签名和重载 79
3.7  作用域 80
3.7.1  名字隐藏 83
3.8  命名空间和类型名 85
3.8.1  完全限定名 87
3.9  自动化内存管理 88
3.10  执行顺序 92
第4章  类型 93
4.1  值类型 93
4.1.1  System.ValueType类型 94
4.1.2  默认构造函数 94
4.1.3  构造类型 95
4.1.4  简单类型 95
4.1.5  整数类型 96
4.1.6  浮点数类型 98
4.1.7  decimal类型 99
4.1.8  bool类型 100
4.1.9  枚举类型 101
4.1.10  可空值类型 101
4.2  引用类型 101
4.2.1  类类型 102
4.2.2  object类型 102
4.2.3  dynamic类型 103
4.2.4  string类型 103
4.2.5  接口类型 103
4.2.6  数组类型 103
4.2.7  委托类型 103
4.3  装箱和拆箱 103
4.3.1  装箱转换 104
4.3.2  拆箱转换 105
4.4  构造类型 107
4.4.1  类型实参 107
4.4.2  开放式和封闭式类型 108
4.4.3  绑定和未绑定类型 108
4.4.4  满足限制 108
4.5  类型参数 109
4.6  表达式树类型 110
4.7  dynamic类型 110
第5章  变量 112
5.1  变量类别 112
5.1.1  静态变量 113
5.1.2  实例变量 113
5.1.3  数组元素 113
5.1.4  值参数 113
5.1.5  引用参数 114
5.1.6  输出参数 114
5.1.7  局部变量 115
5.2  默认值 116
5.3  明确赋值 116
5.3.1  初始赋值的变量 117
5.3.2  未赋初值的变量 117
5.3.3  确定明确赋值的精确规则 117
5.4  变量引用 126
5.5  变量引用的原子性 127
第6章  转换 128
6.1  隐式转换 128
6.1.1  标识转换 129
6.1.2  隐式数字转换 129
6.1.3  隐式枚举转换 129
6.1.4  隐式可空值转换 130
6.1.5  null字面量转换 130
6.1.6  隐式引用转换 130
6.1.7  装箱转换 132
6.1.8  隐式动态转换 132
6.1.9  隐式常量表达式转换 133
6.1.10  带类型参数的隐式转换 133
6.1.11  自定义隐式转换 134
6.1.12  匿名函数转换和方法组转换 134
6.2  显式转换 134
6.2.1  显式数字转换 134
6.2.2  显式枚举转换 136
6.2.3  显式可空值转换 136
6.2.4  显式引用转换 136
6.2.5  拆箱转换 138
6.2.6  显式动态转换 138
6.2.7  带类型参数的显式转换 138
6.2.8  自定义显式转换 140
6.3  标准转换 140
6.3.1  标准隐式转换 140
6.3.2  标准显式转换 140
6.4  自定义转换 140
6.4.1  允许的自定义转换 141
6.4.2  提升转换操作符 141
6.4.3  自定义转换的计算 141
6.4.4  自定义隐式转换 142
6.4.5  自定义显式转换 143
6.5  匿名函数转换 144
6.5.1  匿名函数到委托类型转换的计算 145
6.5.2  匿名函数到表达式树类型转换的计算 146
6.5.3  实现举例 146
6.6  方法组转换 149
第7章  表达式 152
7.1  表达式分类 152
7.1.1  表达式的值 153
7.2  静态和动态绑定 153
7.2.1  绑定期 154
7.2.2  动态绑定 155
7.2.3  组成表达式的类型 155
7.3  操作符 156
7.3.1  操作符优先级和结合性 156
7.3.2  操作符重载 157
7.3.3  一元操作符重载决策 159
7.3.4  二元操作符重载决策 159
7.3.5  候选自定义操作符 159
7.3.6  数字提升 160
7.3.7  提升操作符 161
7.4  成员查找 162
7.4.1  基础类型 163
7.5  函数成员 164
7.5.1  参数列表 165
7.5.2  类型推导 168
7.5.3  重载决策 175
7.5.4  动态重载决策的编译期检查 179
7.5.5  函数成员调用 179
7.6  基础表达式 180
7.6.1  字面量 181
7.6.2  简单名字 181
7.6.3  括号表达式 183
7.6.4  成员访问 183
7.6.5  调用表达式 187
7.6.6  元素访问 193
7.6.7  this访问 195
7.6.8  base访问 196
7.6.9  后缀递增和递减操作符 196
7.6.10  new操作符 197
7.6.11  typeof操作符 207
7.6.12  checked和unchecked操作符 209
7.6.13  默认值表达式 211
7.6.14  匿名方法表达式 212
7.7  一元操作符 212
7.7.1  一元加号操作符 212
7.7.2  一元减号操作符 213
7.7.3  逻辑否操作符 213
7.7.4  按位求补操作符 213
7.7.5  前缀递增和递减操作符 214
7.7.6  转换表达式 215
7.8  算术操作符 216
7.8.1  乘法操作符 216
7.8.2  除法操作符 217
7.8.3  求余操作符 218
7.8.4  加法操作符 220
7.8.5  减法操作符 221
7.9  移位操作符 223
7.10  关系和类型测试操作符 224
7.10.1  整数比较操作符 225
7.10.2  浮点数比较操作符 226
7.10.3  小数比较操作符 227
7.10.4  布尔值相等操作符 227
7.10.5  枚举比较操作符 227
7.10.6  引用类型相等操作符 227
7.10.7  字符串相等操作符 229
7.10.8  委托相等操作符 229
7.10.9  相等操作符和null 230
7.10.10  is操作符 230
7.10.11  as操作符 230
7.11  逻辑操作符 232
7.11.1  整数逻辑操作符 233
7.11.2  枚举逻辑操作符 233
7.11.3  布尔逻辑操作符 233
7.11.4  可空值布尔逻辑操作符 233
7.12  条件逻辑操作符 234
7.12.1  布尔条件逻辑操作符 234
7.12.2  用户自定义条件逻辑操作符 235
7.13  Null拼接操作符 235
7.14  条件操作符 236
7.15  匿名函数表达式 238
7.15.1  匿名函数签名 239
7.15.2  匿名函数主体 240
7.15.3  重载决策 240
7.15.4  匿名函数和动态绑定 241
7.15.5  外部变量 241
7.15.6  匿名函数表达式的计算 244
7.16  查询表达式 245
7.16.1  查询表达式里的歧义 246
7.16.2  查询表达式翻译 247
7.16.3  查询表达式模式 254
7.17  赋值操作符 256
7.17.1  简单赋值 256
7.17.2  组合赋值 259
7.17.3  事件赋值 260
7.18  表达式 260
7.19  常量表达式 260
7.20  布尔表达式 261
第8章  语句 263
8.1  终点和可及性 263
8.2  块 265
8.2.1  语句列表 265
8.3  空语句 266
8.4  标签语句 267
8.5  声明语句 268
8.5.1  局部变量声明 268
8.5.2  局部常量声明 271
8.6  表达式语句 271
8.7  选择语句 272
8.7.1  if语句 272
8.7.2  switch语句 273
8.8  迭代语句 276
8.8.1  while语句 277
8.8.2  do语句 277
8.8.3  for语句 278
8.8.4  foreach语句 279
8.9  跳转语句 283
8.9.1  break语句 284
8.9.2  continue语句 284
8.9.3  goto语句 285
8.9.4  return语句 286
8.9.5  throw语句 287
8.10  try语句 288
8.11  checked和unchecked语句 291
8.12  lock语句 292
8.13  using语句 293
8.14  yield语句 296
第9章  命名空间 299
9.1  编译单元 299
9.2  命名空间声明 300
9.3  Extern别名 301
9.4  using指令 301
9.4.1  using别名指令 302
9.4.2  using命名空间指令 305
9.5  命名空间成员 306
9.6  类型声明 307
9.7  命名空间别名限定符 307
9.7.1  别名的惟一性 308
第10章  类 310
10.1  类声明 310
10.1.1  类修饰符 310
10.1.2  partial修饰符 312
10.1.3  类型形参 313
10.1.4  类基础规范 313
10.1.5  类型形参限制 315
10.1.6  类主体 320
10.2  局部类型 320
10.2.1  特性 321
10.2.2  修饰符 321
10.2.3  类型形参和限制 321
10.2.4  基类 322
10.2.5  基础接口 322
10.2.6  成员 322
10.2.7  局部方法 323
10.2.8  名字绑定 326
10.3  类成员 327
10.3.1  实例类型 328
10.3.2  构造类型的成员 328
10.3.3  继承 330
10.3.4  new修饰符 331
10.3.5  访问修饰符 331
10.3.6  组成类型 331
10.3.7  静态成员和实例成员 331
10.3.8  嵌套类型 332
10.3.9  保留成员名 337
10.4  常量 338
10.5  字段 340
10.5.1  静态字段和实例字段 341
10.5.2  只读字段 342
10.5.3  易失字段 344
10.5.4  字段初始化 345
10.5.5  变量初始化语句 346
10.6  方法 348
10.6.1  方法形参 350
10.6.2  静态方法和实例方法 356
10.6.3  虚拟方法 356
10.6.4  重写方法 359
10.6.5  密封方法 361
10.6.6  抽象方法 362
10.6.7  外部方法 363
10.6.8  局部方法 364
10.6.9  扩展方法 364
10.6.10  方法主体 365
10.6.11  方法重载 366
10.7  属性 366
10.7.1  静态属性和实例属性 367
10.7.2  访问器 367
10.7.3  自动实现的属性 372
10.7.4  可访问性 373
10.7.5  虚拟、密封、重写和抽象访问器 375
10.8  事件 376
10.8.1  类似字段的事件 378
10.8.2  事件访问器 380
10.8.3  静态事件和实例事件 381
10.8.4  虚拟、密封、重写和抽象访问器 381
10.9  索引 381
10.9.1  索引重载 385
10.10  操作符 385
10.10.1  一元操作符 386
10.10.2  二元操作符 387
10.10.3  转换操作符 388
10.11  实例构造函数 390
10.11.1  构造函数初始化语句 391
10.11.2  实例变量初始化语句 392
10.11.3  构造函数的执行 392
10.11.4  默认构造函数 394
10.11.5  私有构造函数 395
10.11.6  可选的实例构造函数参数 395
10.12  静态构造函数 396
10.13  析构函数 398
10.14  迭代器 400
10.14.1  枚举器接口 400
10.14.2  可枚举接口 400
10.14.3  yield类型 400
10.14.4  计数对象 400
10.14.5  枚举对象 402
10.14.6  实现举例 403
第11章  结构 410
11.1  结构声明 410
11.1.1  结构修饰符 411
11.1.2  partial修饰符 411
11.1.3  结构接口 411
11.1.4  结构主体 411
11.2  结构成员 411
11.3  类和结构的区别 412
11.3.1  值语义 412
11.3.2  继承 413
11.3.3  赋值 413
11.3.4  默认值 414
11.3.5  装箱和拆箱 414
11.3.6  this的含义 416
11.3.7  字段初始化语句 417
11.3.8  构造函数 417
11.3.9  析构函数 418
11.3.10  静态构造函数 418
11.4  结构举例 419
11.4.1  数据库整数类型 419
11.4.2  数据库布尔类型 421
第12章  数组 424
12.1  数组类型 424
12.1.1  System.Array类型 425
12.1.2  数组和泛型IList接口 425
12.2  数组创建 426
12.3  数组元素访问 426
12.4  数组成员 426
12.5  数组协变 426
12.6  数组初始化语句 427
第13章  接口 430
13.1  接口声明 430
13.1.1  接口修饰符 430
13.1.2  partial修饰符 431
13.1.3  可变类型形参列表 431
13.1.4  基础接口 432
13.1.5  接口主体 434
13.2  接口成员 434
13.2.1  接口方法 435
13.2.2  接口属性 435
13.2.3  接口事件 436
13.2.4  接口索引 436
13.2.5  接口成员访问 436
13.3  完全限定接口成员名 438
13.4  接口实现 439
13.4.1  显式接口成员实现 440
13.4.2  实现接口的惟一性 442
13.4.3  泛型方法的实现 443
13.4.4  接口映射 444
13.4.5  接口实现继承 447
13.4.6  重新实现接口 448
13.4.7  抽象类和接口 450
第14章  枚举 451
14.1  枚举声明 451
14.2  枚举修饰符 452
14.3  枚举成员 452
14.4  System.Enum类型 454
14.5  枚举值和操作 454
第15章  委托 456
15.1  委托声明 456
15.2  委托兼容性 459
15.3  委托实例化 459
15.4  委托调用 460
第16章  异常 463
16.1  异常产生的原因 464
16.2  System.Exception类 464
16.3  异常是如何处理的 464
16.4  常见的异常类 465
第17章  特性 467
17.1  特性类 467
17.1.1  特性的用法 467
17.1.2  位置和命名参数 469
17.1.3  特性参数类型 470
17.2  特性规范 470
17.3  特性实例 475
17.3.1  特性的编译 475
17.3.2  在运行时获取一个特性实例 475
17.4  保留特性 476
17.4.1  AttributeUsage特性 476
17.4.2  Conditional特性 477
17.4.3  Obsolete特性 480
17.5  用于互操作的特性 481
17.5.1  与COM以及Win32组件互操作 481
17.5.2  与其他.NET语言互操作 482
第18章  不安全的代码 483
18.1  不安全的上下文 483
18.2  指针类型 485
18.3  固定变量和可移动变量 488
18.4  指针转换 488
18.4.1  指针数组 490
18.5  表达式里的指针 490
18.5.1  指针间接寻址 491
18.5.2  指针成员访问 491
18.5.3  指针元素访问 492
18.5.4  取地址操作符 493
18.5.5  指针递增和递减 494
18.5.6  指针算术 494
18.5.7  指针比较 495
18.5.8  sizeof操作符 495
18.6  fixed语句 496
18.7  定长缓冲区 500
18.7.1  定长缓冲区声明 500
18.7.2  表达式里的定长缓冲区 501
18.7.3  明确赋值检查 502
18.8  栈分配 502
18.9  动态内存分配 503
附录A  文档注释 506
附录B  文法 526
附录C  参考 560

教学资源推荐
作者: (美)Robert W.Sebesta
作者: [英] 约翰·M. 斯图尔特(John M. Stewart) 著
作者: 施霞萍 王瑾德 史建成 马可幸 编著
参考读物推荐
作者: 列旭松 陈文 著
作者: 快学习教育 编著
作者: 陆凌牛 著
作者: 高彦杰 倪亚宇 著