TA是谁?

Wrox精品红皮书,

引领无数程序员进入程序开发殿堂,

C#专家级指南,

是经验丰富的程序员提高效率的更快捷方式,

 

连续畅销20年,累计销量超30万册。

TA出生名门:

 TA战绩辉煌:

2019新的征程:

第11次全新升级,更新至C#7 和 .NET Core 2.0

 

C# 7内幕指南,

发布为NuGet包的每个.NET Core部分都进行了更新,

展示如何将.NET引入非微软平台,如何操作工具。

TA的行业赞誉:

目录(上下滑动显示更多内容)

第 I 部分 C# 语 言

第1 章 .NET 应用程序和工具   3

1.1 选择技术   3

1.2 回顾.NET 历史   4

1.2.1 C# 1.0——一种新语言  4

1.2.2 带有泛型的C# 2 和.NET 2  6

1.2.3 .NET 3.0——Windows Presentation Foundation   6

1.2.4 C# 3 和.NET 3.5——LINQ   6

1.2.5 C# 4 和.NET 4.0——dynamic 和TPL   7

1.2.6 C# 5 和异步编程   7

1.2.7 C# 6 和.NET Core 1.0   8

1.2.8 C# 7 和.NET Core 2.0    8

1.2.9 选择技术,继续前进    9

1.3 .NET 术语    10

1.3.1 .NET Framework      11

1.3.2 .NET Core      11

1.3.3 .NET Standard    11

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 2017   19

1.6 应用程序类型和技术   24

1.6.1 数据访问   24

1.6.2 Windows 应用程序   24

1.6.3 Xamarin    24

1.6.4 Web 应用程序    25

1.6.5 Web API     25

1.6.6 WebHooks 和SignalR   25

1.6.7 Microsoft Azure     25

1.7 开发工具    26

1.7.1 Visual Studio Community   27

1.7.2 Visual Studio Professional   27

1.7.3 Visual Studio Enterprise   27

1.7.4 Visual Studio for Mac   27

1.7.5 Visual Studio Code   27

1.8 小结    27

第2 章 核心C#   29

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 和#undef    52

2.8.2 #if、#elif、#else 和#endif    52

2.8.3 #warning 和 # error    53

2.8.4 #region 和#endregion   53

2.8.5 #line     53

2.8.6 #pragma     54

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 Span      165

7.10.1 创建切片   166

7.10.2 使用Span 改变值    166

7.10.3 只读的Span    167

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<T>和Func<T>委托     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 字符串和Span    200

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 使用BlockingCollection   239

11.5.3 使用ConcurrentDictionary   240

11.5.4 完成管道    241

11.6 小结     242

第12 章 LINQ   243

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 并行LINQ     267

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 元组和LINQ    286

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 使用Awaiter      317

15.3.4 延续任务   317

15.3.5 同步上下文   318

15.3.6 使用多个异步方法    318

15.3.7 使用ValueTasks     319

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 配置await     323

15.5.2 切换到UI 线程     324

15.5.3 使用IAsyncOperation   325

15.5.4 避免阻塞情况      325

15.6 小结       325

第16 章 反射、元数据和动态编程    326

16.1 在运行期间检查代码和动态编程   326

16.2 自定义特性       327

16.2.1 编写自定义特性     327

16.2.2 自定义特性示例:WhatsNewAttributes   330

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 DynamicObject   344

16.6.2 ExpandoObject    345

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 指针示例:PointerPlayground   364

17.5.3 使用指针优化性能      367

17.6 引用的语义     369

17.6.1 传递ref 和返回ref    371

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 2017     379

18.1 使用Visual Studio 2017     379

18.1.1 Visual Studio 的版本       382

18.1.2 Visual Studio 设置        382

18.2 创建项目             383

18.2.1 面向多个版本的.NET     384

18.2.2 选择项目类型         385

18.3 浏览并编写项目      388

18.3.1 Solution Explorer     388

18.3.2 使用代码编辑器     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 Tree     408

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 Core   416

18.8.3 创建Dockerfile    417

18.8.4 使用Visual Studio    418

18.9 小结     420

第II 部分 .NET Core 与Windows Runtime

第19 章 库、程序集、包和NuGet      423

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 Studio   436

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.For      462

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 和await   494

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 使用Brotli        514

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 创建HttpRequestMessage              532

23.2.7 使用HttpClient和Windows Runtime    532

23.3 使用WebListener 类    534

23.4 使用实用工具类       536

23.4.1 URI             537

23.4.2 IPAddress         538

23.4.3 IPHostEntry        538

23.4.4 Dns             539

23.5 使用TCP             540

23.5.1 使用TCP 创建HTTP 客户程序     540

