C# 7.0本质论 [Essential C# 7.0]
编辑推荐
适读人群 :1、初学者;2、熟悉结构化编程的程序员;3、熟悉“基于对象”和“面向对象”理念的开发者(C++、Python、TypeScript、Visual Basic和Java程序员);4、C#专家
本书特色深挖C# 7.0的诸多改进,包括元组、解构函数、模式匹配、本地函数和ref返回等利用C#面向对象构造写出更健壮的代码利用泛型、委托、Lambda表达式和事件降低代码复杂度利用C# 7.0跨平台编译在Linux或MacOS上运行代码全面掌握多线程处理和同步,包括async/await模式包括C# 7.1/7.2/7.3语言增强
内容简介
作为历年来深受各层次开发人员欢迎的C#指南,本书讨论了从C# 3.0到7.0的*重要的C#特性,强调了现代编程模式,可帮助读者编写简洁、强大、健壮、安全和易于维护的C#代码。C#专家Mark Michaelis对语言进行了全面而深入的探讨,提供了对关键C# 7.0增强、C# 7.0和.NET Core/.NET Standard的配合使用以及跨平台编译的专业论述。他用简洁的例子阐释了关键C#构造,并提供了大量优秀实践编程规范,为你进行高效软件开发打好基础。
作者简介
Mark Michaelis是高端软件工程和咨询公司IntelliTect的创办者、首席技术架构师和培训师。Mark经常在开发者大会上发言,写过许多文章和书籍,目前是《MSDN Magazine》的《Essential .NET》专栏作家。
从1996年起,他一直是C#、Visual Studio Team System和Windows SDK的MVP。2007年被评选为微软的Regional Director。他还服务于微软的几个软件设计评审团队,包括C#和VSTS。
Mark拥有伊利诺伊大学哲学专业文学学士学位和伊利诺伊理工大学计算机硕士学位。
他不是痴迷于计算机,就是忙于陪伴家人或者玩壁球(2016年暂停铁人三项训练)。他居住在华盛顿州的斯波坎,他和妻子Elisabeth有三个孩子:Benjamin、Hanna和Abigail。
技术编辑简介
Eric Lippert目前在Facebook负责开发者工具。之前是微软C#语言设计团队的一员。不在StackOverflow上回答用户的C#问题或者编辑程序书时,他总是喜欢玩他的小帆船。目前和妻子Leah居住在华盛顿州的西雅图。
精彩书评
Mark非常聪明,善于打破砂锅问到底,能深刻理解一种技术对于真正的开发人员的影响……他的文字直指技术的本质,敏锐地指出技术的真正价值和问题……没人能像这位大师一样帮你正确理解C# 7.0。—— Mads Torgersen,微软公司C# 项目经理
目录
译者序
推荐序
前言
致谢
作者简介
第1章 C#概述 / 1
1.1 Hello, World / 1
1.2 C#语法基础 / 8
1.3 使用变量 / 14
1.4 控制台输入和输出 / 17
1.5 注释 / 20
1.6 托管执行和CLI / 22
1.7 多个.NET框架 / 26
1.8 小结 / 28
第2章 数据类型 / 29
2.1 基本数值类型 / 29
2.2 更多基本类型 / 36
2.3 null和void / 46
2.4 数据类型转换 / 47
2.5 小结 / 52
第3章 更多数据类型 / 53
3.1 类型的划分 / 53
3.2 可空修饰符 / 55
3.3 元组 / 57
3.4 数组 / 62
3.5 小结 / 74
第4章 操作符和控制流程 / 75
4.1 操作符 / 75
4.2 控制流程概述 / 87
4.3 代码块({}) / 91
4.4 代码块、作用域和声明空间 / 93
4.5 布尔表达式 / 94
4.6 按位操作符(<<,>>,|,&,^,~) / 101
4.7 控制流程语句(续) / 106
4.8 跳转语句 / 115
4.9 C#预处理器指令 / 119
4.10 小结 / 124
第5章 方法和参数 / 126
5.1 方法的调用 / 127
5.2 方法的声明 / 131
5.3 using指令 / 135
5.4 Main()的返回值和参数 / 139
5.5 高级方法参数 / 141
5.6 递归 / 149
5.7 方法重载 / 152
5.8 可选参数 / 154
5.9 用异常实现基本错误处理 / 157
5.10 小结 / 168
第6章 类 / 169
6.1 类的声明和实例化 / 172
6.2 实例字段 / 174
6.3 实例方法 / 176
6.4 使用this关键字 / 177
6.5 访问修饰符 / 183
6.6 属性 / 184
6.7 构造函数 / 197
6.8 静态成员 / 205
6.9 扩展方法 / 213
6.10 封装数据 / 214
6.11 嵌套类 / 216
6.12 分部类 / 218
6.13 小结 / 222
第7章 继承 / 223
7.1 派生 / 224
7.2 重写基类 / 232
7.3 抽象类 / 242
7.4 所有类都从System.Object派生 / 246
7.5 使用is操作符验证基础类型 / 247
7.6 用is操作符进行模式匹配 / 248
7.7 switch语句中的模式匹配 / 248
7.8 使用as操作符进行转换 / 250
7.9 小结 / 251
第8章 接口 / 252
8.1 接口概述 / 253
8.2 通过接口实现多态性 / 254
8.3 接口实现 / 258
8.4 在实现类和接口之间转换 / 262
8.5 接口继承 / 263
8.6 多接口继承 / 265
8.7 接口上的扩展方法 / 265
8.8 通过接口实现多继承 / 266
8.9 版本控制 / 269
8.10 比较接口和类 / 270
8.11 比较接口和特性 / 271
8.12 小结 / 271
第9章 值类型 / 272
9.1 结构 / 275
9.2 装箱 / 279
9.3 枚举 / 285
9.4 小结 / 293
第10章 合式类型 / 295
10.1 重写object的成员 / 295
10.2 操作符重载 / 305
10.3 引用其他程序集 / 311
10.4 定义命名空间 / 318
10.5 XML注释 / 320
10.6 垃圾回收 / 323
10.7 资源清理 / 325
10.8 推迟初始化 / 332
10.9 小结 / 333
第11章 异常处理 / 334
11.1 多异常类型 / 334
11.2 捕捉异常 / 336
11.3 常规catch块 / 339
11.4 异常处理规范 / 341
11.5 自定义异常 / 343
11.6 重新抛出包装的异常 / 346
11.7 小结 / 349
第12章 泛型 / 350
12.1 如果C#没有泛型 / 350
12.2 泛型类型概述 / 355
12.3 约束 / 364
12.4 泛型方法 / 374
12.5 协变性和逆变性 / 377
12.6 泛型的内部机制 / 382
12.7 小结 / 385
第13章 委托和Lambda表达式 / 386
13.1 委托概述 / 387
13.2 声明委托类型 / 390
13.3 Lambda表达式 / 396
13.4 匿名方法 / 401
13.5 小结 / 413
第14章 事件 / 414
14.1 使用多播委托编码Publish-Subscribe模式 / 415
14.2 理解事件 / 426
14.3 小结 / 435
第15章 支持标准查询操作符的集合接口 / 436
15.1 集合初始化器 / 437
15.2 IEnumerable使类成为集合 / 439
15.3 标准查询操作符 / 444
15.4 匿名类型之于LINQ / 470
15.5 小结 / 477
第16章 使用查询表达式的LINQ / 478
16.1 查询表达式概述 / 478
16.2 查询表达式只是方法调用 / 493
16.3 小结 / 494
第17章 构建自定义集合 / 496
17.1 更多集合接口 / 497
17.2 主要集合类 / 498
17.3 提供索引器 / 512
17.4 返回null或者空集合 / 515
17.5 迭代器 / 515
17.6 小结 / 527
第18章 反射、特性和动态编程 / 528
18.1 反射 / 528
18.2 特性 / 539
18.3 使用动态对象进行编程 / 557
18.4 小结 / 565
第19章 多线程处理 / 566
19.1 多线程处理基础 / 568
19.2 使用System.Threading / 572
19.3 异步任务 / 577
19.4 取消任务 / 591
19.5 基于任务的异步模式 / 596
19.6 并行迭代 / 618
19.7 并行执行LINQ查询 / 626
19.8 小结 / 630
第20章 线程同步 / 631
20.1 线程同步的意义 / 632
20.2 计时器 / 653
20.3 小结 / 655
第21章 平台互操作性和不安全代码 / 656
21.1 平台调用 / 657
21.2 指针和地址 / 667
21.3 通过委托执行不安全代码 / 674
21.4 小结 / 676
第22章 公共语言基础结构 / 677
22.1 CLI的定义 / 677
22.2 CLI的实现 / 678
22.3 .NET Standard / 680
22.4 BCL / 681
22.5 将C#编译成机器码 / 681
22.6 运行时 / 682
22.7 程序集、清单和模块 / 685
22.8 公共中间语言 / 687
22.9 公共类型系统 / 687
22.10 公共语言规范 / 688
22.11 元数据 / 688
22.12 .NET Native和AOT编译 / 689
22.13 小结 / 689
C# 7.0核心技术指南(原书第7版) [C# 7.0 in a Nutshell: The Definitive Reference]
编辑推荐
适读人群 :中高级开发人员,适合作为教材以外的补充书籍
这本畅销书籍将回答你在 C# 7.0、.NET CLR 和核心框架程序集遇到的各种问题。C# 语言从 2000 年发布到现在展现了惊人的灵活性和生命力。这种不停歇的变化也促使我们不断学习紧跟它的脚步。
内容简介
本书前三章将集中介绍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 的项目经理。
目录
前言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 第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
......