《C# 7.0核心技术指南 原书第7版》PDF下载

  • 购买积分:26 如何计算积分?
  • 作  者:(美)约瑟夫;阿坝哈瑞;JosephAlbahari;本阿坝哈瑞Be
  • 出 版 社:北京:机械工业出版社
  • 出版年份:2019
  • ISBN:9787111631347
  • 页数:1040 页
图书介绍:本书是一本C#7.0的技术指南,全书共27章,系统、全面、细致地讲解了C#7.0从基础知识到各种高级特性的命令、语法和用法。本书的讲解深入浅出,同时为每一个知识点都专门设计了贴切、简单、易懂的学习案例,从而帮助读者准确地理解知识点的含义并快速地学以致用。

前言 1

第1章 C#和.NET Framework简介 7

1.1 面向对象 7

1.2 类型安全性 8

1.3 内存管理 9

1.4 平台支持 9

1.5 C#和CLR 9

1.6 CLR和.NET Framework 10

1.7 其他框架 11

1.7.1 遗留框架和小众框架 12

1.7.2 Windows Runtime 12

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 第一个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

2.12.5 高级命名空间特性 83

第3章 在C#中创建类型 86

3.1 类 86

3.1.1 字段 86

3.1.2 方法 87

3.1.3 实例构造器 89

3.1.4 对象初始化器 92

3.1.5 this引用 94

3.1.6 属性 94

3.1.7 索引器 97

3.1.8 常量 98

3.1.9 静态构造器 99

3.1.10 静态类 100

3.1.11 终结器 101

3.1.12 分部类型和方法 101