23.5.2 创建TCP 侦听器               541

23.5.3 创建TCP 客户端               547

23.5.4 TCP 和UDP       550

23.6 使用UDP             550

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 Principal              562

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.Transaction           595

25.6.1 可提交的事务     597

25.6.2 依赖事务        598

25.6.3 环境事务        599

25.6.4 嵌套作用域和环境事务          601

25.7 小结                 602

第26 章 Entity Framework Core           604

26.1 Entity Framework 简史              605

26.2 EF Core 简介          606

26.2.1 创建模型        607

26.2.2 约定、注释和流利API           607

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 流利API         615

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.Functions      625

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 本地化UWP           674

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 Core          686

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 派生自EventSource              707

29.2.4 使用注释和EventSource          709

29.2.5 创建事件清单模式              710

29.2.6 使用活动ID        712

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 使用没有依赖注入的ILogger        719

29.5 使用Visual Studio App Center进行分析             720

29.6 小结                 722

第III 部分 Web 应用程序和服务

第30 章 ASP.NET Core       727

30.1 概述                 727

30.2 Web 技术             728

30.2.1 HTML            728

30.2.2 CSS             729

30.2.3 JavaScript 和TypeScript          729

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 包管理器npm       739

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 cookie           746

30.5.6 发送JSON        747

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.NET Core MVC              758

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 Helper      779

31.6.1 简单的Helper     779

31.6.2 使用模型数据     779

31.6.3 定义HTML 特性              780

31.6.4 创建列表        780

31.6.5 强类型化的Helper              781

31.6.6 编辑器扩展       782

31.6.7 实现模板        782

31.7 Tag Helper             783

31.7.1 激活Tag Helper    783

31.7.2 使用锚定Tag Helper             783

31.7.3 使用Label Tag Helper            784

31.7.4 使用Input Tag Helper             785

31.7.5 使用表单进行验证             786

31.7.6 environment Tag Helper           787

31.7.7 创建自定义Tag Helper           788

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 API            819

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 从服务中接收XML           832

32.4.3 发送POST 请求   833

32.4.4 发送PUT 请求    833

32.4.5 发送DELETE 请求            834

32.5 写入数据库          835

32.5.1 使用EF Core      835

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 Function     847

32.8.1 创建Azure Function              847

32.8.2 使用依赖注入容器              848

32.8.3 实现GET、POST 和PUT 请求     849

32.8.4 运行Azure Function              851

32.9 小结                 852

第IV 部分 应用程序

第33 章 Windows 应用程序    855

33.1 Windows 应用程序简介             855

33.1.1 Windows 运行库    856

33.1.2 Hello, Windows     856

33.1.3 应用程序清单文件              857

33.1.4 应用程序启动     859

33.1.5 主页            859

33.2 XAML                861

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 条件XAML       870

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 Hub            896

33.5.6 Pivot            898

33.5.7 NavigationView     899

33.6 布局                 902

33.6.1 StackPanel         902

33.6.2 Canvas          903

33.6.3 Grid            903

33.6.4 VariableSizedWrapGrid           904

33.6.5 RelativePanel      906

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 使用IEditableObject             923

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 SolidColorBrush     947

35.5.2 LinearGradientBrush             947

35.5.3 ImageBrush        948

35.5.4 AcrylicBrush      948

35.5.5 RevealBrush       949

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 样式化ListView    959

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.Forms       1015

37.1 Xamarin 开发入门     1015

37.1.1 用Android 架构Xamarin         1016

37.1.2 用iOS 架构Xamarin            1016

37.1.3 Xamarin.Forms     1017

37.2 Xamarin 开发工具     1018

37.2.1 Android          1018

37.2.2 iOS            1019

37.2.3 Visual Studio 2017              1019

37.2.4 Visual Studio for Mac            1019

37.2.5 Visual Studio App Center          1020

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 的Android         1030

37.5.3 托管Xamarin 的iOS            1031

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 和ViewCell             1038

37.15 小结               1039

附赠章节电子版(请扫描封底二维码获取)

第1 章 Composition             1

BC1.1 概述                 1

BC1.2 Composition 库的体系结构          2

BC1.2.1 使用特性的Composition         3

BC1.2.2 基于约定的部件注册           8

BC1.3 定义协定            10

BC1.4 导出部件            13

BC1.4.1 创建部件      13

BC1.4.2 使用部件的部件             17

BC1.4.3 导出元数据     17

BC1.4.4 使用元数据进行惰性加载       19

BC1.5 导入部件            19

BC1.5.1 导入连接      22

BC1.5.2 部件的惰性加载             23

BC1.5.3 读取元数据     23

