图书介绍
C#高级编程PDF|Epub|txt|kindle电子书版本网盘下载
![C#高级编程](https://www.shukui.net/cover/27/32459620.jpg)
- (美)克里斯琴·内格尔(CHRISTIANNAGEL)著;李铭译 著
- 出版社: 北京:清华大学出版社
- ISBN:9787302522560
- 出版时间:2019
- 标注页数:1039页
- 文件大小:420MB
- 文件页数:1075页
- 主题词:C语言-程序设计
PDF下载
下载说明
C#高级编程PDF格式电子书版下载
下载的文件为RAR压缩包。需要使用解压软件进行解压得到PDF格式图书。建议使用BT下载工具Free Download Manager进行下载,简称FDM(免费,没有广告,支持多平台)。本站资源全部打包为BT种子。所以需要使用专业的BT下载软件进行下载。如BitComet qBittorrent uTorrent等BT下载工具。迅雷目前由于本站不是热门资源。不推荐使用!后期资源热门了。安装了迅雷也可以迅雷进行下载!
(文件页数 要大于 标注页数,上中下等多册电子书除外)
注意:本站所有压缩包均有解压码: 点击下载压缩包解压工具
图书目录
第Ⅰ部分 C#语言3
第1章.NET应用程序和工具3
1.1 选择技术3
1.2 回顾.NET历史4
1.2.1 C# 1.0——一种新语言4
1.2.2 带有泛型的C# 2和.NET 26
1.2.3.NET 3.0——Windows PresentationFoundation6
1.2.4 C#3和.NET 3.5——LINQ6
1.2.5 C# 4和.NET 4.0——dynamic和TPL7
1.2.6 C# 5和异步编程7
1.2.7 C# 6和.NET Core 1.08
1.2.8 C# 7和.NET Core 2.08
1.2.9 选择技术,继续前进9
1.3.NET术语10
1.3.1.NET Framework11
1.3.2.NET Core11
1.3.3.NET Standard11
1.3.4 NuGet包12
1.3.5 名称空间12
1.3.6 公共语言运行库13
1.3.7 Windows运行库13
1.4 用.NET Core CLI编译14
1.4.1 设置环境14
1.4.2 创建应用程序15
1.4.3 构建应用程序16
1.4.4 运行应用程序16
1.4.5 创建Web应用程序17
1.4.6 发布应用程序17
1.5 使用Visual Studio 201719
1.6 应用程序类型和技术24
1.6.1 数据访问24
1.6.2 Windows应用程序24
1.6.3 Xamarin24
1.6.4 Web应用程序25
1.6.5 Web API25
1.6.6 WebHooks和SignaIR25
1.6.7 Microsoft Azure25
1.7 开发工具26
1.7.1 Visual Studio Community27
1.7.2 Visual Studio Professional27
1.7.3 Visual Studio Enterprise27
1.7.4 Visual Studio for Mac27
1.7.5 Visual Studio Code27
1.8 小结27
第2章 核心C29
2.1 C#基础29
2.2 变量31
2.2.1 初始化变量31
2.2.2 类型推断32
2.2.3 变量的作用域33
2.2.4 常量34
2.3 预定义数据类型35
2.3.1 值类型和引用类型35
2.3.2.NET类型36
2.3.3 预定义的值类型36
2.3.4 预定义的引用类型40
2.4 程序流控制42
2.4.1 条件语句42
2.4.2 循环44
2.4.3 跳转语句47
2.5 名称空间47
2.5.1 using语句48
2.5.2 名称空间的别名49
2.6 Main()方法49
2.7 使用注释50
2.7.1 源文件中的内部注释50
2.7.2 XML文档51
2.8 C#预处理器指令52
2.8.1 #define和#undef52
2.8.2 #if、#elif、#else和#endif52
2.8.3 #warning和#error53
2.8.4 #region和#endregion53
2.8.5 #line53
2.8.6 #pragma54
2.9 C#编程准则54
2.9.1 关于标识符的规则54
2.9.2 用法约定55
2.10 小结58
第3章 对象和类型59
3.1 创建及使用类60
3.2 类和结构60
3.3 类61
3.3.1 字段61
3.3.2 只读字段61
3.3.3 属性62
3.3.4 匿名类型65
3.3.5 方法66
3.3.6 构造函数69
3.4 结构73
3.4.1 结构是值类型74
3.4.2 只读结构75
3.4.3 结构和继承75
3.4.4 结构的构造函数75
3.4.5 ref结构76
3.5 按值和按引用传递参数76
3.5.1 ref参数77
3.5.2 out参数77
3.5.3 in参数78
3.6 可空类型79
3.7 枚举类型79
3.8 部分类81
3.9 扩展方法83
3.10 Object类83
3.11 小结84
第4章 继承85
4.1 面向对象85
4.2 继承的类型85
4.2.1 多重继承86
4.2.2 结构和类86
4.3 实现继承86
4.3.1 虚方法87
4.3.2 多态性88
4.3.3 隐藏方法89
4.3.4 调用方法的基类版本90
4.3.5 抽象类和抽象方法90
4.3.6 密封类和密封方法91
4.3.7 派生类的构造函数91
4.4 修饰符93
4.4.1 访问修饰符93
4.4.2 其他修饰符94
4.5 接口94
4.5.1 定义和实现接口95
4.5.2 派生的接口97
4.6 is和as运算符98
4.7 小结99
第5章 泛型100
5.1 泛型概述100
5.1.1 性能101
5.1.2 类型安全102
5.1.3 二进制代码的重用102
5.1.4 代码的扩展102
5.1.5 命名约定102
5.2 创建泛型类103
5.3 泛型类的功能105
5.3.1 默认值106
5.3.2 约束106
5.3.3 继承108
5.3.4 静态成员108
5.4 泛型接口109
5.4.1 协变和抗变109
5.4.2 泛型接口的协变110
5.4.3 泛型接口的抗变111
5.5 泛型结构111
5.6 泛型方法113
5.6.1 泛型方法示例113
5.6.2 带约束的泛型方法114
5.6.3 带委托的泛型方法115
5.6.4 泛型方法规范115
5.7 小结116
第6章 运算符和类型强制转换117
6.1 运算符和类型转换117
6.2 运算符118
6.2.1 运算符的简化操作119
6.2.2 运算符的优先级和关联性125
6.3 使用二进制运算符126
6.3.1 位的移动128
6.3.2 有符号数和无符号数128
6.4 类型的安全性129
6.4.1 类型转换130
6.4.2 装箱和拆箱132
6.5 比较对象的相等性133
6.5.1 比较引用类型的相等性133
6.5.2 比较值类型的相等性134
6.6 运算符重载135
6.6.1 运算符的工作方式135
6.6.2 运算符重载的示例:Vector结构136
6.6.3 比较运算符的重载139
6.6.4 可以重载的运算符140
6.7 实现自定义的索引运算符141
6.8 用户定义的类型强制转换142
6.8.1 实现用户定义的类型强制转换143
6.8.2 多重类型强制转换147
6.9 小结150
第7章 数组151
7.1 相同类型的多个对象151
7.2 简单数组152
7.2.1 数组的声明152
7.2.2 数组的初始化152
7.2.3 访问数组元素153
7.2.4 使用引用类型153
7.3 多维数组154
7.4 锯齿数组155
7.5 Array类156
7.5.1 创建数组156
7.5.2 复制数组156
7.5.3 排序157
7.6 数组作为参数159
7.7 数组协变159
7.8 枚举160
7.8.1 IEnumerator接口160
7.8.2 foreach语句160
7.8.3 yield语句161
7.9 结构比较164
7.10 Span165
7.10.1 创建切片166
7.10.2 使用Span改变值166
7.10.3 只读的Span167
7.11 数组池167
7.11.1 创建数组池168
7.11.2 从池中租用内存168
7.11.3 将内存返回给池168
7.12 小结169
第8章 委托、lambda表达式和事件170
8.1 引用方法170
8.2 委托170
8.2.1 声明委托171
8.2.2 使用委托172
8.2.3 简单的委托示例174
8.2.4 Action<I>和Func<I>委托175
8.2.5 BubbleSorter示例176
8.2.6 多播委托177
8.2.7 匿名方法180
8.3 lambda表达式181
8.3.1 参数181
8.3.2 多行代码181
8.3.3 闭包182
8.4 事件182
8.4.1 事件发布程序182
8.4.2 事件侦听器184
8.5 小结185
第9章 字符串和正则表达式186
9.1 System.String类187
9.1.1 构建字符串188
9.1.2 StringBuilder成员190
9.2 字符串格式190
9.2.1 字符串插值191
9.2.2 日期时间和数字的格式192
9.2.3 自定义字符串格式193
9.3 正则表达式194
9.3.1 正则表达式概述194
9.3.2 RegularExpressionsPlayground示例195
9.3.3 显示结果197
9.3.4 匹配、组和捕获198
9.4 字符串和Span200
9.5 小结201
第10章 集合202
10.1 概述202
10.2 集合接口和类型203
10.3 列表203
10.3.1 创建列表204
10.3.2 只读集合210
10.4 队列210
10.5 栈213
10.6 链表214
10.7 有序列表217
10.8 字典219
10.8.1 字典初始化器219
10.8.2 键的类型219
10.8.3 字典示例220
10.8.4 Lookup类223
10.8.5 有序字典223
10.9 集224
10.10 性能225
10.11 小结227
第11章 特殊的集合228
11.1 概述228
11.2 处理位228
11.2.1 BitArray类229
11.2.2 BitVector32结构230
11.3 可观察的集合232
11.4 不变的集合233
11.4.1 使用构建器和不变的集合235
11.4.2 不变集合类型和接口235
11.4.3 使用LINQ和不变的数组236
11.5 并发集合236
11.5.1 创建管道237
11.5.2 使用BlockingCollection239
11.5.3 使用ConcurrentDictionary240
11.5.4 完成管道241
11.6 小结242
第12章 LINQ243
12.1 LINQ概述243
12.1.1 列表和实体244
12.1.2 LINQ查询246
12.1.3 扩展方法246
12.1.4 推迟查询的执行248
12.2 标准的查询操作符249
12.2.1 筛选250
12.2.2 用索引筛选251
12.2.3 类型筛选252
12.2.4 复合的from子句252
12.2.5 排序253
12.2.6 分组254
12.2.7 LINQ查询中的变量255
12.2.8 对嵌套的对象分组255
12.2.9 内连接256
12.2.10 左外连接258
12.2.11 组连接260
12.2.12 集合操作262
12.2.13 合并263
12.2.14 分区264
12.2.15 聚合操作符264
12.2.16 转换操作符266
12.2.17 生成操作符267
12.3 并行LINQ267
12.3.1 并行查询268
12.3.2 分区器268
12.3.3 取消269
12.4 表达式树269
12.5 LINQ提供程序271
12.6 小结272
第13章 C#函数式编程273
13.1 概述273
13.1.1 避免状态突变274
13.1.2 函数作为第一个类275
13.2 表达式体的成员275
13.3 扩展方法276
13.4 using static声明277
13.5 本地函数278
13.5.1 本地函数与yield语句279
13.5.2 递归本地函数281
13.6 元组282
13.6.1 元组的声明和初始化282
13.6.2 元组解构283
13.6.3 元组的返回283
13.6.4 幕后的原理284
13.6.5 ValueTuple与元组的兼容性285
13.6.6 推断出元组名称285
13.6.7 元组与链表286
13.6.8 元组和LINQ286
13.6.9 解构287
13.6.10 解构与扩展方法288
13.7 模式匹配288
13.7.1 模式匹配与is运算符288
13.7.2 模式匹配与switch语句290
13.7.3 模式匹配与泛型291
13.8 小结291
第14章 错误和异常292
14.1 简介292
14.2 异常类293
14.3 捕获异常294
14.3.1 异常和性能296
14.3.2 实现多个catch块296
14.3.3 在其他代码中捕获异常299
14.3.4 System.Exception属性299
14.3.5 异常过滤器299
14.3.6 重新抛出异常300
14.3.7 没有处理异常时发生的情况303
14.4 用户定义的异常类303
14.4.1 捕获用户定义的异常304
14.4.2 抛出用户定义的异常305
14.4.3 定义用户定义的异常类307
14.5 调用者信息309
14.6 小结310
第15章 异步编程311
15.1 异步编程的重要性311
15.2 异步编程的.NET历史312
15.2.1 同步调用312
15.2.2 异步模式313
15.2.3 基于事件的异步模式314
15.2.4 基于任务的异步模式314
15.2.5 异步Main()方法315
15.3 异步编程的基础315
15.3.1 创建任务316
15.3.2 调用异步方法316
15.3.3 使用Awaiter317
15.3.4 延续任务317
15.3.5 同步上下文318
15.3.6 使用多个异步方法318
15.3.7 使用ValueTasks319
15.3.8 转换异步模式320
15.4 错误处理320
15.4.1 异步方法的异常处理321
15.4.2 多个异步方法的异常处理321
15.4.3 使用AggregateException信息322
15.5 异步与Windows应用程序322
15.5.1 配置await323
15.5.2 切换到UI线程324
15.5.3 使用IAsyncOperation325
15.5.4 避免阻塞情况325
15.6 小结325
第16章 反射、元数据和动态编程326
16.1 在运行期间检查代码和动态编程326
16.2 自定义特性327
16.2.1 编写自定义特性327
16.2.2 自定义特性示例:WhatsNewAttributes330
16.3 反射331
16.3.1 System.Type类332
16.3.2 TypeView示例333
16.3.3 Assembly类335
16.3.4 完成WhatsNewAttributes示例336
16.4 为反射使用动态语言扩展339
16.4.1 创建Calculator库339
16.4.2 动态实例化类型339
16.4.3 用Reflection API调用成员340
16.4.4 使用动态类型调用成员340
16.5 dynamic类型341
16.6 DynamicObject和ExpandoObject概述344
16.6.1 DynamicObject344
16.6.2 ExpandoObject345
16.7 小结347
第17章 托管和非托管内存348
17.1 内存348
17.2 后台内存管理349
17.2.1 值数据类型349
17.2.2 引用数据类型350
17.2.3 垃圾收集352
17.3 强引用和弱引用354
17.4 处理非托管的资源354
17.4.1 析构函数或终结器355
17.4.2 IDisposable接口356
17.4.3 using语句356
17.4.4 实现IDisposable接口和析构函数357
17.4.5 IDisposable和终结器的规则358
17.5 不安全的代码358
17.5.1 用指针直接访问内存358
17.5.2 指针示例:PointerPlayground364
17.5.3 使用指针优化性能367
17.6 引用的语义369
17.6.1 传递ref和返回ref371
17.6.2 ref和数组371
17.7 Span<T>373
17.7.1 Span引用托管堆373
17.7.2 Span引用栈373
17.7.3 Span引用本机堆374
17.7.4 Span扩展方法374
17.8 平台调用375
17.9 小结378
第18章 Visual Studio 2017379
18.1 使用Visual Studio 2017379
18.1.1 Visual Studio的版本382
18.1.2 Visual Studio设置382
18.2 创建项目383
18.2.1 面向多个版本的.NET384
18.2.2 选择项目类型385
18.3 浏览并编写项目388
18.3.1 Solution Explorer388
18.32 使用代码编辑器394
18.3.3 学习和理解其他窗口399
18.3.4 排列窗口402
18.4 构建项目402
18.4.1 构建、编译和生成代码403
18.4.2 调试版本和发布版本403
18.4.3 选择配置404
18.4.4 编辑配置404
18.5 调试代码406
18.5.1 设置断点407
18.5.2 使用数据提示和调试器可视化工具407
18.5.3 Live Visual Tree408
18.5.4 监视和修改变量409
18.5.5 异常409
18.5.6 多线程410
18.6 重构工具411
18.7 诊断工具412
18.8 通过Docker创建和使用容器415
18.8.1 Docker简介416
18.8.2 在Docker容器中运行ASP.NET Core416
18.8.3 创建Dockerfile417
18.8.4 使用Visual Studio418
189小结420
第Ⅱ部分 .NET Core与Windows Runtime423
第19章 库、程序集、包和NuGet423
19.1 库的地狱423
19.2 程序集425
19.3 创建库426
19.3.1 .NET标准427
19.3.2 创建.NET标准库428
19.3.3 解决方案文件428
19.3.4 引用项目429
19.3.5 引用NuGet包429
19.3.6 NuGet的来源430
19.3.7 使用.NET Framework库431
19.4 使用共享项目433
19.5 创建NuGet包435
19.5.1 NuGet包和命令行435
19.5.2 支持多个平台435
19.5.3 NuGet包与Visual Studio436
19.6 小结438
第20章 依赖注入439
20.1 依赖注入的概念439
20.1.1 使用没有依赖注入的服务440
20.1.2 使用依赖注入441
20.2 使用.NET Core DI容器442
20.3 服务的生命周期443
20.3.1 使用单例和临时服务445
20.3.2 使用Scoped服务446
20.3.3 使用自定义工厂448
20.4 使用选项初始化服务449
20.5 使用配置文件450
20.6 创建平台独立性452
20.6.1 .NET标准库452
20.6.2 WPF应用程序453
20.6.3 UWP应用程序454
20.6.4 Xamarin应用程序455
20.7 使用其他DI容器456
20.8 小结457
第21章 任务和并行编程458
21.1 概述459
21.2 Parallel类460
21.2.1 使用Parallel.For()方法循环460
21.2.2 提前中断Parallel.For462
21.2.3 Parallel.For()方法的初始化462
21.2.4 使用Parallel.ForEach()方法循环463
21.2.5 通过Parallel.Invoke()方法调用多个方法464
21.3 任务464
21.3.1 启动任务464
21.3.2 Future——任务的结果466
21.3.3 连续的任务467
21.3.4 任务层次结构468
21.3.5 从方法中返回任务468
21.3.6 等待任务468
21.4 取消架构470
21.4.1 Parallel.For()方法的取消470
21.4.2 任务的取消471
21.5 数据流472
21.5.1 使用动作块472
21.5.2 源和目标数据块473
21.5.3 连接块474
21.6 Timer类475
21.7 线程问题477
21.7.1 争用条件477
21.7.2 死锁479
21.8 lock语句和线程安全480
21.9 Interlocked类483
21.10 Monitor类484
21.11 SpinLock结构485
21.12 WaitHandle基类485
21.13 Mutex类485
21.14 Semaphore类486
21.15 Events类487
21.16 Barrier类490
21.17 ReaderWriterLockSlim类492
21.18 Lock和await494
21.19 小结496
第22章 文件和流497
22.1 概述498
22.2 管理文件系统498
22.2.1 检查驱动器信息499
22.2.2 使用Path类500
22.2.3 创建文件和文件夹500
22.2.4 访问和修改文件属性501
22.2.5 使用File执行读写操作502
22.3 枚举文件503
22.4 使用流504
22.4.1 使用文件流505
22.4.2 读取流508
22.4.3 写入流508
22.4.4 复制流509
22.4.5 随机访问流509
22.4.6 使用缓存的流510
22.5 使用读取器和写入器511
22.5.1 StreamReader类511
22.5.2 StreamWriter类512
22.5.3 读写二进制文件512
22.6 压缩文件513
22.6.1 使用压缩流514
22.6.2 使用Brotli514
22.6.3 压缩文件515
22.7 观察文件的更改515
22.8 使用内存映射的文件516
22.8.1 使用访问器创建内存映射文件517
22.8.2 使用流创建内存映射文件518
22.9 使用管道通信520
22.9.1 创建命名管道服务器520
22.9.2 创建命名管道客户端521
22.9.3 创建匿名管道522
22.10 通过Windows运行库使用文件和流523
22.10.1 Windows App编辑器523
22.10.2 把Windows Runtime类型映射为.NET类型525
22.11 小结526
第23章 网络527
23.1 概述527
23.2 HttpClient类528
23.2.1 发出异步的Get请求528
23.2.2 抛出异常529
23.2.3 传递标题529
23.2.4 访问内容531
23.2.5 用HttpMessageHandler自定义请求531
23.2.6 使用SendAsync创建HttpRequestMessage532
23.2.7 使用HttpClient和Windows Runtime532
23.3 使用WebListener类534
23.4 使用实用工具类536
23.4.1 URI537
23.4.2 IPAddress538
23.4.3 IPHostEntry538
23.4.4 Dns539
23.5 使用TCP540
23.5.1 使用TCP创建HTTP客户程序540
23.5.2 创建TCP侦听器541
23.5.3 创建TCP客户端547
23.5.4 TCP和UDP550
23.6 使用UDP550
23.6.1 建立UDP接收器550
23.6.2 创建UDP发送器551
23.6.3 使用多播553
23.7 使用套接字554
23.7.1 使用套接字创建侦听器554
23.7.2 使用NetworkStream和套接字556
23.7.3 通过套接字使用读取器和写入器557
23.7.4 使用套接字实现接收器557
23.8 小结559
第24章 安全性560
24.1 概述560
24.2 验证用户信息561
24.2.1 使用Windows标识561
24.2.2 Windows Principal562
24.2.3 使用声称562
24.3 加密数据564
24.3.1 创建和验证签名565
24.3.2 实现安全的数据交换567
24.3.3 使用RSA签名和散列569
24.4 保护数据571
24.4.1 实现数据保护571
24.4.2 用户机密573
24.5 资源的访问控制575
24.6 Web安全性577
24.6.1 编码577
24.6.2 SQL注入579
24.6.3 跨站点请求伪造580
24.7 小结581
第25章 ADO.NET和事务582
25.1 ADO.NET概述582
25.1.1 示例数据库583
25.1.2 NuGet包和名称空间583
25.2 使用数据库连接584
25.2.1 管理连接字符串585
25.2.2 连接池585
25.2.3 连接信息585
25.3 命令587
25.3.1 ExecuteNonQuery()方法587
25.3.2 ExecuteScalar()方法588
25.3.3 ExecuteReader()方法589
25.3.4 调用存储过程590
25.4 异步数据访问591
25.5 事务592
25.6 事务和System.Transaction595
25.6.1 可提交的事务597
25.6.2 依赖事务598
25.6.3 环境事务599
25.6.4 嵌套作用域和环境事务601
25.7 小结602
第26章 Entity Framework Core604
26.1 Entity Framework简史605
26.2 EF Core简介606
26.2.1 创建模型607
26.2.2 约定、注释和流利API607
26.2.3 创建上下文608
26.2.4 创建数据库608
26.2.5 删除数据库609
26.2.6 写入数据库609
26.2.7 读取数据库610
26.2.8 更新记录610
26.2.9 删除记录611
26.2.10 日志记录611
26.3 使用依赖注入612
26.4 创建模型614
26.4.1 创建关系614
26.4.2 数据注释614
26.4.3 流利API615
26.4.4 自包含类型的配置616
26.4.5 在数据库中搭建模型617
26.4.6 映射到字段618
26.4.7 阴影属性619
26.5 查询621
26.5.1 基本查询621
26.5.2 客户端和服务器求值622
26.5.3 原始SQL查询623
26.5.4 已编译查询624
26.5.5 全局查询过滤器624
26.5.6 EF.Functions625
26.6 关系625
26.6.1 使用约定的关系625
26.6.2 显式加载相关数据627
26.6.3 即时加载相关数据628
26.6.4 使用注释的关系628
26.6.5 使用流利API的关系629
26.6.6 根据约定的每个层次结构的表630
26.6.7 使用流利API的每个层次结构中的表632
26.6.8 表的拆分633
26.6.9 拥有的实体634
26.7 保存数据636
26.7.1 用关系添加对象636
26.7.2 对象的跟踪637
26.7.3 更新对象638
26.7.4 更新未跟踪的对象638
26.7.5 批处理639
26.8 冲突的处理640
26.8.1 最后一个更改获胜640
26.8.2 第一个更改获胜641
26.9 上下文池644
26.10 使用事务644
26.10.1 使用隐式的事务644
26.10.2 创建显式的事务646
26.11 迁移647
26.11.1 准备项目文件647
26.11.2 利用ASP.NET Core MVC托管应用程序648
26.11.3 托管.NET Core控制台应用程序648
26.11.4 创建迁移649
26.11.5 以编程方式应用迁移651
26.11.6 应用迁移的其他方法652
26.12 小结652
第27章 本地化653
27.1 全球市场653
27.2 System.Globalization名称空间654
27.2.1 Unicode问题654
27.2.2 区域性和区域655
27.2.3 使用区域性658
27.2.4 排序663
27.3 资源664
27.3.1 资源读取器和写入器664
27.3.2 使用资源文件生成器665
27.3.3 通过ResourceManager使用资源文件666
27.3.4 System.Resources名称空间666
27.4 使用ASP NET Core本地化667
27.4.1 注册本地化服务667
27.4.2 注入本地化服务668
27.4.3 区域性提供程序668
27.4.4 在ASP.NET Core中使用资源669
27.4.5 使用控制器和视图进行本地化670
27.5 本地化UWP674
27.5.1 给UWP使用资源674
27.5.2 使用多语言应用程序工具集进行本地化675
27.6 小结677
第28章 测试678
28.1 概述678
28.2 使用MSTest进行单元测试679
28.2.1 使用MSTest创建单元测试679
28.2.2 运行单元测试681
28.2.3 使用MSTest预期异常682
28.2.4 测试全部代码路径683
28.2.5 外部依赖683
28.3 使用xUnit进行单元测试685
28.3.1 使用xUnit和.NET Core686
28.3.2 创建Fact属性686
28.3.3 创建Theory特性687
28.3.4 使用Mocking库688
28.4 实时单元测试690
28.5 使用EF Core进行单元测试692
28.6 使用Windows应用程序进行UI测试693
28.7 Web集成、负载和性能测试697
28.7.1 ASP.NET Core集成测试697
28.7.2 创建Web测试698
28.7.3 运行Web测试700
28.8 小结702
第29章 跟踪、日志和分析703
29.1 诊断概述703
29.2 使用EventSource跟踪704
29.2.1 EventSource的简单用法705
29.2.2 跟踪工具706
29.2.3 派生自EventSource707
29.2.4 使用注释和EventSource709
29.2.5 创建事件清单模式710
29.2.6 使用活动ID712
29.3 创建自定义侦听器714
29.4 使用ILogger接口编写日志715
29.4.1 配置提供程序716
29.4.2 使用作用域717
29.4.3 过滤718
29.4.4 配置日志记录718
29.4.5 使用没有依赖注入的ILogger719
29.5 使用Visual Studio App Center进行分析720
29.6 小结722
第Ⅲ部分 Web应用程序和服务727
第30章 ASP.NET Core727
30.1 概述727
30.2 Web技术728
30.2.1 HTML728
30.2.2 CSS729
30.2.3 JavaScript和TypeScript729
30.2.4 脚本库729
30.3 ASP.NET Web项目730
30.3.1 启动733
30.3.2 示例应用程序735
30.4 添加客户端内容736
30.4.1 为客户端内容使用工具737
30.4.2 通过Bower使用客户端库738
30.4.3 使用JavaScript包管理器npm739
30.4.4 捆绑739
30.4.5 用webpack打包740
30.5 请求和响应741
30.5.1 请求标题742
30.5.2 查询字符串744
30.5.3 编码745
30.5.4 表单数据745
30.5.5 cookie746
30.5.6 发送JSON747
30.6 依赖注入747
30.6.1 定义服务748
30.6.2 注册服务748
30.6.3 注入服务748
30.6.4 调用控制器749
30.7 简单的路由749
30.8 创建自定义的中间件750
30.9 会话状态751
30.10 用ASP.NET Core配置752
30.10.1 读取配置753
30.10.2 修改配置提供程序755
30.10.3 基于环境的不同配置756
30.11 小结757
第31章 ASP.NETCore MVC758
31.1 为ASP.NET Core MVC建立服务758
31.2 定义路由760
31.2.1 添加路由760
31.2.2 使用路由约束761
31.3 创建控制器761
31.3.1 理解动作方法762
31.3.2 使用参数762
31.3.3 返回数据762
31.3.4 使用Controller基类和POCO控制器763
31.4 创建视图765
31.4.1 向视图传递数据765
31.4.2 Razor语法766
31.4.3 创建强类型视图766
31.4.4 定义布局767
31.4.5 用部分视图定义内容770
31.4.6 使用视图组件773
31.4.7 在视图中使用依赖注入774
31.4.8 为多个视图导入名称空间775
31.5 从客户端提交数据775
31.5.1 模型绑定器777
31.5.2 注解和验证778
31.6 使用HTML Helper779
31.6.1 简单的Helper779
31.6.2 使用模型数据779
31.6.3 定义HTML特性780
31.6.4 创建列表780
31.6.5 强类型化的Helper781
31.6.6 编辑器扩展782
31.6.7 实现模板782
31.7 Tag Helper783
31.7.1 激活Tag Helper783
31.7.2 使用锚定Tag Helper783
31.7.3 使用Label Tag Helper784
31.7.4 使用Input Tag Helper785
31.7.5 使用表单进行验证786
31.7.6 environment Tag Helper787
31.7.7 创建自定义Tag Helper788
31.7.8 用Tag Helper创建元素790
31.8 实现动作过滤器792
31.9 创建数据驱动的应用程序793
31.9.1 定义模型794
31.9.2 创建数据库795
31.9.3 创建服务796
31.9.4 创建控制器798
31.9.5 创建视图800
31.10 实现身份验证和授权803
31.10.1 存储和检索用户信息803
31.10.2 启动身份系统804
31.10.3 执行用户注册804
31.10.4 设置用户登录806
31.10.5 验证用户的身份807
31.10.6 使用Azure Active Directory对用户进行身份验证807
31.11 Razor页面812
31.11.1 创建一个Razor页面项目812
31.11.2 实现数据访问813
31.11.3 使用内联代码814
31.11.4 使用内联代码和页面模型816
31.11.5 使用代码隐藏文件817
31.11.6 页面参数817
31.12 小结818
第32章 Web API819
32.1 概述819
32.2 创建服务820
32.2.1 定义模型821
32.2.2 创建服务821
32.2.3 创建控制器823
32.2.4 修改响应格式824
32.2.5 REST结果和状态码825
32.3 创建异步服务826
32.4 创建.NET客户端827
32.4.1 发送GET请求828
32.4.2 从服务中接收xML832
32.4.3 发送POST请求833
32.4.4 发送PUT请求833
32.4.5 发送DELETE请求834
32.5 写入数据库835
32.5.1 使用EF Core835
32.5.2 创建数据访问服务836
32.6 用OpenAPI或Swagger创建元数据837
32.7 创建和使用OData服务841
32.7.1 创建数据模型842
32.7.2 创建数据库843
32.7.3 OData启动代码844
32.7.4 创建OData控制器844
32.7.5 OData查询845
32.8 使用Azure Function847
32.8.1 创建Azure Function847
32.8.2 使用依赖注入容器848
32.8.3 实现GET、POST和PUT请求849
32.8.4 运行Azure Function851
32.9 小结852
第Ⅳ部分 应用程序855
第33章 Windows应用程序855
33.1 Windows应用程序简介855
33.1.1 Windows运行库856
33.1.2 Hello,Windows856
33.1.3 应用程序清单文件857
33.1.4 应用程序启动859
33.1.5 主页859
33.2 XAML861
33.2.1 XAML标准861
33.2.2 将元素映射到类861
33.2.3 通过XAML使用定制的.NET类862
33.2.4 将属性用作特性863
33.2.5 将属性用作元素863
33.2.6 依赖属性864
33.2.7 创建依赖属性864
33.2.8 值变更回调和事件865
33.2.9 路由事件866
33.2.10 附加属性867
33.2.11 标记扩展868
33.2.12 自定义标记扩展869
33.2.13 条件XAML870
33.3 控件871
33.3.1 框架派生的UI元素872
33.3.2 控件派生的控件875
33.3.3 范围控件881
33.3.4 内容控件882
33.3.5 按钮883
33.3.6 项控件884
33.3.7 Flyout控件884
33.4 数据绑定884
33.4.1 用INotifyPropertyChanged更改通知885
33.4.2 创建图书列表886
33.4.3 列表绑定887
33.4.4 把事件绑定到方法887
33.4.5 使用数据模板和数据模板选择器888
33.4.6 绑定简单对象890
33.4.7 值的转换891
33.5 导航892
33.5.1 导航回最初的页面892
33.5.2 重写Page类的导航893
33.5.3 在页面之间导航894
33.5.4 后退按钮895
33.5.5 Hub896
33.5.6 Pivot898
33.5.7 Navigation View899
33.6 布局902
33.6.1 StackPanel902
33.6.2 Canvas903
33.6.3 Grid903
33.6.4 VariableSizedWrapGrid904
33.6.5 RelativePanel906
33.6.6 自适应触发器906
33.6.7 XAML视图909
33.6.8 延迟加载909
33.7 小结910
第34章 模式和XAML应用程序911
34.1 使用MVVM的原因911
34.2 定义MVVM模式912
34.3 共享代码913
34.3.1 使用API协定和通用Windows平台913
34.3.2 使用共享项目915
34.3.3 使用.NET标准库916
34.4 示例解决方案917
34.5 模型918
34.5.1 实现变更通知918
34.5.2 使用Repository模式919
34.6 服务920
34.7 视图模型921
34.7.1 使用IEditableObject923
34.7.2 视图模型的具体实现924
34.7.3 命令925
34.7.4 服务、ViewModel和依赖注入926
34.8 视图927
34.8.1 从视图模型中打开对话框930
34.8.2 页面之间的导航931
34.8.3 自适应用户界面933
34.8.4 显示进度信息935
34.8.5 使用列表项中的操作936
34.9 使用事件传递消息938
34.10 使用框架939
34.11 小结940
第35章 样式化Windows应用程序941
35.1 样式设置941
35.2 形状942
35.3 几何图形944
35.3.1 使用段的几何图形944
35.3.2 使用PathMarkup的几何图形945
35.4 变换945
35.4.1 缩放945
35.4.2 平移946
35.4.3 旋转946
35.4.4 倾斜946
35.4.5 组合变换和复合变换946
35.4.6 使用矩阵的变换947
35.5 画笔947
35.5.1 SolidColorBrush947
35.5.2 LinearGradientBrush947
35.5.3 ImageBrush948
35.5.4 AcrylicBrush948
35.5.5 RevealBrush949
35.6 样式和资源949
35.6.1 样式949
35.6.2 资源951
35.6.3 从代码中访问资源952
35.6.4 资源字典952
35.6.5 主题资源953
35.7 模板954
35.7.1 控件模板955
35.7.2 数据模板958
35.7.3 样式化ListView959
35.7.4 ListView项的数据模板960
35.7.5 项容器的样式960
35.7.6 项面板961
35.7.7 列表视图的控件模板961
35.8 动画962
35.8.1 时间轴962
35.8.2 缓动函数964
35.8.3 关键帧动画968
35.8.4 过渡969
35.9 可视化状态管理器971
35.9.1 用控件模板预定义状态972
35.9.2 定义自定义状态973
35.9.3 设置自定义的状态973
35.10 小结974
第36章 高级Windows应用程序975
36.1 概述975
36.2 应用程序的生命周期976
36.2.1 应用程序的执行状态976
36.2.2 在页面之间导航976
36.3 导航状态978
36.3.1 暂停应用程序979
36.3.2 激活暂停的应用程序980
36.3.3 测试暂停980
36.3.4 页面状态981
36.4 共享数据983
36.4.1 共享源983
36.4.2 共享目标986
36.5 应用程序服务991
36.5.1 创建模型991
36.5.2 为应用程序服务连接创建后台任务992
36.5.3 注册应用程序服务993
36.5.4 调用应用程序服务994
36.6 高级的编译绑定996
36.6.1 已编译数据绑定的生命周期996
36.6.2 绑定到方法上997
36.6.3 用x:Bind分阶段998
36.7 使用文本1002
36.7.1 使用字体1002
36.7.2 内联和块元素1004
36.7.3 使用溢出区域1005
36.8 上墨1008
36.9 自动建议1011
36.10 小结1013
第37章 Xamarin.Forms1015
37.1 Xamarin开发入门1015
37.1.1 用Android架构Xamarin1016
37.1.2 用iOS架构Xamarin1016
37.1.3 Xamarin.Forms1017
37.2 Xamarin开发工具1018
37.2.1 Android1018
37.2.2 iOS1019
37.2.3 Visual Studio 20171019
37.2.4 Visual Studio forMac1019
37.2.5 Visual StudioApp Center1020
37.3 Android基础1020
37.3.1 活动1021
37.3.2 资源1022
37.3.3 显示列表1022
37.3.4 显示消息1024
37.4 iOS基础1025
37.4.1 iOS应用程序结构1025
37.4.2 故事板1026
37.4.3 控制器1028
37.4.4 显示消息1028
37.5 Xamarin.Forms应用程序1029
37.5.1 托管Xamarin的Windows应用程序1029
37.5.2 托管Xamarin的Android1030
37.5.3 托管Xamarin的iOS1031
37.5.4 共享的项目1031
37.6 使用公共库1032
37.7 控件层次结构1032
37.8 页面1033
37.9 导航1034
37.10 布局1035
37.11 视图1037
37.12 数据绑定1037
37.13 命令1038
37.14 ListView和ViewCell1038
37.15 小结1039