R深入解析C#pdf下载pdf下载

R深入解析C#百度网盘pdf下载

作者:
简介:本篇主要提供R深入解析C#pdf下载
出版社:华恒桃李书刊图书专营店
出版时间:2020-10
pdf下载价格:0.00¥

免费下载


书籍下载


内容介绍

基本信息

  • 商品名:R深入解析C#
  • ISBN:9787115547255
  • 定价:129
  • 出版社:人民邮电出版社
  • 作者:[英]乔恩·斯基特(Jon,Skeet)

参考信息(以实物为准)

  • 出版时间:2020-10-01
  • 印刷时间:
  • 版次:1
  • 印次:1
  • 包装:平装
  • 开本:16开
  • 用纸:胶版纸
  • 页数:416
  • 字数:

产品特色

编辑推荐

C#领域不可多得的经典著作,新版重磅升级!

1.知名技术专家的经典之作,在C#和.NET领域享有盛誉。
□.与其他泛泛介绍C#的图书不同,本书深度探究C#的特性,并结合技术发展,引领读者深入C#的时空。
3.作者从语言设计的动机出发,介绍支持这些特性的核心概念;基于C#语言的发展背景介绍新的语言特性,并用极富实际意义的示例,向读者展示编写代码和设计解决方案的理想方式。
4.新版重新组织了内容,进行了重写与浓缩,还全面更新并细致剖析了C#6和C#7的新增特性。
5.提供源代码。

作者将多年的C#开发经验与读者分享,读者可咀其精华、免走弯路,使程序设计水□更上一层楼。

内容简介

C#语言简洁优雅,精妙强大,是当今编程语言的集大成者,功能不断推陈出新,受到众多开发人员的推崇。本书是C#领域不可多得的经典著作,新版重磅升级,不仅重新组织了内容,还全面更新并细致剖析了C#6和C#7的新增特性,为读者奉上知识盛宴。作者在详尽展示C#各个知识点的同时,注重从现象中挖掘本质,解读语言背后的设计思想,深入探究了C#的核心概念和经典特性,并将这些特性融入代码示例,帮助读者顺畅使用C#,享受使用C#编程的乐趣。

目录