BC1.6 小结                25

第2 章 XML 和JSON           26

BC2.1 数据格式            26

BC2.1.1 XML          27

BC2.1.2 .NET 支持的XML 标准        28

BC2.1.3 在框架中使用XML           28

BC2.1.4 JSON         29

BC2.2 读写流格式的XML    30

BC2.2.1 使用XmlReader 类读取XML    31

BC2.2.2 使用XmlWriter 类            33

BC2.3 在.NET 中使用DOM               34

BC2.3.1 使用XmlDocument 类读取      35

BC2.3.2 遍历层次结构               35

BC2.3.3 使用XmlDocument 插入节点    36

BC2.4 使用XPathNavigator 类            37

BC2.4.1 XPathDocument 类            37

BC2.4.2 XPathNavigator 类            37

BC2.4.3 XPathNodeIterator 类          38

BC2.4.4 使用XPath 导航XML         38

BC2.4.5 使用XPath 评估             39

BC2.4.6 用XPath 修改XML           39

BC2.5 在XML 中序列化对象             40

BC2.5.1 序列化简单对象             40

BC2.5.2 序列化一个对象树           42

BC2.5.3 没有特性的序列化           44

BC2.6 LINQ to XML         46

BC2.6.1 XDocument 对象             46

BC2.6.2 XElement 对象              47

BC2.6.3 XNamespace 对象            47

BC2.6.4 XComment 对象             49

BC2.6.5 XAttribute 对象              49

BC2.6.6 使用LINQ 查询XML 文档     50

BC2.6.7 查询动态的XML 文档         50

BC2.6.8 转换为对象     52

BC2.6.9 转换为XML     52

BC2.7 JSON               53

BC2.7.1 创建JSON      53

BC2.7.2 转换对象      54

BC2.7.3 序列化对象     55

BC2.7.4 遍历JSON 节点             55

BC2.8 小结                56

第3 章 WebHooks 和SignalR    57

BC3.1 概述                57

BC3.2 WebSockets           58

BC3.2.1 WebSockets 服务器           58

BC3.2.2 WebSockets 客户端           60

BC3.3 使用SignalR 的简单聊天程序       62

BC3.3.1 创建集线器     62

BC3.3.2 用HTML 和JavaScript 创建客户端        63

BC3.3.3 创建SignalR .NET 客户端      65

BC3.4 分组连接            68

BC3.4.1 用分组扩展集线器           68

BC3.4.2 用分组扩展Windows 客户端    69

BC3.5 WebHooks 的体系结构             71

BC3.6 创建Dropbox 和GitHub 接收器     72

BC3.6.1 创建Web 应用程序           73

BC3.6.2 为Dropbox 和GitHub 配置WebHooks      73

BC3.6.3 实现处理程序               73

BC3.6.4 用Dropbox 和GitHub 配置应用程序      76

BC3.6.5 运行应用程序               77

BC3.7 小结                77

第4 章 机器人和认知服务       79

BC4.1 机器人的定义        79

BC4.2 创建对话框机器人    80

BC4.2.1 配置状态服务              81

BC4.2.2 接收机器人消息            .82

BC4.2.3 定义对话框       83

BC4.2.4 使用PromptDialog            85

BC4.3 为对话框使用Form Flow           88

BC4.4 创建英雄卡         89

BC4.5 机器人和LUIS       91

BC4.5.1 定义意图和话语            92

BC4.5.2 访问LUIS 中的建议         95

BC4.5.3 使用带有活动检查的Form Flow    96

BC4.6 小结              96

第5 章 Windows 应用程序的更多特性        97

BC5.1 概述               97

BC5.2 相机                98

BC5.3 Geolocation 和MapControl           99

BC5.3.1 使用MapControl             99

BC5.3.2 使用Geolocator 定位信息      102

BC5.3.3 街景地图      103

BC5.3.4 继续请求位置信息           104

BC5.4 传感器             105

BC5.4.1 光线         106

BC5.4.2 罗盘         107

BC5.4.3 加速计       107

BC5.4.4 倾斜计       108

BC5.4.5 陀螺仪       109

BC5.4.6 方向         109

BC5.4.7 Rolling Marble 示例          110

BC5.5 小结               112

可以直接购买

原文地址:https://mp.weixin.qq.com/s/fQdcCwnt6-RUrqynAHhDLw


.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com

