万本电子书0元读

万本电子书0元读

顶部广告

深入解析C#(第4版)电子书

C#领域不可多得的经典著作,新版重磅升级! 1.知名技术专家的经典之作,在C#和.NET领域享有盛誉。 2.与其他泛泛介绍C#的图书不同,本书深度探究C#的特性,并结合技术发展,引领读者深C#的时空。 3.作者从语言设计的动机出发,介绍支持这些特性的核心概念;基于C#语言的发展背景介绍新的语言特性,并用极富实际意义的示例,向读者展示编写代码和设计解决方案的理想方式。 4.新版重新组织了内容,行了重写与浓缩,还全面更新并细致剖析了C#6和C#7的新增特性。 5.提供源代码。 作者将多年的C#发经验与读者分享,读者可咀其精华、免走弯路,使程序设计水平更上一层楼。

售       价:¥

纸质售价:¥96.70购买纸书

84人正在读 | 1人评论 6.2

作       者:[英]乔恩·斯基特(Jon Skeet)

出  版  社:人民邮电出版社有限公司

出版时间:2020-10-01

字       数:44.9万

所属分类: 科技 > 计算机/网络 > 程序设计

温馨提示:数字商品不支持退换货,不提供源文件,不支持导出打印

为你推荐

  • 读书简介
  • 目录
  • 累计评论(1条)
  • 读书简介
  • 目录
  • 累计评论(1条)
C#语言简洁优雅,精妙强大,是当今编程语言的集大成者,功能不断推陈出新,受到众多发人员的推崇。本书是C#领域不可多得的经典著作,新版重磅升级,不仅重新组织了内容,还全面更新并细致剖析了C#6和C#7的新增特性,为读者奉上知识盛宴。作者在详尽展示C#各个知识的同时,注重从现象中挖掘本质,解读语言背后的设计思想,深探究了C#的核心概念和经典特性,并将这些特性融代码示例,帮助读者顺畅使用C#,享受使用C#编程的乐趣。<br/>【推荐语】<br/>C#领域不可多得的经典著作,新版重磅升级! 1.知名技术专家的经典之作,在C#和.NET领域享有盛誉。 2.与其他泛泛介绍C#的图书不同,本书深度探究C#的特性,并结合技术发展,引领读者深C#的时空。 3.作者从语言设计的动机出发,介绍支持这些特性的核心概念;基于C#语言的发展背景介绍新的语言特性,并用极富实际意义的示例,向读者展示编写代码和设计解决方案的理想方式。 4.新版重新组织了内容,行了重写与浓缩,还全面更新并细致剖析了C#6和C#7的新增特性。 5.提供源代码。 作者将多年的C#发经验与读者分享,读者可咀其精华、免走弯路,使程序设计水平更上一层楼。<br/>【作者】<br/>乔恩·斯基特(Jon Skeet) 谷歌高级软件工程师,微软C# MVP,拥有近20年C#项目发经验。自2002年来,他一直是C#社区、新闻组、国际会议和Stack Overflow网站中非常活跃的技术专家,回答了数以万计的C#和.NET相关问题,是Stack Overflow上的传奇贡献者。<br/>
目录展开

版权声明

献词

对第3版的赞誉

对第2版的赞誉

对第1版的赞誉

中文版序

前言

致谢

关于本书

目标读者

本书的内容设置:路线图

关于代码

本书论坛

其他在线资源

电子书

关于作者

关于封面插图

第一部分 C#背景介绍

第 1 章 大浪淘沙

1.1 一门与时俱进的语言

1.1.1 类型系统——全能型助手

1.1.2 代码更简洁

1.1.3 使用LINQ简化数据访问

1.1.4 异步

1.1.5 编码效率与执行效率之间的取舍

1.1.6 快速迭代:使用小版本号

1.2 一个与时俱进的平台

1.3 一个与时俱进的社区

1.4 一本与时俱进的好书

1.4.1 内容详略得当

1.4.2 使用Noda Time作为示例

1.4.3 术语选择

1.5 小结

第二部分 从C# 2到C# 5

第 2 章 C# 2

2.1 泛型

2.1.1 示例:泛型诞生前的集合

2.1.2 泛型降临

2.1.3 泛型的适用范围

2.1.4 方法类型实参的类型推断

2.1.5 类型约束