3.1.13 nameof运算符(C#6) 102

3.2 继承 103

3.2.1 多态 104

3.2.2 类型转换和引用转换 104

3.2.3 虚函数成员 107

3.2.4 抽象类和抽象成员 108

3.2.5 隐藏继承成员 108

3.2.6 密封函数和类 110

3.2.7 base关键字 110

3.2.8 构造器和继承 110

3.2.9 重载和解析 112

3.3 object类型 112

3.3.1 装箱和拆箱 113

3.3.2 静态和运行时类型检查 114

3.3.3 GetType方法和typeof运算符 115

3.3.4 ToString方法 115

3.3.5 object的成员列表 116

3.4 结构体 116

3.5 访问权限修饰符 118

3.5.1 示例 118

3.5.2 友元程序集 119

3.5.3 可访问性封顶 119

3.5.4 访问权限修饰符的限制 119

3.6 接口 120

3.6.1 扩展接口 121

3.6.2 显式接口实现 121

3.6.3 虚方法实现接口成员 122

3.6.4 在子类中重新实现接口 122

3.6.5 接口和装箱 124

3.7 枚举类型 125

3.7.1 枚举类型转换 126

3.7.2 标志枚举类型 126

3.7.3 枚举运算符 127

3.7.4 类型安全问题 127

3.8 嵌套类型 128

3.9 泛型 130

3.9.1 泛型类型 130

3.9.2 为什么需要泛型 131

3.9.3 泛型方法 132

3.9.4 声明类型参数 133

3.9.5 typeof和未绑定泛型类型 133

3.9.6 泛型的默认值 134

3.9.7 泛型的约束 134

3.9.8 继承泛型类型 136

3.9.9 自引用泛型声明 136

3.9.10 静态数据 136

3.9.11 类型参数的转换 137

3.9.12 协变 138

3.9.13 逆变 141

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

第4章 C#的高级特性 143

4.1 委托 143

4.1.1 用委托书写插件方法 144

4.1.2 多播委托 145

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

4.1.4 泛型委托类型 147

4.1.5 Func和Action委托 148

4.1.6 委托和接口 149

4.1.7 委托的兼容性 150

4.2 事件 152

4.2.1 标准事件模式 154

4.2.2 事件访问器 158

4.2.3 事件的修饰符 159

4.3 Lambda表达式 159

4.3.1 显式指定Lambda参数的类型 160

4.3.2 捕获外部变量 161

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

4.4 匿名方法 164

4.5 try语句和异常 165

4.5.1 catch子句 167

4.5.2 finally块 168

4.5.3 抛出异常 170

4.5.4 System.Exception的关键属性 172

4.5.5 常用的异常类型 172

4.5.6 TryXXX方法模式 173

4.5.7 异常的替代方式 173

4.6 可枚举类型和迭代器 174

4.6.1 可枚举类型 174

4.6.2 集合的初始化器 175

4.6.3 迭代器 176

4.6.4 迭代器语义 177

4.6.5 组合序列 178

4.7 可空类型 180

4.7.1 Nullable<T>结构体 180

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

4.7.3 装箱拆箱可空值 181

4.7.4 运算符优先级提升 181

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

4.7.6 可空类型和null运算符 183

4.7.7 可空类型的应用场景 184

4.7.8 可空类型的替代方案 184

4.8 扩展方法 185

4.8.1 扩展方法链 186

4.8.2 二义性与解析 186

4.9 匿名类型 188

4.10 元组(C#7) 189

4.10.1 元组元素命名 190

4.10.2 ValueTuple.Create 192

4.10.3 元组的解构 192

4.10.4 元组的比较 193

4.10.5 System.Tuple类 193

4.11 特性 193

4.11.1 特性类 194

4.11.2 命名和位置特性参数 194

4.11.3 特性的目标 195

4.11.4 指定多个特性 195

4.12 调用者信息特性 195

4.13 动态绑定 197

4.13.1 静态绑定与动态绑定 197

4.13.2 自定义绑定 198

4.13.3 语言绑定 199

4.13.4 RuntimeBinderException 200

4.13.5 动态类型的运行时表示 200

4.13.6 动态转换 201

4.13.7 var与dynamic 201

4.13.8 动态表达式 202

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

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

4.13.11 不可调用的函数 204

4.14 运算符重载 205

4.14.1 运算符函数 206

4.14.2 重载等号和比较运算符 206

4.14.3 自定义隐式和显式转换 207

4.14.4 重载true和false 208

4.15 不安全的代码和指针 209

4.15.1 指针基础 209

4.15.2 不安全的代码 209

4.15.3 fixed语句 209

4.15.4 指针取成员运算符 210

4.15.5 数组 210

4.15.6 void* 211

4.15.7 指向非托管代码的指针 212

4.16 预处理指令 212

4.16.1 Conditional特性 213

4.16.2 Pragma警告 214

4.17 XML文档 214

4.17.1 标准的XML文档标签 215

4.17.2 用户定义标签 217

4.17.3 类型或成员交叉引用 217

第5章 框架概述 219

5.1.NET标准2.0 221

5.1.1 旧版本.NET标准 222

5.1.2 引用程序集 222

5.2 CLR和核心框架 223

5.2.1 系统类型 223

5.2.2 文本处理 223

5.2.3 集合 223

5.2.4 查询 224

5.2.5 XML 224

5.2.6 诊断 224

5.2.7 并发与异步 225

5.2.8 流与I/O 225

5.2.9 网络 225

5.2.10 序列化 225

5.2.11 程序集、反射和特性 226

5.2.12 动态编程 226

5.2.13 安全性 226

5.2.14 高级线程功能 226

5.2.15 并行编程 227

5.2.16 应用程序域 227

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

5.3 应用技术 227

5.3.1 用户界面API 227

5.3.2 后台技术 230

5.3.3 分布式系统技术 232

第6章 框架基础 234

6.1 字符串与文本处理 234

6.1.1 字符 234

6.1.2 字符串 236

6.1.3 字符串的比较 240

6.1.4 StringBuilder 243

6.1.5 文本编码和Unicode 244

6.2 日期和时间 248

6.2.1 TimeSpan 248

6.2.2 DateTime和DateTimeOffset 249

6.3 日期和时区 255

6.3.1 DateTime与时区 256

6.3.2 DateTimeOffset与时区 256

6.3.3 TimeZone和TimeZoneInfo 257

6.3.4 夏令时与DateTime 261

6.4 格式化和解析 262

6.4.1 ToString和Parse 263

6.4.2 格式提供器 263

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

6.5.1 数字格式字符串 268

6.5.2 NumberStyles 270

6.5.3 Date/Time格式字符串 272

6.5.4 DateTimeStyles 275

6.5.5 枚举的格式字符串 275

6.6 其他转换机制 275

6.6.1 Convert类 276

6.6.2 XmlConvert 278

6.6.3 类型转换器 278

6.6.4 BitConverter 279

6.7 全球化 279

6.7.1 全球化检查清单 280

6.7.2 测试 280

6.8 操作数字 281

6.8.1 转换 281

6.8.2 Math 281

6.8.3 BigInteger 282

6.8.4 Complex 283

6.8.5 Random 284

6.9 枚举 285

6.9.1 枚举值转换 285

6.9.2 列举枚举值 287

6.9.3 枚举的工作方式 288

6.10 Guid结构体 288

6.11 相等比较 289

6.11.1 值相等和引用相等 289

6.11.2 标准等值比较协议 290

6.11.3 相等比较和自定义类型 295

6.12 顺序比较 300

6.12.1 IComparable 300

6.12.2 <和> 301

6.12.3 实现IComparable接口 302

6.13 实用类 303

6.13.1 Console类 303

6.13.2 Environment类 304

6.13.3 Process类 304

6.13.4 AppContext类 306

第7章 集合 307

7.1 枚举 307

7.1.1 IEnumerable和IEnumerator 308

7.1.2 IEnumerable<T>和IEnumerator<T> 309

7.1.3 实现枚举接口 311

7.2 ICollection和IList接口 315

7.2.1 ICollection<T>和ICollection 316

7.2.2 IList<T>和IList 317

7.2.3 IReadOnlyList<T> 318

7.3 Array类 318

7.3.1 创建和索引 321

7.3.2 枚举 322

7.3.3 长度和维数 323

7.3.4 搜索 323

7.3.5 排序 325

7.3.6 反转数组元素 326

7.3.7 复制数组 326

7.3.8 转换和调整大小 326

7.4 List、Queue、Stack和Set 327

7.4.1 List<T>和ArrayList 327

7.4.2 LinkedList<T> 330

7.4.3 Queue<T>和Queue 332

7.4.4 Stack<T>和Stack 332

7.4.5 BitArray 333

7.4.6 HashSet<T>和SortedSet<T> 334

7.5 字典 336

7.5.1 IDictionary<TKey,TValue> 336

7.5.2 IDictionary 338

7.5.3 Dictionary<TKey,TValue>和HashTable 339

7.5.4 OrderedDictionary 340

7.5.5 ListDictionary和HybridDictionary 340

7.5.6 排序字典 341

7.6 自定义集合与代理 342

7.6.1 Collection<T>和CollectionBase 343

7.6.2 KeyedCollection<TKey,TValue>和DictionaryBase 345

7.6.3 ReadOnlyCollection<T> 348

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

7.7.1 IEqualityComparer和EqualityComparer 350

7.7.2 IComparer和Comparer 352

7.7.3 StringComparer 353

7.7.4 IStructuralEquatable和IStructuralComparable 355

第8章 LINQ查询 356

8.1 入门 356

8.2 流式语法 358

8.2.1 查询运算符链 359

8.2.2 使用Lambda表达式 361

8.2.3 原始顺序 364

8.2.4 其他运算符 364

8.3 查询表达式 365

8.3.1 范围变量 367

8.3.2 LINQ查询语法与SQL语法 368

8.3.3 查询语法和流式语法 368

8.3.4 混合查询语法 369

8.4 延迟执行 369

8.4.1 重复执行 370

8.4.2 捕获变量 371

8.4.3 延迟执行的工作原理 372

8.4.4 串联装饰器 373

8.4.5 查询语句的执行方式 375

8.5 子查询 376

8.6 构造方式 379

8.6.1 渐进式查询构造 379

8.6.2 into关键字 380

8.6.3 查询的包装 381

8.7 映射方式 382

8.7.1 对象初始化器 382

8.7.2 匿名类型 383

8.7.3 let关键字 384

8.8 解释型查询 385

8.8.1 解释型查询的工作机制 387

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

8.8.3 AsEnumerable方法 390

8.9 LINQ to SQL和Entity Framework 391

8.9.1 LINQ to SQL的实体类 392

8.9.2 Entity Framework的实体类 393

8.9.3 DataContext和ObjectContext 395

8.9.4 关联 399

8.9.5 L2S和EF的延迟执行 400

8.9.6 DataLoadOptions 401

8.9.7 Entity Framework中的立即加载功能 403

8.9.8 更新 403

8.9.9 L2S和EF的API对比 405

8.10 构建查询表达式 406

8.10.1 委托与表达式树 406

8.10.2 表达式树 408

第9章 LINQ运算符 412

9.1 概述 413

9.1.1 序列→序列 414

9.1.2 序列→元素或标量值 415

9.1.3 void→序列 416

9.2 筛选 416

9.2.1 Where 417

9.2.2 Take和Skip运算符 419

9.2.3 TakeWhile和SkipWhile 420

9.2.4 Distinct 420

9.3 映射 420

9.3.1 Select 421

9.3.2 SelectMany 425

9.4 连接 433

9.4.1 Join和GroupJoin 433

9.4.2 Zip运算符 441

9.5 排序 441

9.6 分组 444

9.7 集合运算符 448

9.7.1 Concat和Union 448

9.7.2 Intersect和Except 448

9.8 转换方法 449

9.8.1 OfType和Cast 449

9.8.2 ToArray、ToList、ToDictionary和ToLookup 451

9.8.3 AsEnumerable和AsQueryable 451

9.9 元素运算符 452

9.9.1 First、Last和Single 452

9.9.2 ElementAt运算符 453

9.9.3 DefaultlfEmpty 453

9.10 聚合方法 454

9.10.1 Count和LongCount 454

9.10.2 Min和Max 454

9.10.3 Sum和Average 455

9.10.4 Aggregate 456

9.11 量词运算符 458

9.11.1 Contains和Any 459

9.11.2 All和SequenceEqual 459

9.12 生成集合的方法 460

9.12.1 Empty 460

9.12.2 Range和Repeat 460

第10章 LINQ to XML 461

10.1 架构概述 461

10.1.1 什么是DOM 461

10.1.2 LINQ to XML的DOM 462

10.2 X-DOM概述 462

10.2.1 加载和解析 464

10.2.2 保存和序列化 465

10.3 实例化X-DOM 466

10.3.1 函数式构建 466

10.3.2 指定内容 467

10.3.3 自动深度克隆 468

10.4 导航和查询 468

10.4.1 导航至子节点 469

10.4.2 导航至父节点 472

10.4.3 导航至同级节点 473

10.4.4 导航至节点的属性 473

10.5 更新X-DOM 474

10.5.1 简单的值更新 474

10.5.2 更新子节点和属性 474

10.5.3 通过父节点更新子节点 475

10.6 使用Value 477

10.6.1 设置Value 477

10.6.2 获得Value 478

10.6.3 值与混合内容节点 479

10.6.4 自动连接XText节点 479

10.7 文档和声明 480

10.7.1 XDocument 480

10.7.2 XML声明 482

10.8 名称和命名空间 483

10.8.1 XML中的命名空间 484

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

10.8.3 X-DOM和默认命名空间 487

10.8.4 前缀 488

10.9 注解 489

10.10 将数据映射到X-DOM 490

10.10.1 排除空元素 492

10.10.2 流映射 493

10.10.3 转换X-DOM 494

第11章 其他XML技术 497

11.1 XmlReader 497

11.1.1 读取节点 499

11.1.2 读取元素 501

11.1.3 读取属性 505

11.1.4 命名空间和前缀 506

11.2 XmlWriter 507

11.2.1 写入属性 508

11.2.2 写入其他类型节点 508

11.2.3 命名空间和前缀 509

11.3 XmlReader/XmlWriter的使用模式 509

11.3.1 处理多层次结构数据 509

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

11.4 XSD和大纲的验证 513

11.5 XSLT 516

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

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

12.1.1 标准销毁语义 519

12.1.2 销毁对象的时机 520

12.1.3 选择性销毁 522

12.1.4 在销毁时清理字段 523

12.2 自动垃圾回收 524

12.2.1 根 525

12.2.2 垃圾回收和WinRT 525

12.3 终结器 525

12.3.1 在终结器中调用Dispose 527

12.3.2 对象的复活 528

12.4 垃圾回收器的工作方式 530

12.4.1 优化技术 531

12.4.2 强制垃圾回收 534

12.4.3 垃圾回收过程的调整 534

12.4.4 内存压力 535

12.5 托管内存泄露 535

12.5.1 定时器 536

12.5.2 诊断内存泄露 538

12.6 弱引用 538

12.6.1 弱引用和缓存 539

12.6.2 弱引用和事件 540

第13章 诊断 543

13.1 条件编译 543

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

13.1.2 Conditional特性 545

13.2 Debug和Trace类 547

13.2.1 Fail和Assert方法 547

13.2.2 TraceListener类 548

13.2.3 刷新并关闭监听器 550

13.3 调试器的集成 550

13.3.1 附加和断点 551

13.3.2 Debugger特性 551

13.4 进程与线程处理 551

13.4.1 检查运行中的进程 552

13.4.2 在进程中检查线程 552

13.5 StackTrace和StackFrame类 552

13.6 Windows事件日志 554

13.6.1 写入事件日志 555

13.6.2 读取事件日志 555

13.6.3 监视事件日志 556

13.7 性能计数器 557

13.7.1 遍历可用的计数器 557

13.7.2 检索性能计数器 558

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

13.8 Stopwatch类 562

第14章 并发与异步 563

14.1 概述 563

14.2 线程 564

14.2.1 创建线程 564

14.2.2 汇合与休眠 566

14.2.3 阻塞 566

14.2.4 本地状态与共享状态 568

14.2.5 锁与线程安全 570

14.2.6 向线程传递数据 571

14.2.7 异常处理 573

14.2.8 前台线程与后台线程 574

14.2.9 线程的优先级 575

14.2.10 信号发送 576

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

14.2.12 同步上下文 578

14.2.13 线程池 579

14.3 任务 581

14.3.1 启动任务 582

14.3.2 返回值 583

14.3.3 异常 584

14.3.4 延续 585

14.3.5 TaskCompletionSource类 587

14.3.6 Task.Delay方法 589

14.4 异步原则 590

14.4.1 同步操作与异步操作 590

14.4.2 什么是异步编程 590

14.4.3 异步编程与延续 591

14.4.4 语言支持的重要性 593

14.5 C#的异步函数 595

14.5.1 等待 595

14.5.2 编写异步函数 601

14.5.3 异步Lambda表达式 605

14.5.4 WinRT中的异步方法 606

14.5.5 异步与同步上下文 606

14.5.6 优化 608

14.6 异步模式 610

14.6.1 取消操作 610

14.6.2 进度报告 612

14.6.3 基于任务的异步模式 614

14.6.4 任务组合器 614

14.7 已废弃的模式 618

14.7.1 异步编程模型(APM) 618

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

14.7.3 BackgroundWorker类 620

第15章 流与I/O 622

15.1.NET流的架构 622

15.2 使用流 624

15.2.1 读取和写入 626

15.2.2 查找 627

15.2.3 关闭和刷新 627

15.2.4 超时 628

15.2.5 线程安全 628

15.2.6 后台存储流 628

15.2.7 FileStream类 629

15.2.8 MemoryStream 632

15.2.9 PipeStream 633

15.2.10 BufferedStream 636

15.3 流适配器 637

15.3.1 文本适配器 638

15.3.2 二进制适配器 643

15.3.3 关闭和销毁流适配器 644

15.4 压缩流 646

15.5 操作ZIP文件 648

15.6 文件与目录操作 649

15.6.1 File类 649

15.6.2 Directory类 652

15.6.3 FileInfo类和DirectoryInfo类 653

15.6.4 Path类型 654

15.6.5 特殊文件夹 655

15.6.6 查询卷信息 658

15.6.7 捕获文件系统事件 658

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

15.7.1 操作目录 660

15.7.2 操作文件 661

15.7.3 UWP应用的独立存储区 662

15.8 内存映射文件 662

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

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

15.8.3 使用视图访问器 663

15.9 独立存储区 664

第16章 网络 665

16.1.NET网络架构 665

16.2 地址与端口 667

16.3 URI 668

16.4 客户端类型 670

16.4.1 WebClient类 671

16.4.2 WebRequest和WebResponse 673

16.4.3 HttpClient类 675

16.4.4 代理 679

16.4.5 身份验证 680

16.4.6 异常处理 682

16.5 使用HTTP 684

16.5.1 头部信息 684

16.5.2 查询字符串 685

16.5.3 上传表单数据 686

16.5.4 cookie 687

16.5.5 表单验证 688

16.5.6 SSL 690

16.6 编写HTTP服务器 690

16.7 使用FTP 693

16.8 使用DNS 695

16.9 通过SmtpClient类发送邮件 696

16.10 使用TCP 697

16.11 使用TCP接收POP3邮件 700

16.12 在Windows Runtime中使用TCP 702

第17章 序列化 704

17.1 序列化的概念 704

17.1.1 序列化引擎 704

17.1.2 格式化器 707

17.1.3 显式和隐式序列化 707

17.2 数据契约的序列化 708

17.2.1 DataContractSerializer与NetDataContractSerializer 708

17.2.2 使用序列化器 709

17.2.3 序列化子类 712

17.2.4 对象引用 713

17.2.5 版本容错性 716

17.2.6 成员顺序 716

17.2.7 null和空值 717

17.3 数据契约与集合 718

17.3.1 子类集合元素 719

17.3.2 自定义集合与元素名称 719

17.4 扩展数据契约 720

17.4.1 序列化与反序列化钩子 721

17.4.2 与[Serializable]的互操作 722

17.4.3 与IXmlSerializable的互操作 724

17.5 二进制序列化器 724

17.6 二进制序列化特性 726

17.6.1 [NonSerialized] 726

17.6.2 [OnDeserializing]和[OnDeserialized] 726

17.6.3 [OnSerializing]和[OnSerialized] 727

17.6.4 [OptionalField]特性和版本 728

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

17.8 XML序列化 733

17.8.1 基于特性的序列化入门 733

17.8.2 子类和子对象 735

17.8.3 序列化集合 738

17.8.4 IXmlSerializable接口 741

第18章 程序集 743

18.1 程序集的组成部分 743

18.1.1 程序集清单 744

18.1.2 应用程序清单 745

18.1.3 模块 746

18.1.4 Assembly类 747

18.2 强名称和程序集签名 748

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

18.2.2 延迟签名 750

18.3 程序集名称 751

18.3.1 完全限定名称 751

18.3.2 AssemblyName类 752

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

18.4 认证代码签名 753

18.4.1 如何进行认证代码签名 755

18.4.2 认证代码验证 756

18.5 全局程序集缓存 757

18.5.1 如何将程序集安装到GAC 758

18.5.2 GAC和版本控制 759

18.6 资源和附属程序集 759

18.6.1 直接嵌入资源 760

18.6.2.resources文件 762

18.6.3.resx文件 762

18.6.4 附属程序集 765

18.6.5 文化和子文化 767

18.7 程序集的解析和加载 768

18.7.1 程序集和类型解析规则 769

18.7.2 AssemblyResolve事件 769

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

21.2.3 实现身份和角色安全 855

21.2.4 设定用户和角色 855

21.3 操作系统安全性 856

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

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

21.4 加密概述 859

21.5 Windows数据保护 859

21.6 散列法 860

21.7 对称加密 862

21.7.1 内存加密 863

21.7.2 串联加密流 864

21.7.3 销毁加密对象 866

21.7.4 密钥管理 866

21.8 公钥加密和签名 867

21.8.1 RSA类 868

21.8.2 数字签名 869

第22章 高级线程处理 871

22.1 同步概述 871

22.2 排它锁 872

22.2.1 lock语句 872

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

22.2.3 选择同步对象 874

22.2.4 使用锁的时机 875

22.2.5 锁与原子性 876

22.2.6 嵌套锁 877

22.2.7 死锁 878

22.2.8 性能 879

22.2.9 Mutex 879

22.3 锁和线程安全性 880

22.3.1 线程安全和.NET Framework类型 882

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

22.3.3 不可变对象 885

22.4 非排它锁 886

22.4.1 信号量 886

22.4.2 读写锁 887

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

22.5.1 AutoResetEvent 892

22.5.2 ManualResetEvent 895

22.5.3 CountdownEvent 896

22.5.4 创建跨进程的EventWaitHandle 897

22.5.5 等待句柄和延续操作 897

22.5.6 将等待句柄转换为任务 898

22.5.7 WaitAny、WaitAll和SignalAndWait 899

22.6 Barrier类 900

22.7 延迟初始化 902

22.7.1 Lazy<T> 903

22.7.2 LazyInitializer类 903

22.8 线程本地存储 904

22.8.1 [ThreadStatic]特性 905

22.8.2 ThreadLocal<T>类 905

22.8.3 GetData方法和SetData方法 906

22.9 Interrupt和Abort方法 906

22.10 Suspend和Resume方法 908

22.11 定时器 908

22.11.1 多线程定时器 909

22.11.2 单线程定时器 911

第23章 并行编程 913

23.1 选择PFX的原因 913

23.1.1 PFX的概念 914

23.1.2 PFX组件 914

23.1.3 使用PFX的场合 916

23.2 PLINQ 916

23.2.1 并行执行的特性 918

23.2.2 PLINQ与顺序 919

23.2.3 PLINQ的限制 919

23.2.4 示例:并行拼写检查器 920

23.2.5 纯函数 922

23.2.6 设置并行级别 922

23.2.7 取消操作 923

23.2.8 PLINQ优化 924

23.3 Parallel类 929

23.3.1 Parallel.Invoke方法 929

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

23.4 任务并行 935

23.4.1 创建并启动任务 936

23.4.2 等待多个任务 938

23.4.3 取消任务 939

23.4.4 延续任务 940

23.4.5 任务调度器 944

23.4.6 TaskFactory类 945

23.5 处理AggregateException 945

23.6 并发集合 948

23.6.1 IProducerConsumerCollection<T>接口 949

23.6.2 ConcurrentBag<T>类 950

23.7 BlockingCollection<T>类 951

第24章 应用程序域 955

24.1 应用程序域的架构 955

24.2 创建和销毁应用程序域 956

24.3 使用多个应用程序域 958

24.4 DoCallBack方法 960

24.5 监视应用程序域 961

24.6 应用程序域和线程 961

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

24.7.1 通过“槽”共享数据 963

24.7.2 进程内Remoting通信 964

24.7.3 隔离类型与程序集 965

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

25.1 调用原生DLL 969

25.2 类型的封送 970

25.2.1 常见类型的封送 970

25.2.2 类和结构体的封送 971

25.2.3 in和out参数封送 973

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

25.4 模拟C共用体 974

25.5 共享内存 975

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

25.7 COM互操作性 981

25.7.1 COM的目的 981

25.7.2 COM类型系统基础 982

25.8 在C#中调用COM组件 983

25.8.1 可选参数和命名参数 984

25.8.2 隐式ref参数 985

25.8.3 索引器 985

25.8.4 动态绑定 986

25.9 内嵌互操作类型 987

25.10 主互操作程序集 988

25.11 在COM中调用C#对象 988

第26章 正则表达式 989

26.1 正则表达式基础 990

26.1.1 编译正则表达式 991

26.1.2 RegexOptions属性 991

26.1.3 字符转义 992

26.1.4 字符集合 993

26.2 量词符号 994

26.3 零宽度断言 995

26.3.1 前向条件和后向条件 995

26.3.2 锚点 996

26.3.3 单词边界 997

26.4 分组 998

26.5 替换并分割文本 1000

26.5.1 MatchEvaluator委托 1000

26.5.2 拆分文本 1001

26.6 正则表达式实例 1001

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

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

26.6.3 强密码验证 1002

26.6.4 每行至少80个字符 1002

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

26.6.6 匹配罗马字符 1003

26.6.7 删除重复单词 1003

26.6.8 统计单词数目 1003

26.6.9 匹配Guid 1003

26.6.10 解析XML/HTML标签 1003

26.6.11 分隔驼峰命名单词 1004

26.6.12 获得合法的文件名 1004

26.6.13 将Unicode字符转义为HTML 1004

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

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

26.7 正则表达式语言参考 1005

第27章 Roslyn编译器 1009

27.1 Roslyn架构 1010

27.2 语法树 1011

27.2.1 语法树的结构 1011

27.2.2 获取语法树 1014

27.2.3 语法树的遍历和搜索 1015

27.2.4 非关键信息 1019

27.2.5 语法树的转换 1022

27.3 编译过程和语义模型 1026

27.3.1 创建编译过程 1026

27.3.2 生成程序集 1028

27.3.3 查询语义模型 1028

27.3.4 示例:修改符号名称 1033