持续畅销20年的《C#高级编程》出第11版了!相关推荐

  1. C++高级编程(第3版)_学习记录

    <C++高级编程(第3版)> Professional C++, Third Edition [美]Narc Gregoire 著,张永强 译,清华大学出版社,2015.5第1版 文章目录 ...

  2. 《UNIX环境高级编程(第3版)》——1.7 出错处理

    本节书摘来自异步社区<UNIX环境高级编程(第3版)>一书中的第1章,第1.7节,作者:[美]W. Richard Stevens , Stephen A.Rago著,更多章节内容可以访问 ...

  3. 《C++高级编程(第3版)》

    2019独角兽企业重金招聘Python工程师标准>>> <C++高级编程(第3版)> 多年来,C++都是编写性能卓越.功能强大的企业级面向对象程序的事实标准语言.尽管C+ ...

  4. 《UNIX环境高级编程(第3版)》——2.6 选项

    本节书摘来自异步社区<UNIX环境高级编程(第3版)>一书中的第2章,第2.6节,作者:[美]W. Richard Stevens , Stephen A.Rago著,更多章节内容可以访问 ...

  5. UNIX环境高级编程(第三版)关于apue.h的用法

    UNIX环境高级编程(第三版)中的例子用到apue.h这个头文件,但是书里面写的地址已经不能访问. 经过一番查找之后,找到如下解决方案: 1.到www.apuebook.com上下载第2版的源码,也可 ...

  6. 关于UNIX环境高级编程(第2版)——图灵计算机科学丛书的读后感

    UNIX环境高级编程(第2版)--图灵计算机科学丛书 当当上购买 当当网全场免运费!! 关于UNIX环境高级编程(第2版)--图灵计算机科学丛书 评论 读后感:先讲语法,再讲继承机制.后讲Dom,越往 ...

  7. 解读经典《C#高级编程》第七版 Page79-93.对象和类型.Chapter3

    前言 本篇我们继续讲解本章其余的部分:构造函数.只读字段.匿名类型.结构详解.部分类.静态类.Object类.扩展方法,等. 01 类 构造函数 构造函数是一种特殊的方法: 与类同名 没有返回值,甚至 ...

  8. 解读经典《C#高级编程》第七版 Page32-38.核心C#.Chapter2

    前言 接下来讲讲预定义数据类型.关于数据类型,其实是非常值得透彻研究的. 01 预定义数据类型 值类型和引用类型 C#将把数据类型分为两种,值类型和引用类型,值类型存储在堆栈上,引用类型存储在托管堆上 ...

  9. Python 高级编程(第2版)

    内容简介 Python 作为一种高级程序设计语言,凭借其简洁.易读及可扩展性日渐成为程序设计领域备受推崇的语言之一. 本书基于 Python 3.5 版本进行讲解,深度揭示了 Python 编程的高级 ...

最新文章

  1. Python3.5源码分析-Dict概述
  2. cpp_extension dist must be a Distribution instance
  3. 【bzoj3524】【Poi2014】【Couriers】可持久化线段树(主席树)水题
  4. 3012C语言_数据
  5. Python遍历列表里面序号和值的方法
  6. 就你这个求婚态度,能嫁给你才怪!
  7. PLC-Recorder通过Modbus TCP/Modbus RTU转换器实现RS-485总线设备采集的方法
  8. php 代付功能_常见的第三方支付平台代付接口(php源码)
  9. Python】Scrapy抓取多玩Gif图片
  10. Redis下载与安装 详细教程
  11. Python基础: python3书籍推荐
  12. 【ES6】for of用法
  13. python filelock 文件锁_详解进程文件锁FileLock
  14. 基于项目的协同过滤推荐算法单机版代码实现(包含输出电影-用户评分矩阵模型、项目相似度、推荐结果、平均绝对误差MAE)
  15. 隐私保护和数据安全:区块链的隐私问题、零钞:基于zkSNARK的完美混币池、Hawk:保护合约数据私密性、Coco框架、Baby Zoe
  16. php流媒体技术srs,基于SRS开源直播系统设计与实现.doc
  17. 安卓Bmob后端云的使用(增删改查、上传图片、推送服务等)
  18. 对于pywin32配合spy++获得窗口句柄然后进行操作的部分理解
  19. linux 打开网页 用curl_Linux终端访问网页
  20. 三种素数筛总结——(朴素筛,埃氏筛,线性筛)

热门文章

  1. 后缀的形容词_构词法(18)构成形容词的常见后缀 3
  2. Ubuntu 18.04上Qmmp安装教程
  3. app启动广告页的实现,解决了广告图片要实时更新的问题
  4. 大数据对六大领域的挑战
  5. Java基础- super 和 this 解析
  6. Linux命令之tar等
  7. 【原】python中文文本挖掘资料集合
  8. Linux挂载命令mount详解
  9. $_GET,$_post与$_REQUEST
  10. [导入]php 安全基础 第八章 共享主机 文件系统浏览