目录
□ □部分 C#背景介绍
□ □章 大浪淘沙 □
1.1 一门与时俱进的语言 □
1.1.1 类型系统——全能型助手 3
1.1.□ 代码更简洁 4
1.1.3 使用LINQ简化数据访问 8
1.1.4 异步 8
1.1.5 编码效率与执行效率之间的取舍 9
1.1.6 快速迭代:使用小版本号 10
1.□ 一个与时俱进的□台 11
1.3 一个与时俱进的社区 1□
1.4 一本与时俱进的好书 13
1.4.1 内容详略得当 13
1.4.□ 使用Noda Time作为示例 14
1.4.3 术语选择 14
1.5 小结 15
第二部分 从C# □到C#5
第 □章 C# □ 18
□.1 泛型 18
□.1.1 示例:泛型诞生前的集合 19
□.1.□ 泛型降临 □1
□.1.3 泛型的适用范围 □5
□.1.4 方法类型实参的类型推断 □6
□.1.5 类型约束 □8
□.1.6 default运算符和typeof运算符 30
□.1.7 泛型类型初始化与状态 3□
□.□ 可空值类型 34
□.□.1 目标:表达信息的缺失 34
□.□.□ CLR和framework的支持:Nullable结构体 35
□.□.3 语言层面支持 38
□.3 简化委托的创建 43
□.3.1 方法组转换 43
□.3.□ 匿名方法 44
□.3.3 委托的兼容性 45
□.4 迭代器 46
□.4.1 迭代器简介 47
□.4.□ 延迟执行 48
□.4.3 执行yield语句 49
□.4.4 延迟执行的重要性 50
□.4.5 处理finally块 51
□.4.6 处理finally的重要性 53
□.4.7 迭代器实现机制概览 54
□.5 一些小的特性 58
□.5.1 局部类型 59
□.5.□ 静态类 60
□.5.3 属性的getter/setter访问分离 61
□.5.4 命名空间别名 61
□.5.5 编译指令 63
□.5.6 固定大小的缓冲区 64
□.5.7 InternalsVisibleTo 65
□.6 小结 65
第3章 C# 3:LINQ及相关特性 66
3.1 自动实现的属性 66
3.□ 隐式类型 67
3.□.1 类型术语 67
3.□.□ 隐式类型的局部变量 68
3.□.3 隐式类型的数组 69
3.3 对象和集合的初始化 71
3.3.1 对象初始化器和集合初始化器简介 71
3.3.□ 对象初始化器 7□
3.3.3 集合初始化器 74
3.3.4 仅用单一表达式就能完成初始化的好处 75
3.4 匿名类型 76
3.4.1 基本语法和行为 76
3.4.□ 编译器生成类型 78
3.4.3 匿名类型的局限性 79
3.5 lambda表达式 80
3.5.1 lambda表达式语法简介 81
3.5.□ 捕获变量 8□
3.5.3 表达式树 89
3.6 扩展方法 91
3.6.1 声明扩展方法 91
3.6.□ 调用扩展方法 9□
3.6.3 扩展方法的链式调用 93
3.7 查询表达式 94
3.7.1 从C#到C#的查询表达式转换 95
3.7.□ 范围变量和隐形标识符 95
3.7.3 选择使用哪种LINQ语法 96
3.8 □□形态:LINQ 97
3.9 小结 98
第4章 C# 4:互操作性提升 99
4.1 动态类型 99
4.1.1 动态类型介绍 100
4.1.□ □□反射的动态行为 104
4.1.3 动态行为机制速览 108
4.1.4 动态类型的局限与意外 111
4.1.5 动态类型的使用建议 115
4.□ 可选形参和命名实参 116
4.□.1 带默认值的形参和带名字的实参 117
4.□.□ 如何决定方法调用的含义 118
4.□.3 对版本号的影响 119
4.3 COM互操作性提升 1□1
4.3.1 链接主互操作程序集 1□1
4.3.□ COM组件中的可选形参 1□3
4.3.3 命名索引器 1□4
4.4 泛型型变 1□5
4.4.1 泛型型变示例 1□5
4.4.□ 接口和委托声明中的变体语法 1□6
4.4.3 变体的使用限制 1□7
4.4.4 泛型型变实例 1□9
4.5 小结 130
第5章 编写异步代码 131
5.1 异步函数简介 13□
5.1.1 异步问题初体验 133
5.1.□ 拆分□ □个例子 134
5.□ 对异步模式的思考 135
5.□.1 关于异步执行本质的思考 136
5.□.□ 同步上下文 137
5.□.3 异步方法模型 138
5.3 async方法声明 139
5.3.1 async方法的返回类型 140
5.3.□ async方法的参数 141
5.4 await表达式 141
5.4.1 可等待模式 14□
5.4.□ await表达式的限制条件 144
5.5 返回值的封装 145
5.6 异步方法执行流程 146
5.6.1 await的操作对象与时机 146
5.6.□ await表达式的运算 147
5.6.3 可等待模式成员的使用 150
5.6.4 异常拆封 151
5.6.5 完成方法 15□
5.7 异步匿名函数 156
5.8 C# 7自定义task类型 157
5.8.1 99.9%的情况:ValueTask 158
5.8.□ 剩下0.1%的情况:创建自定义task类型 160
5.9 C# 7.1中的异步Main方法 161
5.10 使用建议 16□
5.10.1 使用ConfigureAwait避免上下文捕获(择机使用) 163
5.10.□ 启动多个独立task以实现并行 164
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.□ 状态机的结构 17□
6.1.3 MoveNext()方法(整体介绍) 175
6.1.4 SetStateMachine方法以及状态机的装箱事宜 177
6.□ 一个简单的MoveNext()实现 177
6.□.1 一个完整的具体示例 178
6.□.□ MoveNext()方法的通用结构 179
6.□.3 详探await表达式 181
6.3 控制流如何影响MoveNext() 183
6.3.1 await表达式之间的控制流很简单 183
6.3.□ 在循环中使用await 184
6.3.3 在try / finally块中使用await表达式 185
6.4 执行上下文和执行流程 188
6.5 再探自定义task类型 189
6.6 小结 190
第7章 C# 5附加特性 191
7.1 在foreach循环中捕获变量 191
7.□ 调用方信息attribute 193
7.□.1 基本行为 193
7.□.□ 日志 194
7.□.3 简化INotifyPropertyChanged的实现 195
7.□.4 调用方信息attribute的小众使用场景 196
7.□.5 旧版本.NET使用调用方信息attribute □01
7.3 小结 □0□
第三部分 C# 6
第8章 极简属性和表达式主体成员 □04
8.1 属性简史 □04
8.□ 自动实现属性的升级 □06
8.□.1 只读的自动实现属性 □06
8.□.□ 自动实现属性的初始化 □07
8.□.3 结构体中的自动实现属性 □08
8.3 表达式主体成员 □10
8.3.1 简化只读属性的计算 □10
8.3.□ 表达式主体方法、索引器和运算符 □13
8.3.3 C# 6中表达式主体成员的限制 □14
8.3.4 表达式主体成员使用指南 □16
8.4 小结 □18
第9章 字符串特性 □19
9.1 NET中的字符串格式化回顾 □19
9.1.1 简单字符串格式化 □19
9.1.□ 使用格式化字符串来实现自定义格式化 □□0
9.1.3 属地化 □□1
9.□ 内插字符串字面量介绍 □□4
9.□.1 简单内插 □□4
9.□.□ 使用内插字符串字面量格式化字符串 □□5
9.□.3 内插原义字符串字面量 □□5
9.□.4 编译器对内插字符串字面量的处理(□ □部分) □□6
9.3 使用FormattableSting实现属地化 □□7
9.3.1 编译器对内插字符串字面量的处理(第 □部分) □□8
9.3.□ 在特定culture下格式化一个FormattableString □□9
9.3.3 FormattableString的其他用途 □30
9.3.4 在旧版本.NET中使用FormattableString □33
9.4 使用指南和使用限制 □34
9.4.1 适合开发人员和机器,但可能不适合□终用户 □35
9.4.□ 关于内插字符串字面量的硬性限制 □36
9.4.3 何时可以用但不应该用 □38
9.5 使用nameof访问标识符 □39
9.5.1 nameof的□ □个例子 □39
9.5.□ nameof的一般用法 □41
9.5.3 使用nameof的技巧与陷阱 □43
9.6 小结 □46
□ □0章 简洁代码的特性“盛宴” □47
10.1 using static指令 □47
10.1.1 引入静态成员 □47
10.1.□ using static与扩展方法 □50
10.□ 对象初始化器和集合初始化器特性增强 □5□
10.□.1 对象初始化器中的索引器 □5□
10.□.□ 在集合初始化器中使用扩展方法 □56
10.□.3 测试代码与产品代码 □59
10.3 空值条件运算符 □60
10.3.1 简单、安全地解引用 □60
10.3.□ 关于空值条件运算符的更多细节 □61
10.3.3 处理布尔值比较 □6□
10.3.4 索引器与空值条件运算符 □63
10.3.5 使用空值条件运算符提升编程效率 □63
10.3.6 空值条件运算符的局限性 □65
10.4 异常过滤器 □65
10.4.1 异常过滤器的语法和语义 □66
10.4.□ 重试操作 □70
10.4.3 记录日志的“副作用” □7□
10.4.4 单个、有针对性的日志过滤器 □73
10.4.5 为何不直接抛出异常 □73
10.5 小结 □74
第四部分 C# 7及其后续版本
□ □1章 使用元组进行组合 □77
11.1 元组介绍 □77
11.□ 元组字面量和元组类型 □78
11.□.1 语法 □78
11.□.□ 元组字面量推断元素名称(C# 7.1) □80
11.□.3 元组用作变量的容器 □81
11.3 元组类型及其转换 □85
11.3.1 元组字面量的类型 □85
11.3.□ 从元组字面量到元组类型的转换 □87
11.3.3 元组类型之间的转换 □90
11.3.4 类型转换的应用 □9□
11.3.5 继承时的元素名称检查 □9□
11.3.6 等价运算符与不等价运算符(C# 7.3) □93
11.4 CLR 中的元组 □94
11.4.1 引入System.ValueTuple<> □94
11.4.□ 处理元素名称 □94
11.4.3 元组类型转换的实现 □96
11.4.4 元组的字符串表示 □96
11.4.5 一般等价比较和排序比较 □97
11.4.6 结构化等价比较和排序比较 □98
11.4.7 独素元组和巨型元组 □99
11.4.8 非泛型ValueTuple结构体 300
11.4.9 扩展方法 301
11.5 元组的替代品 301
11.5.1 System.Tuple<> 301
11.5.□ 匿名类型 301
11.5.3 命名类型 30□
11.6 元组的使用建议 30□
11.6.1 非公共API以及易变的代码 303
11.6.□ 局部变量 303
11.6.3 字段 304
11.6.4 元组和动态类型不太搭调 305
11.7 小结 306
□ □□章 分解与模式匹配 307
1□.1 分解元组 307
1□.1.1 分解□□变量 308
1□.1.□ 通过分解操作为已有变量或者属性赋值 310
1□.1.3 元组字面量分解的细节 313
1□.□ 非元组类型的分解操作 314
1□.□.1 实例分解方法 314
1□.□.□ 扩展分解方法与重载 315
1□.□.3 编译器对于Deconstruct调用的处理 316
1□.3 模式匹配简介 317
1□.4 C# 7.0可用的模式 319
1□.4.1 常量模式 319
1□.4.□ 类型模式 3□0
1□.4.3 var模式 3□3
1□.5 模式匹配与is运算符的搭配使用 3□4
1□.6 在switch语句中使用模式 3□5
1□.6.1 哨兵语句 3□6
1□.6.□ case标签中的模式变量的作用域 3□8
1□.6.3 基于模式的switch语句的运算顺序 3□9
1□.7 对模式特性使用的思考 330
1□.7.1 发现分解的时机 330
1□.7.□ 发现模式匹配的使用时机 331
1□.8 小结 331
□ □3章 引用传递提升执行效率 33□
13.1 回顾:ref知多少 333
13.□ ref局部变量和ref return 336
13.□.1 ref局部变量 336
13.□.□ ref return 341
13.□.3 条件运算符 :和ref值(C# 7.□) 343
13.□.4 ref readonly(C# 7.□) 343
13.3 in参数(C# 7.□) 345
13.3.1 兼容性考量 346
13.3.□ in参数惊人的不可变性:外部修改 347
13.3.3 使用in参数进行方法重载 348
13.3.4 in参数的使用指导 348
13.4 将结构体声明为只读(C# 7.□) 350
13.4.1 背景:只读变量的隐式□□ 350
13.4.□ 结构体的只读修饰符 35□
13.4.3 XML序列化是隐式读写属性 353
13.5 使用ref参数或者in参数的扩展方法(C# 7.□) 354
13.5.1 在扩展方法中使用ref/in参数来规避□□ 354
13.5.□ ref和in扩展方法的使用限制 355
13.6 类ref结构体(C# 7.□) 357
13.6.1 类ref结构体的规则 357
13.6.□ Span和栈内存分配 358
13.6.3 类ref结构体的IL表示 36□
13.7 小结 36□
□ □4章 C# 7的代码简洁之道 363
14.1 局部方法 363
14.1.1 局部方法中的变量访问 364
14.1.□ 局部方法的实现 367
14.1.3 使用指南 371
14.□ out变量 373
14.□.1 out参数的内联变量声明 374
14.□.□ C# 7.3 关于out变量和模式变量解除的限制 374
14.3 数字字面量的改进 375
14.3.1 二进制整型字面量 375
14.3.□ 下划线分隔符 376
14.4 throw表达式 377
14.5 default字面量(C# 7.1) 377
14.6 非尾部命名实参 379
14.7 私有受保护的访问权限(C# 7.□) 380
14.8 C# 7.3的一些小改进 380
14.8.1 泛型类型约束 381
14.8.□ 重载决议改进 381
14.8.3 字段的attribute支持自动实现的属性 38□
14.9 小结 383
□ □5章 C# 8及其后续 384
15.1 可空引用类型 384
15.1.1 可空引用类型可以解决什么问题 385
15.1.□ 在使用引用类型时改变其含义 385
15.1.3 输入可空引用类型 387
15.1.4 编译时和执行期的可空引用类型 387
15.1.5 damnit运算符或者bang运算符 389
15.1.6 可空引用类型迁移的经验 391
15.1.7 未来的改进 393
15.□ switch表达式 396
15.3 嵌套模式匹配 398
15.3.1 使用模式来匹配属性 398
15.3.□ 分解模式 399
15.3.3 忽略模式中的类型 399
15.4 index和range 400
15.4.1 index与range类型和字面量 401
15.4.□ 应用index和range 40□
15.5 更多异步集成 403
15.5.1 使用await实现异步资源回收 403
15.5.□ 使用foreach await的异步迭代 404
15.5.3 异步迭代器 407
15.6 预览版中尚未提供的特性 408
15.6.1 默认接口方法 408
15.6.□ 记录类型 409
15.6.3 更多特性 410
15.7 欢迎加入 41□
15.8 小结 41□
附录 特性与语言版本对照表 413

作者简介

乔恩·斯基特(Jon Skeet)
谷歌高级软件工程师,微软C# MVP,拥有近□0年C#项目开发经验。自□00□年来,他一直是C#社区、新闻组、国际会议和Stack Overflow网站中非常活跃的技术专家,回答了数以万计的C#和.NET相关问题,是Stack Overflow上的传奇贡献者。