C# 7.0是Microsoft对其旗舰编程语言的第六次重大升级,这次升级大大提高了C#语言的功能和灵活性。一方面,它提供了一些高级的抽象,例如查询表达式和异步延续;另一方面,它允许通过自定义值类型和可选的指针结构进行底层的效率优化。
C#语言特性的增长也极大地加重了我们的学习负担。虽然一些工具如Microsoft IntelliSense和在线参考文档可以为工作提供诸多便利,但若要使用它们仍需要一些现有的概念和知识体系作为支撑。本书以简明统一的方式(而非烦琐冗长的介绍)准确阐释了这些知识。
与之前的四个版本一样,本书也是围绕概念和用例来进行组织的。因此无论是顺序阅读还是随意浏览都大有裨益。虽然本书只要求读者具备基本的背景知识,但是它仍然有一定的深度,比较适合中高级读者阅读。
本书内容涵盖C#语言、CLR和Framework核心程序集。我们之所以做出这样的选择是希望为一些难以理解的主题,例如并发、安全性以及应用程序域留出足够的篇幅,而同时又不对内容的深度和可读性造成显著的影响。本书详细标记了C# 6和C# 7以及相关的Framework新特性。因此本书亦可同时作为C# 5和C# 6的参考资料。
目标读者
本书主要针对中高级开发人员。本书不要求读者具备C#知识,但需要读者具备一定的通用编程经验。对于初学者,本书适合作为教材以外的补充书籍,而非替代编程教材。
本书非常适合与那些着眼于介绍具体技术的书籍配合阅读,例如ASP.NET、WPF、UWP或WCF。因为那些书籍往往会省略语言和.NET Framework方面的内容,而这些内容正是本书的重点。反之亦然。
本书并不会详细介绍每一种.NET Framework技术。本书亦不适合关心特定领域(例如移动端设备开发) API使用方式的读者。
本书的结构
本书前三章将集中介绍C#语言。首先介绍最基本的语法、类型和变量。而后会介绍一些高级的特性,如不安全代码以及预处理指令。如果你是C#语言的初学者,请循序渐进地阅读这些章节。
其余各章则涵盖了.NET Framework的核心功能,包括LINQ、XML、集合、并发、I/O
和网络、内存管理、反射、动态编程、特性、安全、应用程序域和原生互操作性等主题。第6章和第7章是后续主题的基础,除这两章之外,其余各章可以按照需要以任何顺序阅读。LINQ相关的三个章节最好按顺序阅读。其中的一些章节需要一些并发相关的知识,这些知识将在第14章中介绍。
使用本书所需的其他材料
运行本书中的示例需要C# 7.0编译器并安装.NET Framework 4.6/4.7。此外,还可以使用Microsoft的.NET在线文档查找每一个具体类型及成员的信息。
虽然可以在记事本中书写代码,并从命令行中执行编译过程,但是为了提高效率,最好使用一个代码编辑器随时测试各个代码片段。并使用集成开发环境(Integrated Development Environment, IDE)来生成可执行文件或程序库。
我们推荐从www.linqpad.net下载免费的LINQPad 5作为代码编辑器。LINQPad完全支持C# 7.0,且该软件就是由本书的作者之一维护的。
我们建议下载Microsoft Visual Studio 2017作为集成开发环境。除了免费的Express版本之外,其余的任何一种版本都能够运行本书所有的示例。译注1
LINQPad中包含了本书第2章到第10章中的所有示例代码。除此之外,还包含了并发编程、并行编程、动态编程的交互性(可编辑)示例。如需下载所有的示例,请在LINQPad底部左侧的“Samples”选项卡中点击“Download more samples”按钮,并选择“C# 7.0 in a Nutshell”。
排版约定
本书使用基本的UML符号来说明类型之间的关系。如图P-1所示。其中斜矩形代表抽象类;圆形代表接口。带有空心箭头的线段代表继承,其中箭头指向的类型是基类型。带有实心箭头的线条代表单向关联;而不带箭头的线段代表双向关联。
图P-1:示例图
本书还遵循以下排版约定:
斜体(Italic):表示新的术语、URI、目录和文件名。
等宽字体(Constant width):表示C#代码、关键字和标识符,以及应用程序的输出。
等宽粗体(Constant width bold):代表代码中的重点部分。
等宽斜体(Constant width italic):代表可由用户输入替换的文本。
该图标表示提示、建议或者一般注解。
该图标代表一个警告或易错点。
使用示例代码
本书的作用是帮助读者完成工作。一般而言,您可以在应用程序或者文档中直接使用本书中的代码。除非需要复制大量的代码,否则无须经过我们的授权。例如,引用本书的多个示例来编写程序无须任何授权。但销售含有O’Reilly书籍示例的CD-ROM则必须获得授权。在回答问题时引用本书及其示例代码也无须授权,但若在您的产品文档中大量使用本书中的示例代码则需要经过授权。
我们希望您标注引文的出处(例如:C# 7.0 in a Nutshell, by Joseph Albahari and Ben Albahari (O’Reilly) Copyright 2018, Joseph Albahari, Ben Albahari, 978-1-491-98765-0),但并不做强制要求。
如果您认为您使用代码示例的方式有可能需要获得授权,请随时与我们取得联系:permissions@oreilly.com。
Safari在线电子书
Safari(前身为Safari Books Online)是一个会员制的培训及参考资料平台。该平台的用户涵盖了企业、政府、教育工作者和个人用户。
会员可以访问来自250家出版商的书籍、培训视频、学习路径、交互式教程和精心策划的播放列表,包括O’Reill Media、Harvard Business Review、Prentice Hall Professional、Addison-Wesley Processional、Microsoft Press、Sams、Que、Peachpit Press、Adobe、Focal Press、Cisco Press、John Wiley & Sons、Syngress、Morgan Kaufmann、IBM Redbooks、Packt、Adobe Press、FT Press、Apress、Manning、New Riders、McGraw-Hill、Jones & Bartlett以及Course Technology等。
如需了解更多信息,请访问http://oreilly.com/safari。
如何联系我们
若您对本书有任何意见或疑问,请按照以下地址联系本书发行商:
美国:
O’Reilly Media, Inc.
1005 Gravenstein Highway North
Sebastopol, CA 95472
中国:
北京市西城区西直门南大街2号成铭大厦C座807室(100035)
奥莱利技术咨询(北京)有限公司
您可以访问http://bit.ly/c-sharp7_nutshell获得本书的勘误、示例以及其他信息。
如需获得示例代码以及其他相关资源,请访问:http://www.albahari.com/nutshell/。
若您对本书有任何建议或技术问题,请发送电子邮件至:bookquestions@oreilly.com。
如需获取更多有关O’Reilly的书籍、会议、资源中心及O’Reilly网络的信息。请访问:http://www.oreilly.com。
致谢
Joseph Albahari
首先,我要感谢我的兄弟Ben Albahari。在他的劝说下我接手了《C#3.0 in a Nutshell》的编写工作。成就了该书与之后三个修订版的巨大成功。我从Ben这里得到的不仅是向传统观点提出质疑的勇气,还有刨根问底的精神。
我最希望感谢的还有那些优秀的技术审阅者:Rod Stephens、Jared Parsons、Stephen Toub、Matthew Groves、Dixin Yan、Lee Coward、Bonnie DeWitt、Wonseok Chae、Lori Lalonde以及James Montemagno。感谢你们对本书及上一个修订版提供的大量反馈。
本书是基于上一个修订版编写的。请允许我一并对上一个修订版的技术审阅者致以诚挚的谢意:Eric Lippert、Jon Skeet、Stephen Toub、Nicholas Paldino、Chris Burrows、Shawn Farkas、Brian Grunkemeyer、Maoni Stephens、David DeWinter、Mike Barnett、Melitta Andersen、Mitch Wheat、Brian Peek、Krzysztof Cwalina、Matt Warren、Joel Pobar、Glyn Griffiths、Ion Vasilian、Brad Abrams、Sam Gentile以及Adam
Nathan。
上述审阅者中,有一大部分是来自Microsoft的资深专家。在他们的努力下,本书才能达到如今的高度。
最后,我还要感谢O’Reilly团队,并对Li、Miri和Sonia致以我个人的谢意。
Ben Albahari
我的兄弟在我之前写下了感言,他所表达的大多数内容也是我的肺腑之言。事实上,在我们还是孩子的时候就开始编写程序了(我们共用一台Apple IIe;他编写自己的操作系统,而我编写Hangman游戏)。一起撰写这些书籍真是件令人激动的事情。希望我们在本书中浓缩的经验也能够成为您的宝贵财富。
同时,我还要感谢之前在Microsoft工作的同事。他们拥有非凡的智慧,不仅智力超群而且情怀宽广,我非常怀念与他们共事的时光。我尤其想感谢Brian Beckman,从他身上我受益良多。