C# 7.0核心技术指南(原书第7版)

C# 7.0核心技术指南(原书第7版)

我想读
手机扫码
  • 微信扫一扫

    关注微信公众号

因版权原因待上架

编辑推荐

C#语言进阶指南。

内容简介

C# 7.0是Microsoft对其旗舰编程语言的第六次重大升级,这次升级大大提高了C#语言的功能和灵活性。一方面,它提供了一些高级的抽象,例如查询表达式和异步延续;另一方面,它允许通过自定义值类型和可选的指针结构进行底层的效率优化。C#语言特性的增长也极大地加重了我们的学习负担。虽然一些工具如Microsoft IntelliSense和在线参考文档可以为工作提供诸多便利,但若要使用它们仍需要一些现有的概念和知识体系作为支撑。本书以简明统一的方式(而非烦琐冗长的介绍)准确阐释了这些知识。与之前的四个版本一样,本书也是围绕概念和用例来进行组织的。因此无论是顺序阅读还是随意浏览都大有裨益。虽然本书只要求读者具备基本的背景知识,但是它仍然有一定的深度,比较适合中高级读者阅读。

作者简介

作者Joseph Albahari 是《C# 6.0 in a Nutshell》以及《LINQ Pocket Reference》的合著者。他编写了流行的代码执行器与 LINQ 查询辅助工具 LINQPad。

章节目录

版权信息

O’Reilly Media,Inc.介绍

译者序

前言

第1章 C#和.NET Framework简介

1.1 面向对象

1.2 类型安全性

1.3 内存管理

1.4 平台支持

1.5 C#和CLR

1.6 CLR和.NET Framework

1.7 其他框架

1.7.1 遗留框架和小众框架

1.7.2 Windows Runtime

1.8 C#简史

1.8.1 C# 7.0新特性

1.8.2 C# 6.0新特性

1.8.3 C# 5.0新特性

1.8.4 C# 4.0新特性

1.8.5 C# 3.0新特性

1.8.6 C# 2.0新特性

第2章 C#语言基础

2.1 第一个C#程序

2.2 语法

2.2.1 标识符和关键字

2.2.2 字面量、标点与运算符

2.2.3 注释

2.3 类型基础

2.3.1 预定义类型示例

2.3.2 自定义类型示例

2.3.3 转换

2.3.4 值类型与引用类型

2.3.5 预定义类型分类

2.4 数值类型

2.4.1 数值字面量

2.4.2 数值转换

2.4.3 算术运算符

2.4.4 自增和自减运算符

2.4.5 特殊整数类型运算

2.4.6 8位和16位整数类型

2.4.7 特殊的float和double值

2.4.8 double和decimal的对比

2.4.9 实数的舍入误差

2.5 布尔类型和运算符

2.5.1 布尔类型转换

2.5.2 相等和比较运算符

2.5.3 条件运算符

2.6 字符串和字符

2.6.1 char转换

2.6.2 字符串类型

2.7 数组

2.7.1 默认数组元素初始化

2.7.2 多维数组

2.7.3 简化数组初始化表达式

2.7.4 边界检查

2.8 变量和参数

2.8.1 栈和堆

2.8.2 明确赋值

2.8.3 默认值

2.8.4 参数