2.1.6 default运算符和typeof运算符

2.1.7 泛型类型初始化与状态

2.2 可空值类型

2.2.1 目标:表达信息的缺失

2.2.2 CLR和framework的支持:Nullable<T>结构体

2.2.3 语言层面支持

2.3 简化委托的创建

2.3.1 方法组转换

2.3.2 匿名方法

2.3.3 委托的兼容性

2.4 迭代器

2.4.1 迭代器简介

2.4.2 延迟执行

2.4.3 执行yield语句

2.4.4 延迟执行的重要性

2.4.5 处理finally块

2.4.6 处理finally的重要性

2.4.7 迭代器实现机制概览

2.5 一些小的特性

2.5.1 局部类型

2.5.2 静态类

2.5.3 属性的getter/setter访问分离

2.5.4 命名空间别名

2.5.5 编译指令

2.5.6 固定大小的缓冲区

2.5.7 InternalsVisibleTo

2.6 小结

第 3 章 C# 3:LINQ及相关特性

3.1 自动实现的属性

3.2 隐式类型

3.2.1 类型术语

3.2.2 隐式类型的局部变量

3.2.3 隐式类型的数组

3.3 对象和集合的初始化

3.3.1 对象初始化器和集合初始化器简介

3.3.2 对象初始化器

3.3.3 集合初始化器

3.3.4 仅用单一表达式就能完成初始化的好处

3.4 匿名类型

3.4.1 基本语法和行为

3.4.2 编译器生成类型

3.4.3 匿名类型的局限性

3.5 lambda表达式

3.5.1 lambda表达式语法简介

3.5.2 捕获变量

3.5.3 表达式树

3.6 扩展方法

3.6.1 声明扩展方法

3.6.2 调用扩展方法

3.6.3 扩展方法的链式调用

3.7 查询表达式

3.7.1 从C#到C#的查询表达式转换

3.7.2 范围变量和隐形标识符

3.7.3 选择使用哪种LINQ语法

3.8 终极形态:LINQ

3.9 小结

第 4 章 C# 4:互操作性提升

4.1 动态类型

4.1.1 动态类型介绍

4.1.2 超越反射的动态行为

4.1.3 动态行为机制速览

4.1.4 动态类型的局限与意外

4.1.5 动态类型的使用建议

4.2 可选形参和命名实参

4.2.1 带默认值的形参和带名字的实参

4.2.2 如何决定方法调用的含义

4.2.3 对版本号的影响

4.3 COM互操作性提升

4.3.1 链接主互操作程序集

4.3.2 COM组件中的可选形参

4.3.3 命名索引器

4.4 泛型型变

4.4.1 泛型型变示例

4.4.2 接口和委托声明中的变体语法

4.4.3 变体的使用限制

4.4.4 泛型型变实例

4.5 小结

第 5 章 编写异步代码

5.1 异步函数简介

5.1.1 异步问题初体验

5.1.2 拆分第一个例子

5.2 对异步模式的思考

5.2.1 关于异步执行本质的思考

5.2.2 同步上下文

5.2.3 异步方法模型

5.3 async方法声明

5.3.1 async方法的返回类型

5.3.2 async方法的参数

5.4 await表达式

5.4.1 可等待模式

5.4.2 await表达式的限制条件

5.5 返回值的封装

5.6 异步方法执行流程

5.6.1 await的操作对象与时机

5.6.2 await表达式的运算

5.6.3 可等待模式成员的使用

5.6.4 异常拆封

5.6.5 完成方法

5.7 异步匿名函数

5.8 C# 7自定义task类型

5.8.1 99.9%的情况:ValueTask<TResult>

5.8.2 剩下0.1%的情况:创建自定义task类型

5.9 C# 7.1中的异步Main方法

5.10 使用建议

5.10.1 使用ConfigureAwait避免上下文捕获(择机使用)

5.10.2 启动多个独立task以实现并行

5.10.3 避免同步代码和异步代码混用

5.10.4 根据需要提供取消机制

5.10.5 测试异步模式

5.11 小结

第 6 章 异步原理

6.1 生成代码的结构

6.1.1 桩方法:准备和开始第一步

6.1.2 状态机的结构

6.1.3 MoveNext()方法(整体介绍)

6.1.4 SetStateMachine方法以及状态机的装箱事宜

