C# 10是微软旗舰编程语言的第9次重大更新,显著提高了C#语言的功能性和灵活性。一方面,它提供了一些高级抽象,例如查询表达式和异步延续;另一方面,它允许通过自定义值类型和可选指针等结构进行底层的效率优化。
C#语言特性的发展也极大地加重了我们的学习负担。虽然一些工具(如Microsoft IntelliSense和在线参考文档)可以为工作提供诸多便利,但若要使用它们,仍需要一些现有的概念和知识体系作为支撑。本书摒除冗长的介绍,以简明统一的方式准确阐释了这些知识。
与之前的几个版本一样,本书也是围绕概念和用例来进行组织的,因此无论是按顺序阅读还是随意浏览都大有裨益。虽然本书只要求读者具备基本的背景知识,但是它仍然具有一定的深度,因此本书适合中高级读者阅读。
本书涵盖C#语言、公共语言运行时(Common Language Runtime,CLR)和.NET 6基础类库(Base Class Library,BCL)。我们之所以做出这样的选择,是希望为一些困难与高级的主题留出足够的空间,而同时又不影响内容的深度与可读性。本书详细标记了C#的新特性,因此本书亦可同时作为C# 7、C# 8和C# 9的参考书。
本书主要针对中高级开发人员。本书不要求读者具备C#知识,但需要读者具备一定的通用编程经验。对于初学者,本书适合作为教科书的补充书籍,而非编程教材的替代品。
本书非常适合与那些着眼于介绍具体应用技术的书籍配合阅读,例如介绍ASP.NET Core和Windows Presentation Foundation(WPF)等技术的书籍。本书涵盖了其他书籍所不具备的C#语言与.NET内容。
第2~4章将详细介绍C#语言。首先介绍最基本的语法、类型和变量,然后介绍一些高级特性,如不安全代码以及预处理指令。如果你是C#语言的初学者,请循序渐进地阅读这些章节。
其余各章则涵盖了.NET 6基础类库的功能,包括语言集成查询(Language-Integrated Query,LINQ)、XML、集合、并发、I/O和联网、内存管理、反射、动态编程、特性(attribute)、加密和原生互操作性等主题。第5章和第6章是后续主题的基础,除这两章之外,其余各章可以根据需要按任意顺序阅读。与LINQ相关的3章最好按顺序阅读。某些章节需要一些与并发相关的知识,详见第14章。
运行本书的示例需要.NET 6。此外,还可以使用微软的.NET在线文档查找每一个具体类型及成员的信息。
你可以在任意文本编辑器中书写代码,并从命令行中执行编译过程。但为了提高效率,最好使用一个代码执行工具随时测试各个代码片段,并使用集成开发环境(Integrated Development Environment,IDE)来生成可执行文件或程序库。
对于使用Windows代码编辑器的用户,我们推荐从 www.linqpad.net 下载免费的LINQPad 7作为代码执行工具。LINQPad完全支持C# 10,且该软件就是由本书的作者维护的。
对于Windows IDE的用户,我们建议下载Microsoft Visual Studio 2022( https://visualstudio.microsoft.com )作为集成开发环境。该工具的任何版本都能够运行书中的所有示例。如果需要使用跨平台的集成开发环境,则请下载Visual Studio Code。
LINQPad中包含了本书的所有示例代码,这些示例代码均可以再次编辑并交互式运行。如果需下载所有的示例,请在LINQPad底部左侧的“Samples”选项卡中单击“Download more samples”按钮,并选择“C# 10 in a Nutshell”。
本书使用基本的UML符号来说明类型之间的关系,如图P-1所示。图中斜矩形表示抽象类;圆形表示接口;带空心箭头的线段表示继承,其中箭头指向基类型;带实心箭头的线段表示单向关联,而不带箭头的线段表示双向关联。
本书还遵循以下排版约定:
图P-1:示例图
斜体( Italic ):
表示新的术语、URI、文件名和目录。
等宽字体( Constant width ):
表示C#代码、关键字和标识符,以及应用程序的输出。
等宽粗体( Constant width bold ):
表示代码中的重点部分。
等宽斜体( Constant width italic ):
表示可由用户输入替换的文本。
可以从 http://www.albahari.com/nutshell 下载补充材料(示例代码、练习等)。
这里的代码是为了帮助你更好地理解本书的内容。通常,可以在程序或文档中使用本书中的代码,而不需要联系O’Reilly获得许可,除非需要大段地复制代码。例如,使用本书中所提供的几个代码片段来编写一个程序不需要得到我们的许可,但销售或发布O’Reilly的示例代码则需要O’Reilly出版社的许可。引用本书的示例代码来回答一个问题也不需要许可,将本书中的示例代码的很大一部分放到自己的产品文档中则需要获得许可。
非常欢迎读者使用本书中的代码,希望(但不强制)注明出处。注明出处时包含书名、作者、出版社和ISBN,例如:
C# 10 in a Nutshell ,作者Joseph Albahari,由O’Reilly出版,书号978-1-098-12195-2。
如果读者觉得对示例代码的使用超出了上面所给出的许可范围,欢迎通过 permissions@oreilly.com 联系我们。
40多年来,O’Reilly Media致力于提供技术和商业培训、知识和卓越见解,来帮助众多公司取得成功。
我们拥有独一无二的专家和创新者组成的庞大网络,他们通过图书、文章、会议和我们的在线学习平台分享他们的知识和经验。O’Reilly的在线学习平台允许你按需访问现场培训课程、深入的学习路径、交互式编程环境,以及O’Reilly和200多家其他出版商提供的大量教材和视频资源。有关的更多信息,请访问 http://oreilly.com 。
对于本书,如果有任何意见或疑问,请按照以下地址联系本书出版商。
美国:
O’Reilly Media,Inc.
1005 Gravenstein Highway North
Sebastopol,CA 95472
中国:
北京市西城区西直门南大街2号成铭大厦C座807室(100035)
奥莱利技术咨询(北京)有限公司
要询问技术问题或对本书提出建议,请发送电子邮件至 errata@oreilly.com.cn 。
本书配套网站 https://oreil.ly/c-sharp-nutshell-10 上列出了勘误表、示例以及其他信息。
关于书籍、课程的更多新闻和信息,请访问我们的网站 http://oreilly.com 。
我们在Facebook上的地址: http://facebook.com/oreilly 。
我们在Twitter上的地址: http://twitter.com/oreillymedia 。
我们在YouTube上的地址: http://youtube.com/oreillymedia 。
本系列图书自2007年出版第一本以来,得到了一些优秀的技术专家的支持。我尤其要感谢Stephen Toub、Paulo Morgado、Fred Silberberg、Vitek Karas、Aaron Robinson、Jan Vorlicek、Sam Gentile、Rod Stephens、Jared Parsons、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和Adam Nathan的感谢。感谢他们帮忙审校先前的修订版本。
在上述审校者中,有一大部分是微软的资深专家。在他们的努力下,本书才能达到如今的质量水平。
我还要感谢Ben Albahari和Eric Johannsen对上一版的贡献。感谢O’Reilly团队——尤其要感谢编辑Corbin Collins,他工作高效,反馈及时。最后,我要深深地感谢我的妻子Li Albahari,在整个项目期间,她的陪伴令我感到幸福而快乐。