2.8.5 引用局部变量(C# 7)

2.8.6 引用返回值(C# 7)

2.8.7 var隐式类型局部变量

2.9 表达式和运算符

2.9.1 基础表达式

2.9.2 空表达式

2.9.3 赋值表达式

2.9.4 运算符优先级和结合性

2.9.5 运算符表

2.10 null运算符

2.10.1 null合并运算符

2.10.2 null条件运算符(C# 6)

2.11 语句

2.11.1 声明语句

2.11.2 表达式语句

2.11.3 选择语句

2.11.4 迭代语句

2.11.5 跳转语句

2.11.6其他语句

2.12 命名空间

2.12.1 using指令

2.12.2 using static指令(C# 6)

2.12.3 命名空间中的规则

2.12.4 类型和命名空间别名

2.12.5 高级命名空间特性

第3章 在C#中创建类型

3.1 类

3.1.1 字段

3.1.2 方法

3.1.3 实例构造器

3.1.4 对象初始化器

3.1.5 this引用

3.1.6 属性

3.1.7 索引器

3.1.8 常量

3.1.9 静态构造器

3.1.10 静态类

3.1.11 终结器

3.1.12 分部类型和方法

3.1.13 nameof运算符(C#6)

3.2 继承

3.2.1 多态

3.2.2 类型转换和引用转换

3.2.3 虚函数成员

3.2.4 抽象类和抽象成员

3.2.5 隐藏继承成员

3.2.6 密封函数和类

3.2.7 base关键字

3.2.8 构造器和继承

3.2.9 重载和解析

3.3 object类型

3.3.1 装箱和拆箱

3.3.2 静态和运行时类型检查

3.3.3 GetType方法和typeof运算符

3.3.4 ToString方法

3.3.5 object的成员列表

3.4 结构体

3.5 访问权限修饰符

3.5.1 示例

3.5.2 友元程序集

3.5.3 可访问性封顶

3.5.4 访问权限修饰符的限制

3.6 接口

3.6.1 扩展接口

3.6.2 显式接口实现

3.6.3 虚方法实现接口成员

3.6.4 在子类中重新实现接口

3.6.5 接口和装箱

3.7 枚举类型

3.7.1 枚举类型转换

3.7.2 标志枚举类型

3.7.3 枚举运算符

3.7.4 类型安全问题

3.8 嵌套类型

3.9 泛型

3.9.1 泛型类型

3.9.2 为什么需要泛型

3.9.3 泛型方法

3.9.4 声明类型参数

3.9.5 typeof和未绑定泛型类型

3.9.6 泛型的默认值

3.9.7 泛型的约束

3.9.8 继承泛型类型

3.9.9 自引用泛型声明

3.9.10 静态数据

3.9.11 类型参数的转换

3.9.12 协变

3.9.13 逆变

3.9.14 C#泛型和C++模板对比

第4章 C#的高级特性

4.1 委托

4.1.1 用委托书写插件方法

4.1.2 多播委托

4.1.3 实例目标方法和静态目标方法

4.1.4 泛型委托类型

4.1.5 Func和Action委托

4.1.6 委托和接口

4.1.7 委托的兼容性

4.2 事件

4.2.1 标准事件模式

4.2.2 事件访问器

4.2.3 事件的修饰符

4.3 Lambda表达式

4.3.1 显式指定Lambda参数的类型

4.3.2 捕获外部变量

4.3.3 Lambda表达式和局部方法的对比

4.4 匿名方法

4.5 try语句和异常

4.5.1 catch子句

4.5.2 finally块

4.5.3 抛出异常

4.5.4 System.Exception的关键属性

4.5.5 常用的异常类型

4.5.6 TryXXX方法模式

4.5.7 异常的替代方式

4.6 可枚举类型和迭代器

4.6.1 可枚举类型

4.6.2 集合的初始化器

4.6.3 迭代器

4.6.4 迭代器语义

4.6.5 组合序列

4.7 可空类型

4.7.1 Nullable结构体

4.7.2 隐式和显式的可空对象转换

4.7.3 装箱拆箱可空值

4.7.4 运算符优先级提升

4.7.5 在bool?上使用&和|运算符

4.7.6 可空类型和null运算符

4.7.7 可空类型的应用场景

4.7.8 可空类型的替代方案

4.8 扩展方法

4.8.1 扩展方法链

4.8.2 二义性与解析

4.9 匿名类型

4.10 元组(C# 7)

4.10.1 元组元素命名

4.10.2 ValueTuple.Create

4.10.3 元组的解构

4.10.4 元组的比较

4.10.5 System.Tuple类

4.11 特性

4.11.1 特性类

4.11.2 命名和位置特性参数

4.11.3 特性的目标

4.11.4 指定多个特性

4.12 调用者信息特性

4.13 动态绑定

4.13.1 静态绑定与动态绑定

4.13.2 自定义绑定

4.13.3 语言绑定

4.13.4 RuntimeBinderException

4.13.5 动态类型的运行时表示

4.13.6 动态转换

4.13.7 var与dynamic

4.13.8 动态表达式

4.13.9 无动态接收者的动态调用

4.13.10 动态表达式中的静态类型

4.13.11 不可调用的函数

4.14 运算符重载

4.14.1 运算符函数

4.14.2 重载等号和比较运算符

4.14.3 自定义隐式和显式转换

4.14.4 重载true和false

4.15 不安全的代码和指针

4.15.1 指针基础

4.15.2 不安全的代码

4.15.3 fixed语句

4.15.4 指针取成员运算符

4.15.5 数组

4.15.6 void*

4.15.7 指向非托管代码的指针

4.16 预处理指令

4.16.1 Conditional特性

4.16.2 Pragma警告

4.17 XML文档

4.17.1 标准的XML文档标签

4.17.2 用户定义标签

4.17.3 类型或成员交叉引用

第5章 框架概述

5.1 .NET标准2.0

5.1.1 旧版本.NET标准

5.1.2 引用程序集

5.2 CLR和核心框架

5.2.1 系统类型

5.2.2 文本处理

5.2.3 集合

5.2.4 查询

5.2.5 XML

5.2.6 诊断

5.2.7 并发与异步

5.2.8 流与I/O

5.2.9 网络

5.2.10 序列化

5.2.11 程序集、反射和特性

5.2.12 动态编程

5.2.13 安全性

5.2.14 高级线程功能

5.2.15 并行编程

5.2.16 应用程序域

5.2.17 原生互操作性与COM互操作性

5.3 应用技术

5.3.1 用户界面API

5.3.2 后台技术

5.3.3 分布式系统技术

第6章 框架基础

6.1 字符串与文本处理

6.1.1 字符

6.1.2 字符串

6.1.3 字符串的比较

6.1.4 StringBuilder

6.1.5 文本编码和Unicode

6.2 日期和时间

6.2.1 TimeSpan

6.2.2 DateTime和DateTimeOffset

6.3 日期和时区

6.3.1 DateTime与时区

6.3.2 DateTimeOffset与时区

6.3.3 TimeZone和TimeZoneInfo

6.3.4 夏令时与DateTime

6.4 格式化和解析

6.4.1 ToString和Parse

6.4.2 格式提供器

6.5 标准格式字符串与解析标记

6.5.1 数字格式字符串

6.5.2 NumberStyles

6.5.3 Date/Time格式字符串

6.5.4 DateTimeStyles

6.5.5 枚举的格式字符串

6.6 其他转换机制

6.6.1 Convert类

6.6.2 XmlConvert

6.6.3 类型转换器

6.6.4 BitConverter

6.7 全球化

6.7.1 全球化检查清单

6.7.2 测试

6.8 操作数字

6.8.1 转换

6.8.2 Math

6.8.3 BigInteger

6.8.4 Complex

6.8.5 Random

6.9 枚举

6.9.1 枚举值转换

6.9.2 列举枚举值

6.9.3 枚举的工作方式

6.10 Guid结构体

6.11 相等比较

6.11.1 值相等和引用相等

6.11.2 标准等值比较协议

6.11.3 相等比较和自定义类型

6.12 顺序比较

6.12.1 IComparable

6.12.2 <和>

6.12.3 实现IComparable接口

6.13 实用类

6.13.1 Console类

6.13.2 Environment类

6.13.3 Process类

6.13.4 AppContext类

第7章 集合

7.1 枚举

7.1.1 IEnumerable和IEnumerator

7.1.2 IEnumerable和IEnumerator

7.1.3 实现枚举接口

7.2 ICollection和IList接口

7.2.1 ICollection和ICollection

7.2.2 IList和IList

7.2.3 IReadOnlyList

7.3 Array类

7.3.1 创建和索引

7.3.2 枚举

7.3.3 长度和维数

7.3.4 搜索

7.3.5 排序

7.3.6 反转数组元素

7.3.7 复制数组

7.3.8 转换和调整大小

7.4 List、Queue、Stack和Set

7.4.1 List和ArrayList

7.4.2 LinkedList

7.4.3 Queue和Queue

7.4.4 Stack和Stack

7.4.5 BitArray

7.4.6 HashSet和SortedSet

7.5 字典

7.5.1 IDictionary

7.5.2 IDictionary

7.5.3 Dictionary和HashTable

7.5.4 OrderedDictionary

7.5.5 ListDictionary和HybridDictionary

7.5.6 排序字典

7.6 自定义集合与代理

7.6.1 Collection和CollectionBase

7.6.2 KeyedCollection和DictionaryBase

7.6.3 ReadOnlyCollection

7.7 扩展相等比较和排序操作

7.7.1 IEqualityComparer和EqualityComparer

7.7.2 IComparer和Comparer

7.7.3 StringComparer

7.7.4 IStructuralEquatable和IStructuralComparable

第8章 LINQ查询

8.1 入门

8.2 流式语法

8.2.1 查询运算符链

8.2.2 使用Lambda表达式

8.2.3 原始顺序

8.2.4 其他运算符

8.3 查询表达式

8.3.1 范围变量

8.3.2 LINQ查询语法与SQL语法

8.3.3 查询语法和流式语法

8.3.4 混合查询语法

8.4 延迟执行

8.4.1 重复执行

8.4.2 捕获变量

8.4.3 延迟执行的工作原理

8.4.4 串联装饰器

8.4.5 查询语句的执行方式

8.5 子查询

8.6 构造方式

8.6.1 渐进式查询构造

8.6.2 into关键字

8.6.3 查询的包装

8.7 映射方式

8.7.1 对象初始化器

8.7.2 匿名类型

8.7.3 let关键字

8.8 解释型查询

8.8.1 解释型查询的工作机制

8.8.2 综合使用解释型查询和本地查询

8.8.3 AsEnumerable方法

8.9 LINQ to SQL和Entity Framework

8.9.1 LINQ to SQL的实体类

8.9.2 Entity Framework的实体类

8.9.3 DataContext和ObjectContext

8.9.4 关联

8.9.5 L2S和EF的延迟执行

8.9.6 DataLoadOptions

8.9.7 Entity Framework中的立即加载功能

8.9.8 更新

8.9.9 L2S和EF的API对比

8.10 构建查询表达式

8.10.1 委托与表达式树

8.10.2 表达式树

第9章 LINQ运算符

9.1 概述

9.1.1 序列→序列

9.1.2 序列→元素或标量值

9.1.3 void→序列

9.2 筛选

9.2.1 Where

9.2.2 Take和Skip运算符

9.2.3 TakeWhile和SkipWhile

9.2.4 Distinct

9.3 映射

9.3.1 Select

9.3.2 SelectMany

9.4 连接

9.4.1 Join和GroupJoin

9.4.2 Zip运算符

9.5 排序

9.6 分组

9.7 集合运算符

9.7.1 Concat和Union

9.7.2 Intersect和Except

9.8 转换方法

9.8.1 OfType和Cast

9.8.2 ToArray、ToList、ToDictionary和ToLookup

9.8.3 AsEnumerable和AsQueryable

9.9 元素运算符

9.9.1 First、Last和Single

9.9.2 ElementAt运算符

9.9.3 DefaultIfEmpty

9.10 聚合方法

9.10.1 Count和LongCount

9.10.2 Min和Max

9.10.3 Sum和Average

9.10.4 Aggregate

9.11 量词运算符

9.11.1 Contains和Any

9.11.2 All和SequenceEqual

9.12 生成集合的方法

9.12.1 Empty

9.12.2 Range和Repeat

第10章 LINQ to XML

10.1 架构概述

10.1.1 什么是DOM

10.1.2 LINQ to XML的DOM

10.2 X-DOM概述

10.2.1 加载和解析

10.2.2 保存和序列化

10.3 实例化X-DOM

10.3.1 函数式构建

10.3.2 指定内容

10.3.3 自动深度克隆

10.4 导航和查询

10.4.1 导航至子节点

10.4.2 导航至父节点

10.4.3 导航至同级节点

10.4.4 导航至节点的属性

10.5 更新X-DOM

10.5.1 简单的值更新

10.5.2 更新子节点和属性

10.5.3 通过父节点更新子节点

10.6 使用Value

10.6.1 设置Value

10.6.2 获得Value

10.6.3 值与混合内容节点

10.6.4 自动连接XText节点

10.7 文档和声明

10.7.1 XDocument

10.7.2 XML声明

10.8 名称和命名空间

10.8.1 XML中的命名空间

10.8.2 在X-DOM中指定命名空间

10.8.3 X-DOM和默认命名空间

10.8.4 前缀

10.9 注解

10.10 将数据映射到X-DOM

10.10.1 排除空元素

10.10.2 流映射

10.10.3 转换X-DOM

第11章 其他XML技术

11.1 XmlReader

11.1.1 读取节点

11.1.2 读取元素

11.1.3 读取属性

11.1.4 命名空间和前缀

11.2 XmlWriter

11.2.1 写入属性

11.2.2 写入其他类型节点

11.2.3 命名空间和前缀

11.3 XmlReader/XmlWriter的使用模式

11.3.1 处理多层次结构数据

11.3.2 混合使用XmlReader/XmlWriter和X-DOM

11.4 XSD和大纲的验证

11.5 XSLT

第12章 对象销毁与垃圾回收

12.1 IDisposable接口、Dispose方法和Close方法

12.1.1 标准销毁语义

12.1.2 销毁对象的时机

12.1.3 选择性销毁

12.1.4 在销毁时清理字段

12.2 自动垃圾回收

12.2.1 根

12.2.2 垃圾回收和WinRT

12.3 终结器

12.3.1 在终结器中调用Dispose

12.3.2 对象的复活

12.4 垃圾回收器的工作方式

12.4.1 优化技术

12.4.2 强制垃圾回收

12.4.3 垃圾回收过程的调整

12.4.4 内存压力

12.5 托管内存泄露

12.5.1 定时器

12.5.2 诊断内存泄露

12.6 弱引用

12.6.1 弱引用和缓存

12.6.2 弱引用和事件

第13章 诊断

13.1 条件编译

13.1.1 条件编译与静态变量标志

13.1.2 Conditional特性

13.2 Debug和Trace类

13.2.1 Fail和Assert方法

13.2.2 TraceListener类

13.2.3 刷新并关闭监听器

13.3 调试器的集成

13.3.1 附加和断点

13.3.2 Debugger特性

13.4 进程与线程处理

13.4.1 检查运行中的进程

13.4.2 在进程中检查线程

13.5 StackTrace和StackFrame类

13.6 Windows事件日志

13.6.1 写入事件日志

13.6.2 读取事件日志

13.6.3 监视事件日志

13.7 性能计数器

13.7.1 遍历可用的计数器

13.7.2 检索性能计数器

13.7.3 创建计数器并写入性能数据

13.8 Stopwatch类

第14章 并发与异步

14.1 概述

14.2 线程

14.2.1 创建线程

14.2.2 汇合与休眠

14.2.3 阻塞

14.2.4 本地状态与共享状态

14.2.5 锁与线程安全

14.2.6 向线程传递数据

14.2.7 异常处理

14.2.8 前台线程与后台线程

14.2.9 线程的优先级

14.2.10 信号发送

14.2.11 富客户端应用程序的线程

14.2.12 同步上下文

14.2.13 线程池

14.3 任务

14.3.1 启动任务

14.3.2 返回值

14.3.3 异常

14.3.4 延续

14.3.5 TaskCompletionSource类

14.3.6 Task.Delay方法

14.4 异步原则

14.4.1 同步操作与异步操作

14.4.2 什么是异步编程

14.4.3 异步编程与延续

14.4.4 语言支持的重要性

14.5 C#的异步函数

14.5.1 等待

14.5.2 编写异步函数

14.5.3 异步Lambda表达式

14.5.4 WinRT中的异步方法

14.5.5 异步与同步上下文

14.5.6 优化

14.6 异步模式

14.6.1 取消操作

14.6.2 进度报告

14.6.3 基于任务的异步模式

14.6.4 任务组合器

14.7 已废弃的模式

14.7.1 异步编程模型(APM)

14.7.2 基于事件的异步模式(EAP)

14.7.3 BackgroundWorker类

第15章 流与I/O

15.1 .NET流的架构

15.2 使用流

15.2.1 读取和写入

15.2.2 查找

15.2.3 关闭和刷新

15.2.4 超时

15.2.5 线程安全

15.2.6 后台存储流

15.2.7 FileStream类

15.2.8 MemoryStream

15.2.9 PipeStream

15.2.10 BufferedStream

15.3 流适配器

15.3.1 文本适配器

15.3.2 二进制适配器

15.3.3 关闭和销毁流适配器

15.4 压缩流

15.5 操作ZIP文件

15.6 文件与目录操作

15.6.1 File类

15.6.2 Directory类

15.6.3 FileInfo类和DirectoryInfo类

15.6.4 Path类型

15.6.5 特殊文件夹

15.6.6 查询卷信息

15.6.7 捕获文件系统事件

15.7 在UWP中进行文件I/O操作

15.7.1 操作目录

15.7.2 操作文件

15.7.3 UWP应用的独立存储区

15.8 内存映射文件

15.8.1 内存映射文件和随机I/O

15.8.2 内存映射文件和共享内存

15.8.3 使用视图访问器

15.9 独立存储区

第16章 网络

16.1 .NET网络架构

16.2 地址与端口

16.3 URI

16.4 客户端类型

16.4.1 WebClient类

16.4.2 WebRequest和WebResponse

16.4.3 HttpClient类

16.4.4 代理

16.4.5 身份验证

16.4.6 异常处理

16.5 使用HTTP

16.5.1 头部信息

16.5.2 查询字符串

16.5.3 上传表单数据

16.5.4 cookie

16.5.5 表单验证

16.5.6 SSL

16.6 编写HTTP服务器

16.7 使用FTP

16.8 使用DNS

16.9 通过SmtpClient类发送邮件

16.10 使用TCP

16.11 使用TCP接收POP3邮件

16.12 在Windows Runtime中使用TCP

第17章 序列化

17.1 序列化的概念

17.1.1 序列化引擎

17.1.2 格式化器

17.1.3 显式和隐式序列化

17.2 数据契约的序列化

17.2.1 DataContractSerializer与NetDataContractSerializer

17.2.2 使用序列化器

17.2.3 序列化子类

17.2.4 对象引用

17.2.5 版本容错性

17.2.6 成员顺序

17.2.7 null和空值

17.3 数据契约与集合

17.3.1 子类集合元素

17.3.2 自定义集合与元素名称

17.4 扩展数据契约

17.4.1 序列化与反序列化钩子

17.4.2 与[Serializable]的互操作

17.4.3 与IXmlSerializable的互操作

17.5 二进制序列化器

17.6 二进制序列化特性

17.6.1 [NonSerialized]

17.6.2 [OnDeserializing]和[OnDeserialized]

17.6.3 [OnSerializing]和[OnSerialized]

17.6.4 [OptionalField]特性和版本

17.7 使用ISerializable接口进行二进制序列化

17.8 XML序列化

17.8.1 基于特性的序列化入门

17.8.2 子类和子对象

17.8.3 序列化集合

17.8.4 IXmlSerializable接口

第18章 程序集

18.1 程序集的组成部分

18.1.1 程序集清单

18.1.2 应用程序清单

18.1.3 模块

18.1.4 Assembly类

18.2 强名称和程序集签名

18.2.1 如何为程序集添加强名称

18.2.2 延迟签名

18.3 程序集名称

18.3.1 完全限定名称

18.3.2 AssemblyName类

18.3.3 程序集的信息版本和文件版本

18.4 认证代码签名

18.4.1 如何进行认证代码签名

18.4.2 认证代码验证

18.5 全局程序集缓存

18.5.1 如何将程序集安装到GAC

18.5.2 GAC和版本控制

18.6 资源和附属程序集

18.6.1 直接嵌入资源

18.6.2 .resources文件

18.6.3 .resx文件

18.6.4 附属程序集

18.6.5 文化和子文化

18.7 程序集的解析和加载

18.7.1 程序集和类型解析规则

18.7.2 AssemblyResolve事件

18.7.3 加载程序集

18.8 在基础目录之外部署程序集

18.9 打包单个可执行文件

18.10 处理未引用的程序集

第19章 反射和元数据

19.1 反射和激活类型

19.1.1 获取类型

19.1.2 类型名称

19.1.3 基本类型和接口

19.1.4 实例化类型

19.1.5 泛型类型

19.2 反射并调用成员

19.2.1 成员类型

19.2.2 C#成员与CLR成员

19.2.3 泛型类型成员

19.2.4 动态调用成员

19.2.5 方法的参数

19.2.6 使用委托提高性能

19.2.7 访问非公有成员

19.2.8 泛型方法

19.2.9 调用未知类型的泛型接口成员

19.3 反射程序集

19.3.1 将程序集加载至只反射的上下文中

19.3.2 模块

19.4 使用特性

19.4.1 特性基础

19.4.2 AttributeUsage特性

19.4.3 定义自定义的特性

19.4.4 在运行时检索特性

19.4.5 在只反射上下文下检索特性

19.5 动态生成代码

19.5.1 使用DynamicMethod生成IL

19.5.2 评估栈

19.5.3 向动态方法传递参数

19.5.4 生成局部变量

19.5.5 分支

19.5.6 实例化对象和调用实例方法

19.5.7 异常处理

19.6 生成程序集和类型

19.6.1 保存生成的程序集

19.6.2 Reflection.Emit对象模型

19.7 生成类型成员

19.7.1 生成方法

19.7.2 生成字段和属性

19.7.3 生成构造器

19.7.4 附加特性

19.8 生成泛型方法和类型

19.8.1 定义泛型方法

19.8.2 定义泛型类型

19.9 复杂的生成目标

19.9.1 未创建的封闭式泛型

19.9.2 循环依赖

19.10 解析IL

第20章 动态编程

20.1 动态语言运行时

20.2 数值类型统一

20.3 动态成员重载解析

20.3.1 简化访问者模式

20.3.2 调用未知类型的泛型类型成员

20.4 实现动态对象

20.4.1 DynamicObject

20.4.2 ExpandoObject

20.5 与动态语言进行互操作

第21章 安全

21.1 代码访问安全性

21.2 身份和角色安全

21.2.1 权限

21.2.2 声明式安全性与命令式安全性

21.2.3 实现身份和角色安全

21.2.4 设定用户和角色

21.3 操作系统安全性

21.3.1 在标准用户账户下运行程序

21.3.2 管理员权限提升与虚拟化

21.4 加密概述

21.5 Windows数据保护

21.6 散列法

21.7 对称加密

21.7.1 内存加密

21.7.2 串联加密流

21.7.3 销毁加密对象

21.7.4 密钥管理

21.8 公钥加密和签名

21.8.1 RSA类

21.8.2 数字签名

第22章 高级线程处理

22.1 同步概述

22.2 排它锁

22.2.1 lock语句

22.2.2 Monitor.Enter方法和Monitor.Exit方法

22.2.3 选择同步对象

22.2.4 使用锁的时机

22.2.5 锁与原子性

22.2.6 嵌套锁

22.2.7 死锁

22.2.8 性能

22.2.9 Mutex

22.3 锁和线程安全性

22.3.1 线程安全和.NET Framework类型

22.3.2 应用服务器的线程安全性

22.3.3 不可变对象

22.4 非排它锁

22.4.1 信号量

22.4.2 读写锁

22.5 使用事件等待句柄发送信号

22.5.1 AutoResetEvent

22.5.2 ManualResetEvent

22.5.3 CountdownEvent

22.5.4 创建跨进程的EventWaitHandle

22.5.5 等待句柄和延续操作

22.5.6 将等待句柄转换为任务

22.5.7 WaitAny、WaitAll和SignalAndWait

22.6 Barrier类

22.7 延迟初始化

22.7.1 Lazy

22.7.2 LazyInitializer类

22.8 线程本地存储

22.8.1 [ThreadStatic]特性

22.8.2 ThreadLocal

22.8.3 GetData方法和SetData方法

22.9 Interrupt和Abort方法

22.10 Suspend和Resume方法

22.11 定时器

22.11.1 多线程定时器

22.11.2 单线程定时器

第23章 并行编程

23.1 选择PFX的原因

23.1.1 PFX的概念

23.1.2 PFX组件

23.1.3 使用PFX的场合

23.2 PLINQ

23.2.1 并行执行的特性

23.2.2 PLINQ与顺序

23.2.3 PLINQ的限制

23.2.4 示例:并行拼写检查器

23.2.5 纯函数

23.2.6 设置并行级别

23.2.7 取消操作

23.2.8 PLINQ优化

23.3 Parallel类

23.3.1 Parallel.Invoke方法

23.3.2 Parallel.For方法和Parallel.ForEach方法

23.4 任务并行

23.4.1 创建并启动任务

23.4.2 等待多个任务

23.4.3 取消任务

23.4.4 延续任务

23.4.5 任务调度器

23.4.6 TaskFactory类

23.5 处理AggregateException

23.6 并发集合

23.6.1 IProducerConsumerCollection接口

23.6.2 ConcurrentBag

23.7 BlockingCollection

第24章 应用程序域

24.1 应用程序域的架构

24.2 创建和销毁应用程序域

24.3 使用多个应用程序域

24.4 DoCallBack方法

24.5 监视应用程序域

24.6 应用程序域和线程

24.7 在应用程序域间共享数据

24.7.1 通过“槽”共享数据

24.7.2 进程内Remoting通信

24.7.3 隔离类型与程序集

第25章 原生程序和COM组件互操作性

25.1 调用原生DLL

25.2 类型的封送

25.2.1 常见类型的封送

25.2.2 类和结构体的封送

25.2.3 in和out参数封送

25.3 非托管代码中的回调函数

25.4 模拟C共用体

25.5 共享内存

25.6 将结构体映射到非托管内存中

25.7 COM互操作性

25.7.1 COM的目的

25.7.2 COM类型系统基础

25.8 在C#中调用COM组件

25.8.1 可选参数和命名参数

25.8.2 隐式ref参数

25.8.3 索引器

25.8.4 动态绑定

25.9 内嵌互操作类型

25.10 主互操作程序集

25.11 在COM中调用C#对象

第26章 正则表达式

26.1 正则表达式基础

26.1.1 编译正则表达式

26.1.2 RegexOptions属性

26.1.3 字符转义

26.1.4 字符集合

26.2 量词符号

26.3 零宽度断言

26.3.1 前向条件和后向条件

26.3.2 锚点

26.3.3 单词边界

26.4 分组

26.5 替换并分割文本

26.5.1 MatchEvaluator委托

26.5.2 拆分文本

26.6 正则表达式实例

26.6.1 匹配美国社会保险号/电话号码

26.6.2 提取“name=value”中的名称和值(一行一个)

26.6.3 强密码验证

26.6.4 每行至少80个字符

26.6.5 解析日期/时间(N/N/N H:M:S AM/PM)

26.6.6 匹配罗马字符

26.6.7 删除重复单词

26.6.8 统计单词数目

26.6.9 匹配Guid

26.6.10 解析XML/HTML标签

26.6.11 分隔驼峰命名单词

26.6.12 获得合法的文件名

26.6.13 将Unicode字符转义为HTML

26.6.14 反转义HTTP查询字符串中的字符

26.6.15 从网站统计日志中解析谷歌搜索关键词

26.7 正则表达式语言参考

第27章 Roslyn编译器

27.1 Roslyn架构

27.2 语法树

27.2.1 语法树的结构

27.2.2 获取语法树

27.2.3 语法树的遍历和搜索

27.2.4 非关键信息

27.2.5 语法树的转换

27.3 编译过程和语义模型

27.3.1 创建编译过程

27.3.2 生成程序集

27.3.3 查询语义模型

27.3.4 示例:修改符号名称

作者介绍

封面介绍

C# 7.0核心技术指南(原书第7版)是2019年由机械工业出版社华章分社出版,作者美约瑟夫阿坝哈瑞JosephA。

得书感谢您对《C# 7.0核心技术指南(原书第7版)》关注和支持,如本书内容有不良信息或侵权等情形的,请联系本网站。

你可能喜欢
Python基础教程(第3版) 电子书

手把手带你从零开始学习Python。
C#从入门到精通(第2版) 电子书

本书以零基础讲解为宗旨,用实例引导读者学习,深入浅出地介绍了C#的相关知识和实战技能。
教孩子学编程(信息学奥赛C语言版) 电子书

家长老师指南:教孩子学编程,掌握C语言基础。
C#完全自学教程 电子书

本书从初学者角度出发,介绍了使用C#进行WinForms程序开发的常用技术和方法。
趣学算法 电子书

50多个实例展示算法的设计、实现、复杂性分析及优化过程,培养算法思维,带你感受算法之美。
R语言入门与实践 电子书

本书适合立志成为数据科学家的R语言初学者阅读。