6.2 一个简单的MoveNext()实现

6.2.1 一个完整的具体示例

6.2.2 MoveNext()方法的通用结构

6.2.3 详探await表达式

6.3 控制流如何影响MoveNext()

6.3.1 await表达式之间的控制流很简单

6.3.2 在循环中使用await

6.3.3 在try/finally块中使用await表达式

6.4 执行上下文和执行流程

6.5 再探自定义task类型

6.6 小结

第 7 章 C# 5附加特性

7.1 在foreach循环中捕获变量

7.2 调用方信息attribute

7.2.1 基本行为

7.2.2 日志

7.2.3 简化INotifyPropertyChanged的实现

7.2.4 调用方信息attribute的小众使用场景

7.2.5 旧版本.NET使用调用方信息attribute

7.3 小结

第三部分 C# 6

第 8 章 极简属性和表达式主体成员

8.1 属性简史

8.2 自动实现属性的升级

8.2.1 只读的自动实现属性

8.2.2 自动实现属性的初始化

8.2.3 结构体中的自动实现属性

8.3 表达式主体成员

8.3.1 简化只读属性的计算

8.3.2 表达式主体方法、索引器和运算符

8.3.3 C# 6中表达式主体成员的限制

8.3.4 表达式主体成员使用指南

8.4 小结

第 9 章 字符串特性

9.1 .NET中的字符串格式化回顾

9.1.1 简单字符串格式化

9.1.2 使用格式化字符串来实现自定义格式化

9.1.3 属地化

9.2 内插字符串字面量介绍

9.2.1 简单内插

9.2.2 使用内插字符串字面量格式化字符串

9.2.3 内插原义字符串字面量

9.2.4 编译器对内插字符串字面量的处理(第1部分)

9.3 使用FormattableString实现属地化

9.3.1 编译器对内插字符串字面量的处理(第2部分)

9.3.2 在特定culture下格式化一个FormattableString

9.3.3 FormattableString的其他用途

9.3.4 在旧版本.NET中使用FormattableString

9.4 使用指南和使用限制

9.4.1 适合开发人员和机器,但可能不适合最终用户

9.4.2 关于内插字符串字面量的硬性限制

9.4.3 何时可以用但不应该用

9.5 使用nameof访问标识符

9.5.1 nameof的第一个例子

9.5.2 nameof的一般用法

9.5.3 使用nameof的技巧与陷阱

9.6 小结

第 10 章 简洁代码的特性“盛宴”

10.1 using static指令

10.1.1 引入静态成员

10.1.2 using static与扩展方法

10.2 对象初始化器和集合初始化器特性增强

10.2.1 对象初始化器中的索引器

10.2.2 在集合初始化器中使用扩展方法

10.2.3 测试代码与产品代码

10.3 空值条件运算符

10.3.1 简单、安全地解引用

10.3.2 关于空值条件运算符的更多细节

10.3.3 处理布尔值比较

10.3.4 索引器与空值条件运算符

10.3.5 使用空值条件运算符提升编程效率

10.3.6 空值条件运算符的局限性

10.4 异常过滤器

10.4.1 异常过滤器的语法和语义

10.4.2 重试操作

10.4.3 记录日志的“副作用”

10.4.4 单个、有针对性的日志过滤器

10.4.5 为何不直接抛出异常

10.5 小结

第四部分 C# 7及其后续版本

第 11 章 使用元组进行组合

11.1 元组介绍

11.2 元组字面量和元组类型

11.2.1 语法

