谁应该读这本书
这本书是关于C#语言的。这通常意味着深入了解负责执行代码的运行库和支持应用程序的库的一些细节,但重点是语言本身。
这本书的目标是让你尽可能地使用C#,这样你就不必觉得自己在与之抗争。我想帮助您感觉自己精通C#,并具有以流畅的方式工作的相关含义。把C#想象成一条河,你在里面划着皮划艇。你越了解这条河,你就能越快地顺着它的水流。有时,出于某种原因,你会想向上游划水;即使如此,了解河流的移动方式也会使你更容易到达目标而不会翻船。
如果你是一个想了解更多语言的现有C#程序员,那么这本书就是为你准备的!阅读这本书不需要你是专家,但我假设你知道C#1的基础知识。我解释了我在C#1之后使用的所有术语,以及一些经常被误解的旧术语(例如参数和参数),但我假定你知道什么是类,什么是对象,等等。
如果你已经是一名专家,你可能仍然会发现这本书很有用,因为它提供了不同的思考方式,让你对已经熟悉的概念进行思考。你还可以发现你不知道的语言领域;我知道这是我写这本书的经验。
如果你对C#完全陌生,这本书可能对你还没用。有很多关于C#的入门书和在线教程。一旦你掌握了基本知识,我希望你会回到这里,并深入其中。
本书的组织方式:路线图
本书由15章组成,分为4个部分。第1部分简要介绍了该语言的历史。
- 第1章 概述了C#多年来的变化以及它仍然在变化。它将C#放到了更广泛的平台和社区环境中,并对我在本书其余部分中如何呈现材料提供了更多的细节。
第2部分描述了C#版本2到5。这实际上是本书第三版的一种重写和浓缩形式。
- 第2章 演示了C#2中引入的各种特性,包括泛型、可空值类型、匿名方法和迭代器。
- 第3章 解释了C#3的特性如何结合在一起形成LINQ。本章中最突出的特性是lambda表达式、匿名类型、对象初始化器和查询表达式。
- 第4章 描述了C#4的特性。C#4中最大的变化是引入了动态类型,但在可选参数、命名参数、泛型方差以及使用COM时减少摩擦方面还有其他变化。
- 第5章 开始介绍C#的主要特性:异步/等待。本章描述了如何使用异步/等待,但对其幕后工作方式的细节相对较少。本文还介绍了C#的后续版本中引入的异步增强功能,包括自定义任务类型和异步主方法。
- 第6章 通过深入了解编译器如何通过创建状态机处理异步方法的细节,完成了异步/等待覆盖。
- 第7章 简要讨论了C#5中除了async/await之外引入的一些特性。在完成了第6章中提供的所有细节之后,在进入本书的下一部分之前,您可以将其视为调色板清洁剂。
第3部分详细描述了C#6。
- 第8章 展示了表达式体成员,它允许您在声明非常简单的属性和方法时删除一些乏味的语法。这里也描述了对自动实现属性的改进。这一切都是关于精简源代码。
- 第9章 描述了C#6的字符串相关特性:插值字符串升数和运算符的名称。虽然这两个特性都只是生成字符串的新方法,但它们是C#6最方便的方面之一。
- 第10章 介绍了C#6的其余特性。除了帮助您编写简洁的源代码之外,这些特性没有特别常见的主题。在这里介绍的特性中,空条件运算符可能是最有用的;这是一种将可能涉及空值的表达式短路的干净方法,从而避免了可怕的NullReferenceException。
第4部分介绍了C#7(一直到C#7.3),并通过对未来的短距离观察来完成本书。
- 第11章 演示了元组与语言的集成,并描述了用于实现的ValueTuple类型家族。
- 第12章 介绍了解构和模式匹配。这两种方法都是以不同的方式查看现有值的简明方法。特别是,switch语句中的模式匹配可以简化在继承不太适合的情况下如何处理不同类型的值。
- 第13章 侧重于通过引用和相关特性。尽管从第一个版本开始,C#中就存在ref参数,但C#7引入了大量新特性,如ref返回和ref局部变量。这些主要目的是通过减少复制来提高效率。
- 第14章 用另一组小特性完成了C#7的介绍,这些特性都有助于简化代码。其中,我个人最喜欢的是本地方法、输出变量和默认文本,但也有其他小东西需要发现。
- 第15章 着眼于C#的未来。在编写本文时,我使用了C#8预览版,深入研究了可为空的引用类型、切换表达式、模式匹配增强、范围以及异步与核心语言特性的进一步集成。整个章节都是推测性的,但我希望它会激发你的好奇心。
最后,附录提供了一个方便的参考,说明在哪个版本的C#中引入了哪些特性,以及它们是否具有运行时或框架要求,这些要求限制了您可以使用它们的上下文。
我的期望是这本书将以线性方式阅读(至少是第一次)。后面的章节以前面的章节为基础,如果你试图无序阅读,你可能会遇到困难。然而,当你读过一次这本书之后,把它作为参考是非常有意义的。当你需要一些语法提示时,或者如果你发现自己比第一次阅读时更关心某个具体细节,你可能会回到某个主题。
关于代码
这本书包含了许多源代码的示例,这些示例以编号的列表形式显示,并与普通文本一致。在这两种情况下,源代码都采用这样的固定宽度字体进行格式化,以将其与普通文本分开。有时以粗体显示与本章先前步骤不同的代码,例如当新功能添加到现有代码行时。
在许多情况下,原始源代码已被重新格式化;我添加了换行符和重新调整的缩进,以适应书中可用的页面空间。在极少数情况下,列表中包含行延续标记(➥). 此外,当代码在文本中描述时,源代码中的内容通常会从列表中删除。代码注释伴随着许多清单,并突出了重要的概念。
本书中示例的源代码可从出版商网站www.manning.com/books/c-sharp-in-depth-fourth-edition下载。您需要安装.NET Core SDK(2.1.300或更高版本)来构建示例。有几个示例需要Windows桌面.NET框架(其中涉及Windows窗体或COM),但大多数都可以通过.NET核心移植。虽然我使用了Visual Studio 2017(社区版)来开发示例,但在Visual Studio代码下它们也应该很好。
图书论坛
购买《C# in Depth》第四版,包括免费访问曼宁出版社(Manning Publications)运营的私人网络论坛,在那里你可以对本书发表评论,提出技术问题,并获得作者和其他用户的帮助。要访问论坛,请转到https://forums.manning.com/forums/c-sharp-in-depth-fourth-edition.您还可以在https://forums.manning.com/forums/关于。
曼宁对读者的承诺是提供一个场所,让读者之间以及读者和作者之间进行有意义的对话。这不是提交人对任何具体参与量的承诺,提交人对论坛的贡献仍然是自愿的(且未支付)。我们建议你试着问作者一些具有挑战性的问题,以免他的兴趣分散!只要这本书还在印刷,就可以从出版商的网站访问论坛和以前讨论的档案。
其他在线资源
C#在线有很多很多资源。下面列出了我认为最有用的,但通过搜索,你会发现更多。
- Microsoft.NET文档:https://docs.microsoft.com/dotnet
- .NET API文档:https://docs.microsoft.com/dotnet/api
- C#语言设计存储库:https://github.com/dotnet/csharplang
- Roslyn存储库:https://github.com/dotnet/roslyn
- C#ECMA标准:www.ecma-international.org/publications/standards/ecma-334.htm
- 堆栈溢出:https://stackoverflow.com