书籍作者:约瑟夫·阿坝哈瑞 | ISBN:9787111631347 |
书籍语言:简体中文 | 连载状态:全集 |
电子书格式:pdf,txt,epub,mobi,azw3 | 下载次数:3693 |
创建日期:2021-02-14 | 发布日期:2021-02-14 |
运行环境:PC/Windows/Linux/Mac/IOS/iPhone/iPad/Kindle/Android/安卓/平板 |
本书前三章将集中介绍C#语言。首先介绍基本的语法、类型和变量。而后会介绍一些高级的特性,如不安全代码以及预处理指令。如果你是C#语言的初学者,请循序渐进地阅读这些章节。
其余各章则涵盖了.NET Framework的核心功能,包括LINQ、XML、集合、并发、I/O
和网络、内存管理、反射、动态编程、特性、安全、应用程序域和原生互操作性等主题。第6章和第7章是后续主题的基础,除这两章之外,其余各章可以按照需要以任何顺序阅读。LINQ相关的三个章节好按顺序阅读。其中的一些章节需要一些并发相关的知识,这些知识将在第14章中介绍。
Joseph Albahari 是《C# 6.0 in a Nutshell》以及《LINQ Pocket Reference》的合著者。他编写了流行的代码执行器与 LINQ 查询辅助工具 LINQPad。
Ben Albahari 是《C# 6.0 in a Nutshell》的合著者。他曾就职于 Microsoft,并担任 Entity Framework 的项目经理。
这本畅销书籍将回答你在 C# 7.0、.NET CLR 和核心框架程序集遇到的各种问题。C# 语言从 2000 年发布到现在展现了惊人的灵活性和生命力。这种不停歇的变化也促使我们不断学习紧跟它的脚步。
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),但并不做强制要求。
如果您认为您使用代码示例的方式有可能需要获得授权,请随时与我们取得联系:[email protected]。
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/。
若您对本书有任何建议或技术问题,请发送电子邮件至:[email protected]。
如需获取更多有关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,从他身上我受益良多。
前言1
第1章 C#和.NET Framework简介7
1.1 面向对象7
1.2 类型安全性8
1.3 内存管理9
1.4 平台支持9
1.5 C#和CLR9
1.6 CLR和.NET Framework10
1.7 其他框架11
1.7.1遗留框架和小众框架12
1.7.2 Windows Runtime12
1.8 C#简史13
1.8.1 C# 7.0新特性14
1.8.2 C# 6.0新特性17
1.8.3 C# 5.0新特性18
1.8.4 C# 4.0新特性19
1.8.5 C# 3.0新特性19
1.8.6 C# 2.0新特性20
第2章 C#语言基础21
2.1 第一个C#程序21
2.2 语法24
2.2.1 标识符和关键字24
2.2.2 字面量、标点与运算符26
2.2.3 注释26
2.3 类型基础27
2.3.1 预定义类型示例27
2.3.2 自定义类型示例28
2.3.3 转换30
2.3.4 值类型与引用类型31
2.3.5 预定义类型分类34
2.4 数值类型35
2.4.1 数值字面量36
2.4.2 数值转换38
2.4.3 算术运算符39
2.4.4 自增和自减运算符39
2.4.5 特殊整数类型运算39
2.4.6 8位和16位整数类型41
2.4.7 特殊的float和double值41
2.4.8 double和decimal的对比42
2.4.9 实数的舍入误差43
2.5 布尔类型和运算符43
2.5.1 布尔类型转换43
2.5.2 相等和比较运算符44
2.5.3 条件运算符44
2.6 字符串和字符45
2.6.1 char转换46
2.6.2 字符串类型46
2.7 数组48
2.7.1 默认数组元素初始化49
2.7.2 多维数组49
2.7.3 简化数组初始化表达式51
2.7.4 边界检查52
2.8 变量和参数52
2.8.1 栈和堆52
2.8.2 明确赋值54
2.8.3 默认值54
2.8.4 参数55
2.8.5 引用局部变量(C# 7)61
2.8.6 引用返回值(C# 7)61
2.8.7 var隐式类型局部变量61
2.9 表达式和运算符62
2.9.1 基础表达式63
2.9.2 空表达式63
2.9.3 赋值表达式63
2.9.4 运算符优先级和结合性64
2.9.5 运算符表64
2.10 null运算符68
2.10.1 null合并运算符68
2.10.2 null条件运算符(C# 6)68
2.11 语句69
2.11.1 声明语句69
2.11.2 表达式语句70
2.11.3 选择语句71
2.11.4 迭代语句75
2.11.5 跳转语句77
2.11.6其他语句78
2.12 命名空间79
2.12.1 using指令80
2.12.2 using static指令(C# 6)80
2.12.3 命名空间中的规则81
2.12.4 类型和命名空间别名83
......