11.2.2 元组字面量推断元素名称(C# 7.1)

11.2.3 元组用作变量的容器

11.3 元组类型及其转换

11.3.1 元组字面量的类型

11.3.2 从元组字面量到元组类型的转换

11.3.3 元组类型之间的转换

11.3.4 类型转换的应用

11.3.5 继承时的元素名称检查

11.3.6 等价运算符与不等价运算符(C# 7.3)

11.4 CLR中的元组

11.4.1 引入System.ValueTuple<...>

11.4.2 处理元素名称

11.4.3 元组类型转换的实现

11.4.4 元组的字符串表示

11.4.5 一般等价比较和排序比较

11.4.6 结构化等价比较和排序比较

11.4.7 独素元组和巨型元组

11.4.8 非泛型ValueTuple结构体

11.4.9 扩展方法

11.5 元组的替代品

11.5.1 System.Tuple<...>

11.5.2 匿名类型

11.5.3 命名类型

11.6 元组的使用建议

11.6.1 非公共API以及易变的代码

11.6.2 局部变量

11.6.3 字段

11.6.4 元组和动态类型不太搭调

11.7 小结

第 12 章 分解与模式匹配

12.1 分解元组

12.1.1 分解成新变量

12.1.2 通过分解操作为已有变量或者属性赋值

12.1.3 元组字面量分解的细节

12.2 非元组类型的分解操作

12.2.1 实例分解方法

12.2.2 扩展分解方法与重载

12.2.3 编译器对于Deconstruct调用的处理

12.3 模式匹配简介

12.4 C# 7.0可用的模式

12.4.1 常量模式

12.4.2 类型模式

12.4.3 var模式

12.5 模式匹配与is运算符的搭配使用

12.6 在switch语句中使用模式

12.6.1 哨兵语句

12.6.2 case标签中的模式变量的作用域

12.6.3 基于模式的switch语句的运算顺序

12.7 对模式特性使用的思考

12.7.1 发现分解的时机

12.7.2 发现模式匹配的使用时机

12.8 小结

第 13 章 引用传递提升执行效率

13.1 回顾:ref知多少

13.2 ref局部变量和ref return

13.2.1 ref局部变量

13.2.2 ref return

13.2.3 条件运算符?:和ref值(C# 7.2)

13.2.4 ref readonly(C# 7.2)

13.3 in参数(C# 7.2)

13.3.1 兼容性考量

13.3.2 in参数惊人的不可变性:外部修改

13.3.3 使用in参数进行方法重载

13.3.4 in参数的使用指导

13.4 将结构体声明为只读(C# 7.2)

13.4.1 背景:只读变量的隐式复制

13.4.2 结构体的只读修饰符

13.4.3 XML序列化是隐式读写属性

13.5 使用ref参数或者in参数的扩展方法(C# 7.2)

13.5.1 在扩展方法中使用ref/in参数来规避复制

13.5.2 ref和in扩展方法的使用限制

13.6 类ref结构体(C# 7.2)

13.6.1 类ref结构体的规则

13.6.2 Span<T>和栈内存分配

13.6.3 类ref结构体的IL表示

13.7 小结

第 14 章 C# 7的代码简洁之道

14.1 局部方法

14.1.1 局部方法中的变量访问

14.1.2 局部方法的实现

14.1.3 使用指南

14.2 out变量

14.2.1 out参数的内联变量声明

14.2.2 C# 7.3关于out变量和模式变量解除的限制

14.3 数字字面量的改进

14.3.1 二进制整型字面量

14.3.2 下划线分隔符

14.4 throw表达式

14.5 default字面量(C# 7.1)

14.6 非尾部命名实参

14.7 私有受保护的访问权限(C# 7.2)

14.8 C# 7.3的一些小改进

14.8.1 泛型类型约束

14.8.2 重载决议改进

14.8.3 字段的attribute支持自动实现的属性

14.9 小结

第 15 章 C# 8及其后续

15.1 可空引用类型

15.1.1 可空引用类型可以解决什么问题

15.1.2 在使用引用类型时改变其含义

15.1.3 输入可空引用类型

15.1.4 编译时和执行期的可空引用类型

15.1.5 damnit运算符或者bang运算符

15.1.6 可空引用类型迁移的经验

15.1.7 未来的改进

15.2 switch表达式

15.3 嵌套模式匹配

15.3.1 使用模式来匹配属性

15.3.2 分解模式

15.3.3 忽略模式中的类型

15.4 index和range

15.4.1 index与range类型和字面量

15.4.2 应用index和range

15.5 更多异步集成

15.5.1 使用await实现异步资源回收

15.5.2 使用foreach await的异步迭代

15.5.3 异步迭代器

15.6 预览版中尚未提供的特性

15.6.1 默认接口方法

15.6.2 记录类型

15.6.3 更多特性

15.7 欢迎加入

15.8 小结

附录 特性与语言版本对照表

看完了

累计评论(1条) 1个书友正在讨论这本书 发表评论

发表评论

发表评论,分享你的想法吧!

买过这本书的人还买过

读了这本书的人还在读

回顶部