深入解析C#乔恩·斯基特著韩博译编程语言pdf下载pdf下载

深入解析C#乔恩·斯基特著韩博译编程语言百度网盘pdf下载

作者:
简介:本篇主要提供深入解析C#乔恩·斯基特著韩博译编程语言pdf下载
出版社:宝征图书专营店
出版时间:2020-10
pdf下载价格:0.00¥

免费下载


书籍下载


内容介绍

作  者:(英)乔恩·斯基特 著 韩博 译
定  价:129
出 版 社:人民邮电出版社
出版日期:2020年10月01日
页  数:440
装  帧:平装
ISBN:9787115547255
C#领域的经典著作,新版重磅升级! 1.技术专家的经典之作,在C#和.NET领域享有盛誉。 2.与其他泛泛介绍C#的图书不同,本书深度探究C#的特性,并结合技术发展,读者深入C#的时空。 3.作者从语言设计的动机出发,介绍支持这些特性的核心概念;基于C#语言的发展背景介绍新的语言特性,并用极富实际意义的示例,向读者展示编写代码和设计解决方案的理想方式。 4.新版重新组织了内容,进行了重写与浓缩,还全面更新并细致剖析了C#6和C#7的新增特性。 5.提供源代码。 作者将多年的C#开发经验与读者等
部分C#背景介绍
章大浪淘沙2
1.1一门与时俱进的语言2
1.1.1类型系统——型助手3
1.1.2代码更简洁4
1.1.3使用LINQ简化数据访问8
1.1.4异步8
1.1.5编码效率与执行效率之间的取舍9
1.1.6快速迭代:使用小版本号10
1.2一个与时俱进的平台11
1.3一个与时俱进的社区12
1.4一本与时俱进的好书13
1.4.1内容详略得当13
1.4.2使用Noda Time作为示例14
1.4.3术语选择14
1.5小结15
第二部分从C#2到C#5
第2章C#218
2.1泛型18
2.1.1示例:泛型诞生前的集合19
2.1.2泛型降临21
2.1.3泛型的适用范围25
2.1.4方法类型实参的类型推断26
2.1.5类型约束28
2.1.6default运算符和typeof运算符30
2.1.7泛型类型初始化与状态32
2.2可空值类型34
2.2.1目标:表达信息的缺失34
2.2.2CLR和framework的支持:Nullable结构体35
2.2.3语言层面支持38
2.3简化委托的创建43
2.3.1方法组转换43
2.3.2匿名方法44
2.3.3委托的兼容性45
2.4迭代器46
2.4.1迭代器简介47
2.4.2延迟执行48
2.4.3执行yield语句49
2.4.4延迟执行的重要性50
2.4.5处理finally块51
2.4.6处理finally的重要性53
2.4.7迭代器实现机制概览54
2.5一些小的特性58
2.5.1局部类型59
2.5.2静态类60
2.5.3属性的getter/setter访问分离61
2.5.4命名空间别名61
2.5.5编译指令63
2.5.6固定大小的缓冲区
2.5.7InternalsVisibleTo65
2.6小结65
第3章C#3:LINQ及相关特性66
3.1自动实现的属性66
3.2隐式类型67
3.2.1类型术语67
3.2.2隐式类型的局部变量68
3.2.3隐式类型的数组69
3.3对象和集合的初始化71
3.3.1对象初始化器和集合初始化器简介71
3.3.2对象初始化器72
3.3.3集合初始化器74
3.3.4仅用单一表达式就能完成初始化的好处75
3.4匿名类型76
3.4.1基本语法和行为76
3.4.2编译器生成类型78
3.4.3匿名类型的局限性79
3.5lambda表达式80
3.5.1lambda表达式语法简介81
3.5.2捕获变量82
3.5.3表达式树89
3.6扩展方法91
3.6.1声明扩展方法91
3.6.2调用扩展方法92
3.6.3扩展方法的链式调用93
3.7查询表达式94
3.7.1从C#到C#的查询表达式转换95
3.7.2范围变量和隐形标识符95
3.7.3选择使用哪种LINQ语法96
3.8形态:LINQ97
3.9小结98
第4章C#4:互操作性提升99
4.1动态类型99
4.1.1动态类型介绍100
4.1.2反射的动态行为104
4.1.3动态行为机制速览108
4.1.4动态类型的局限与意外111
4.1.5动态类型的使用建议115
4.2可选形参和命名实参116
4.2.1带默认值的形参和带名字的实参117
4.2.2如何决定方法调用的含义118
4.2.3对版本号的影响119
4.3COM互操作性提升121
4.3.1链接主互操作程序集121
4.3.2COM组件中的可选形参123
4.3.3命名索引器124
4.4泛型型变125
4.4.1泛型型变示例125
4.4.2接口和委托声明中的变体语法126
4.4.3变体的使用127
4.4.4泛型型变实例129
4.5小结130
第5章编写异步代码131
5.1异步函数简介132
5.1.1异步问题初体验133
5.1.2拆分个例子134
5.2对异步模式的思考135
5.2.1关于异步执行本质的思考136
5.2.2同步上下文137
5.2.3异步方法模型138
5.3async方法声明139
5.3.1async方法的返回类型140
5.3.2async方法的参数141
5.4await表达式141
5.4.1可等待模式142
5.4.2await表达式的条件144
5.5返回值的封装145
5.6异步方法执行流程146
5.6.1await的操作对象与时机146
5.6.2await表达式的运算147
5.6.3可等待模式成员的使用150
5.异常拆封151
5.6.5完成方法152
5.7异步匿名函数156
5.8C#7自定义task类型157
5.8.199.9%的情况:ValueTask158
5.8.2剩下0.1%的情况:创建自定义task类型160
5.9C#7.1中的异步Main方法161
5.10使用建议162
5.10.1使用ConfigureAwait避免上下文捕获(择机使用)163
5.10.2启动多个独立task以实现并行1
5.10.3避免同步代码和异步代码混用165
5.10.4根据需要提供取消机制165
5.10.5测试异步模式165
5.11小结166
第6章异步原理167
6.1生成代码的结构168
6.1.1桩方法:准备和开始步171
6.1.2状态机的结构172
6.1.3MoveNext()方法(整体介绍)175
6.1.4SetStateMachine方法以及状态机的装箱事宜177
6.2一个简单的MoveNext()实现177
6.2.1一个完整的具体示例178
6.2.2MoveNext()方法的通用结构179
6.2.3详探await表达式181
6.3控制流如何影响MoveNext()183
6.3.1await表达式之间的控制流很简单183
6.3.2在循环中使用await184
6.3.3在try/finally块中使用await表达式185
执行上下文和执行流程188
6.5再探自定义task类型189
6.6小结190
第7章C#5附加特性191
7.1在foreach循环中捕获变量191
7.2调用方信息attribute193
7.2.1基本行为193
7.2.2日志194
7.2.3简化INotifyProperty-Changed的实现195
7.2.4调用方信息attribute的小众使用场景196
7.2.5旧版本.NET使用调用方信息attribute201
7.3小结202
第三部分C#6
第8章极简属性和表达式主体成员204
8.1属性简史204
8.2自动实现属性的升级206
8.2.1只读的自动实现属性206
8.2.2自动实现属性的初始化207
8.2.3结构体中的自动实现属性208
8.3表达式主体成员210
8.3.1简化只读属性的计算210
8.3.2表达式主体方法、索引器和运算符213
8.3.3C#6中表达式主体成员的214
8.3.4表达式主体成员使用指南216
8.4小结218
第9章字符串特性219
9.1NET中的字符串格式化回顾219
9.1.1简单字符串格式化219
9.1.2使用格式化字符串来实现自定义格式化220
9.1.3属地化221
9.2内插字符串字面量介绍224
9.2.1简单内插224
9.2.2使用内插字符串字面量格式化字符串225
9.2.3内插原义字符串字面量225
9.2.4编译器对内插字符串字面量的处理(部分)226
9.3使用FormattableSting实现属地化227
9.3.1编译器对内插字符串字面量的处理(第2部分)228
9.3.2在特定culture下格式化一个FormattableString229
9.3.3FormattableString的其他用途230
9.3.4在旧版本.NET中使用FormattableString233
9.4使用指南和使用234
9.4.1适合开发人员和机器,但可能不适合终用户235
9.4.2关于内插字符串字面量的硬性236
9.4.3何时可以用但不应该用238
9.5使用nameof访问标识符239
9.5.1nameof的个例子239
9.5.2nameof的一般用法241
9.5.3使用nameof的技巧与陷阱243
9.6小结246
0章简洁代码的特性“盛宴”247
10.1using static指令247
10.1.1引入静态成员247
10.1.2using static与扩展方法250
10.2对象初始化器和集合初始化器特性增强252
10.2.1对象初始化器中的索引器252
10.2.2在集合初始化器中使用扩展方法256
10.2.3测试代码与产品代码259
10.3空值条件运算符260
10.3.1简单、安全地解引用260
10.3.2关于空值条件运算符的更多细节261
10.3.3处理布尔值比较262
10.3.4索引器与空值条件运算符263
10.3.5使用空值条件运算符提升编程效率263
10.3.6空值条件运算符的局限性265
10.4异常过滤器265
10.4.1异常过滤器的语法和语义266
10.4.2重试操作270
10.4.3记录日志的“副作用”272
10.4.4单个、有针对性的日志过滤器273
10.4.5为何不直接抛出异常273
10.5小结274
第四部分C#7及其后续版本
1章使用元组进行组合277
11.1元组介绍277
11.2元组字面量和元组类型278
11.2.1语法278
11.2.2元组字面量推断元素名称(C#7.1)280
11.2.3元组用作变量的容器281
11.3元组类型及其转换285
11.3.1元组字面量的类型285
11.3.2从元组字面量到元组类型的转换287
11.3.3元组类型之间的转换290
11.3.4类型转换的应用292
11.3.5继承时的元素名称检查292
11.3.6等价运算符与不等价运算符(C#7.3)293
11.4CLR 中的元组294
11.4.1引入System.ValueTuple<...>294
11.4.2处理元素名称294
11.4.3元组类型转换的实现296
11.4.4元组的字符串表示296
11.4.5一般等价比较和排序比较297
11.4.6结构化等价比较和排序比较298
11.4.7独素元组和巨型元组299
11.4.8非泛型ValueTuple结构体300
11.4.9扩展方法301
11.5元组的替代品301
11.5.1System.Tuple<...>301
11.5.2匿名类型301
11.5.3命名类型302
11.6元组的使用建议302
11.6.1非公共API以及易变的代码303
11.6.2局部变量303
11.6.3字段304
11.元组和动态类型不太搭调305
11.7小结306
2章分解与模式匹配307
12.1分解元组307
12.1.1分解变量308
12.1.2通过分解操作为已有变量或者属性赋值310
12.1.3元组字面量分解的细节313
12.2非元组类型的分解操作314
12.2.1实例分解方法314
12.2.2扩展分解方法与重载315
12.2.3编译器对于Deconstruct调用的处理316
12.3模式匹配简介317
12.4C#7.0可用的模式319
12.4.1常量模式319
12.4.2类型模式320
12.4.3var模式323
12.5模式匹配与is运算符的搭配使用324
12.6在switch语句中使用模式325
12.6.1哨兵语句326
12.6.2case标签中的模式变量的作用域328
12.6.3基于模式的switch语句的运算顺序329
12.7对模式特性使用的思考330
12.7.1发现分解的时机330
12.7.2发现模式匹配的使用时机331
12.8小结331
3章引用传递提升执行效率332
13.1回顾:ref知多少333
13.2ref局部变量和ref return336
13.2.1ref局部变量336
13.2.2ref return341
13.2.3条件运算符?:和ref值(C#7.2)343
13.2.4ref readonly(C#7.2)343
13.3in参数(C#7.2)345
13.3.1兼容性考量346
13.3.2in参数惊人的不可变性:外部修改347
13.3.3使用in参数进行方法重载348
13.3.4in参数的使用指导348
13.4将结构体声明为只读(C#7.2)350
13.4.1背景:只读变量的隐式复制350
13.4.2结构体的只读修饰符352
13.4.3XML序列化是隐式读写属性353
13.5使用ref参数或者in参数的扩展方法(C#7.2)354
13.5.1在扩展方法中使用ref/in参数来规避复制354
13.5.2ref和in扩展方法的使用355
13.6类ref结构体(C#7.2)357
13.6.1类ref结构体的规则357
13.6.2Span和栈内存分配358
13.6.3类ref结构体的IL表示362
13.7小结362
4章C#7的代码简洁之道363
14.1局部方法363
14.1.1局部方法中的变量访问3
14.1.2局部方法的实现367
14.1.3使用指南371
14.2out变量373
14.2.1out参数的内联变量声明374
14.2.2C#7.3 关于out变量和模式变量解除的374
14.3数字字面量的改进375
14.3.1二进制整型字面量375
14.3.2下划线分隔符376
14.4throw表达式377
14.5default字面量(C#7.1)377
14.6非尾部命名实参379
14.7私有受保护的访问权限(C#7.2)380
14.8C#7.3的一些小改进380
14.8.1泛型类型约束381
14.8.2重载决议改进381
14.8.3字段的attribute支持自动实现的属性382
14.9小结383
5章C#8及其后续384
15.1可空引用类型384
15.1.1可空引用类型可以解决什么问题385
15.1.2在使用引用类型时改变其含义385
15.1.3输入可空引用类型387
15.1.4编译时和执行期的可空引用类型387
15.1.5damnit运算符或者bang运算符389
15.1.6可空引用类型迁移的经验391
15.1.7未来的改进393
15.2switch表达式396
15.3嵌套模式匹配398
15.3.1使用模式来匹配属性398
15.3.2分解模式399
15.3.3忽略模式中的类型399
15.4index和range400
15.4.1index与range类型和字面量401
15.4.2应用index和range402
15.5更多异步集成403
15.5.1使用await实现异步资源回收403
15.5.2使用foreach await的异步迭代404
15.5.3异步迭代器407
15.6预览版中尚未提供的特性408
15.6.1默认接口方法408
15.6.2记录类型409
15.6.3更多特性410
15.7欢迎加入412
15.8小结412
附录特性与语言版本对照表413
C#语言简洁优雅,精妙强大,是当今编程语言的集大成者,功能不断推陈出新,受到众多开发人员的推崇。本书是C#领域的经典著作,新版重磅升级,不仅重新组织了内容,还全面更新并细致剖析了C#6和C#7的新增特性,为读者奉上知识盛宴。作者在详尽展示C#各个知识点的同时,注重从现象中挖掘本质,解读语言背后的设计思想,深入探究了C#的核心概念和经典特性,并将这些特性融入代码示例,帮助读者顺畅使用C#,享受使用C#编程的乐趣。本书适合C#开发人员阅读。