C# 10 和 .NET 6入门与跨平台开发(第6版)

C# 10 和 .NET 6入门与跨平台开发(第6版)
分享
扫描下方二维码分享到微信
打开微信,点击右上角”+“,
使用”扫一扫“即可将网页分享到朋友圈。
2022-09
版次: 1
ISBN: 9787302612728
定价: 168.00
装帧: 其他
开本: 16开
纸张: 胶版纸
17人买过
  • 这个新版本对上一版做了全面修订,涵盖 C# 10和.NET 6的所有新功能。   本书讨论面向对象编程、编写函数、测试函数、调试函数、实现接口以及继承类等主题;介绍.NET API,这些API可执行多种任务,如管理和查询数据,监视和改进性能,以及使用文件系统、异步流、序列化和加密。你可用ASP.NET Core来构建和部署本书列举的跨平台示例应用程序,如网站和服务。   在学习C#语言和许多.NET库的过程中,为确保不会因不必要的应用代码而分心,第1~12章构建的是控制台应用程序;打下坚实基础后,第13~17章再使用ASP.NET Core、MVC模式以及Blazor构建实际的应用程序和服务。    第18章讲述如何使用Web API、OData、gRPC、GraphQL、SignalR和Azure Functions等技术构建服务;第19章讨论如何使用.NET MAUI构建跨平台应用程序。 Mark J. Price拥有Microsoft Specialist: Programming in C#、MCSD和MCT等微软编程专家和培训专家认证,拥有20多年的编程和培训经验。自1993年以来,Mark已经通过了80多项微软编程认证,并且擅长帮助他的学生通过这些认证。他的学生中既有经验丰富的编程专家,也有初学编程的中学生。2001年至2003年,Mark在微软美国总部工作,编写官方教学课件。当C#还处于早期的版本时,他的团队就编写了第一个C#培训课程。在微软工作期间,Mark负责培训MCT(微软认证讲师),帮助他们以最快的速度掌握C#和.NET的新知识。 第1章  C#与.NET入门   1

    1.1  设置开发环境   2

    1.1.1  选择适合学习的工具和应用程序类型   2

    1.1.2  跨平台部署   4

    1.1.3  下载并安装Visual Studio 2022 for Windows   5

    1.1.4  下载并安装 Visual Studio Code   6

    1.2  理解.NET   8

    1.2.1  理解.NET Framework   8

    1.2.2  理解Mono、Xamarin和Unity项目   8

    1.2.3  理解.NET Core   8

    1.2.4  了解.NET的未来版本   9

    1.2.5  了解.NET支持   10

    1.2.6  现代.NET的区别   11

    1.2.7  现代.NET的主题   12

    1.2.8  了解.NET Standard   12

    1.2.9  本书使用的.NET平台和工具   13

    1.2.10  理解中间语言   13

    1.2.11  比较.NET技术   14

    1.3  使用Visual Studio 2022构建控制台应用程序   14

    1.3.1  使用Visual Studio 2022管理多个项目   14

    1.3.2  使用Visual Studio 2022编写代码   14

    1.3.3  使用Visual Studio编译和运行代码   15

    1.3.4  编写顶级程序   16

    1.3.5  使用Visual Studio 2022添加第二个项目   17

    1.4  使用Visual Studio Code构建控制台应用程序   19

    1.4.1  使用Visual Studio Code管理多个项目   19

    1.4.2  使用Visual Studio Code编写代码   19

    1.4.3  使用dotnet命令行编译和运行代码   21

    1.4.4  使用Visual Studio Code添加第二个项目   22

    1.4.5  使用Visual Studio Code管理多个文件   23

    1.5  使用.NET Interactive Notebooks探索代码   23

    1.5.1  创建一个Notebook   23

    1.5.2  在Notebook上编写和运行代码   24

    1.5.3  保存Notebook   25

    1.5.4  给Notebook添加Markdown和特殊命令   25

    1.5.5  在多个单元中执行代码   26

    1.5.6  为本书中的代码使用.NET Interactive Notebooks   27

    1.6  检查项目的文件夹和文件   27

    1.6.1  了解常见的文件夹和文件   28

    1.6.2  理解GitHub中的解决方案代码   28

    1.7  充分利用本书的GitHub存储库   28

    1.7.1  对本书提出问题   29

    1.7.2  反馈   29

    1.7.3  从GitHub存储库下载解决方案代码   29

    1.7.4  使用Git、Visual Studio Code和命令行   30

    1.8  寻求帮助   30

    1.8.1  阅读微软文档   30

    1.8.2  获取关于dotnet工具的帮助   30

    1.8.3  获取类型及其成员的定义   31

    1.8.4  在Stack Overflow上寻找答案   33

    1.8.5  使用谷歌搜索答案   33

    1.8.6  订阅官方的.NET博客   33

    1.8.7  观看Scott Hanselman的视频   34

    1.9  实践和探索   34

    1.9.1  练习1.1:测试你掌握的知识   34

    1.9.2  练习1.2:在任何地方练习C#   34

    1.9.3  练习1.3:探索主题   34

    1.10  本章小结   35

    第2章  C#编程基础   36

    2.1  介绍C#   36

    2.1.1  理解语言版本和特性   36

    2.1.2  了解C#标准   39

    2.1.3  发现C#编译器版本   40

    2.2  理解C#语法和词汇   41

    2.2.1  显示编译器版本   42

    2.2.2  了解C#语法   43

    2.2.3  语句   43

    2.2.4  注释   43

    2.2.5  块   44

    2.2.6  语句和块的示例   44

    2.2.7  了解C#词汇表   44

    2.2.8  将编程语言与人类语言进行比较   44

    2.2.9  改变C#语法的配色方案   45

    2.2.10  如何编写正确的代码   45

    2.2.11  导入名称空间   46

    2.2.12  动词表示方法   48

    2.2.13  名词表示类型、变量、字段和属性   49

    2.2.14  揭示C#词汇表的范围   49

    2.3  使用变量   51

    2.3.1  命名和赋值   51

    2.3.2  字面值   52

    2.3.3  存储文本   52

    2.3.4  存储数字   53

    2.3.5  存储实数   54

    2.3.6  存储布尔值   57

    2.3.7  存储任何类型的对象   57

    2.3.8  动态存储类型   58

    2.3.9  声明局部变量   59

    2.3.10  获取和设置类型的默认值   61

    2.3.11  在数组中存储多个值   61

    2.4  深入研究控制台应用程序   62

    2.4.1  向用户显示输出   63

    2.4.2  从用户那里获取文本输入   65

    2.4.3  简化控制台的使用   66

    2.4.4  获取用户的重要输入   66

    2.4.5  向控制台应用程序传递参数   67

    2.4.6  使用参数设置选项   68

    2.4.7  处理不支持API的平台   70

    2.5  实践和探索   71

    2.5.1  练习2.1:测试你掌握的知识   71

    2.5.2  练习2.2:测试对数字类型的了解   72

    2.5.3  练习2.3:练习数字的大小和范围   72

    2.5.4  练习2.4:探索主题   72

    2.6  本章小结   73

    第3章  控制程序流程、转换类型和处理异常   74

    3.1  操作变量   74

    3.1.1  一元算术运算符   75

    3.1.2  二元算术运算符   76

    3.1.3  赋值运算符   77

    3.1.4  逻辑运算符   77

    3.1.5  条件逻辑运算符   78

    3.1.6  按位和二元移位运算符   79

    3.1.7  其他运算符   80

    3.2  理解选择语句   81

    3.2.1  使用if语句进行分支   81

    3.2.2  模式匹配与if语句   82

    3.2.3  使用switch语句进行分支   83

    3.2.4  模式匹配与switch语句   84

    3.2.5  使用switch表达式简化switch语句   86

    3.3  理解迭代语句   86

    3.3.1  while循环语句   86

    3.3.2  do循环语句   87

    3.3.3  for循环语句   87

    3.3.4  foreach循环语句   88

    3.4  类型转换   88

    3.4.1  隐式和显式地转换数值   89

    3.4.2  使用System.Convert类型进行转换   90

    3.4.3  圆整数字   90

    3.4.4  控制圆整规则   91

    3.4.5  从任何类型转换为字符串   92

    3.4.6  从二进制对象转换为字符串   92

    3.4.7  将字符串转换为数值或日期和时间   93

    3.5  处理异常   94

    3.6  检查溢出   98

    3.6.1  使用checked语句抛出溢出异常   98

    3.6.2  使用unchecked语句禁用编译时检查溢出   99

    3.7  实践和探索   100

    3.7.1  练习3.1:测试你掌握的知识   100

    3.7.2  练习3.2:探索循环和溢出   100

    3.7.3  练习3.3:实践循环和运算符   101

    3.7.4  练习3.4:实践异常处理   101

    3.7.5  练习3.5:测试你对运算符的认识程度   101

    3.7.6  练习3.6:探索主题   102

    3.8  本章小结   102

    第4章  编写、调试和测试函数   103

    4.1  编写函数   103

    4.1.1  乘法表示例   103

    4.1.2  编写带返回值的函数   105

    4.1.3  将数字从序数转换为基数   106

    4.1.4  用递归计算阶乘   108

    4.1.5  使用XML注释解释函数   110

    4.1.6  在函数实现中使用lambda   111

    4.2  在开发过程中进行调试   113

    4.2.1  创建带有故意错误的代码   113

    4.2.2  设置断点并开始调试   114

    4.2.3  使用调试工具栏进行导航   116

    4.2.4  调试窗格   117

    4.2.5  单步执行代码   117

    4.2.6  自定义断点   119

    4.3  在开发和运行时进行日志记录   120

    4.3.1  理解日志记录选项   120

    4.3.2  使用Debug和Trace类型   120

    4.3.3  配置跟踪侦听器   122

    4.3.4  切换跟踪级别   123

    4.4  单元测试   127

    4.4.1  理解测试类型   127

    4.4.2  创建需要测试的类库   128

    4.4.3  编写单元测试   129

    4.5  在函数中抛出和捕获异常   131

    4.5.1  理解使用错误和执行错误   131

    4.5.2  在函数中通常抛出异常   131

    4.5.3  理解调用堆栈   132

    4.5.4  在哪里捕获异常   134

    4.5.5  重新抛出异常   134

    4.5.6  实现tester-doer模式   136

    4.6  实践和探索   136

    4.6.1  练习4.1:测试你掌握的知识   137

    4.6.2  练习4.2:使用调试和单元测试练习函数的编写   137

    4.6.3  练习4.3:探索主题   137

    4.7  本章小结   138

    第5章  使用面向对象编程技术构建自己的类型   139

    5.1  面向对象编程   139

    5.2  构建类库   140

    5.2.1  创建类库   140

    5.2.2  在名称空间中定义类   141

    5.2.3  成员   142

    5.2.4  实例化类   142

    5.2.5  导入名称空间以使用类型   143

    5.2.6  对象   144

    5.3  在字段中存储数据   145

    5.3.1  定义字段   145

    5.3.2  理解访问修饰符   145

    5.3.3  设置和输出字段值   146

    5.3.4  使用enum类型存储值   146

    5.3.5  使用enum类型存储多个值   147

    5.4  使用集合存储多个值   149

    5.4.1  理解泛型集合   149

    5.4.2  使字段成为静态字段   150

    5.4.3  使字段成为常量   151

    5.4.4  使字段只读   151

    5.4.5  使用构造函数初始化字段   152

    5.5  写入和调用方法   153

    5.5.1  从方法返回值   153

    5.5.2  使用元组组合多个返回值   154

    5.5.3  定义参数并将参数传递给方法   157

    5.5.4  重载方法   157

    5.5.5  传递可选参数和命名参数   158

    5.5.6  控制参数的传递方式   159

    5.5.7  理解ref返回   160

    5.5.8  使用partial关键字分割类   160

    5.6  使用属性和索引器控制访问   161

    5.6.1  定义只读属性   161

    5.6.2  定义可设置的属性   162

    5.6.3  要求在实例化期间设置属性   163

    5.6.4  定义索引器   164

    5.7  模式匹配和对象   165

    5.7.1  创建和引用.NET 6类库   165

    5.7.2  定义飞机乘客   165

    5.7.3  C# 9.0对模式匹配做了增强   167

    5.8  使用记录   167

    5.8.1  init-only属性   167

    5.8.2  理解记录   168

    5.8.3  记录中的位置数据成员   169

    5.9  实践和探索   170

    5.9.1  练习5.1:测试你掌握的知识   170

    5.9.2  练习5.2:探索主题   170

    5.10  本章小结   170

    第6章  实现接口和继承类   171

    6.1  建立类库和控制台应用程序   171

    6.2  方法的更多信息   172

    6.2.1  使用方法实现功能   173

    6.2.2  使用运算符实现功能   174

    6.2.3  使用局部函数实现功能   175

    6.3  触发和处理事件   176

    6.3.1  使用委托调用方法   176

    6.3.2  定义和处理委托   177

    6.3.3  定义和处理事件   178

    6.4  使用泛型安全地重用类型   179

    6.4.1  使用非泛型类型   179

    6.4.2  使用泛型类型   180

    6.5  实现接口   181

    6.5.1  公共接口   181

    6.5.2  排序时比较对象   181

    6.5.3  使用单独的类比较对象   183

    6.5.4  隐式和显式接口实现   184

    6.5.5  使用默认实现定义接口   185

    6.6  使用引用类型和值类型管理内存   186

    6.6.1  定义引用类型和值类型   186

    6.6.2  如何在内存中存储引用和值类型   187

    6.6.3  类型的相等性   188

    6.6.4  定义struct类型   189

    6.6.5  使用record struct类型   190

    6.6.6  释放非托管资源   190

    6.6.7  确保调用Dispose方法   192

    6.7  使用空值   192

    6.7.1  使值类型可为空   192

    6.7.2  理解可空引用类型   193

    6.7.3  启用可空引用类型和不可空引用类型   193

    6.7.4  声明非空变量和参数   194

    6.7.5  检查null   195

    6.8  从类继承   196

    6.8.1  扩展类以添加功能   197

    6.8.2  隐藏成员   197

    6.8.3  覆盖成员   198

    6.8.4  从抽象类继承   199

    6.8.5  防止继承和覆盖   200

    6.8.6  理解多态   200

    6.9  在继承层次结构中进行类型转换   202

    6.9.1  隐式类型转换   202

    6.9.2  显式类型转换   202

    6.9.3  避免类型转换异常   202

    6.10  继承和扩展.NET类型   204

    6.10.1  继承异常   204

    6.10.2  无法继承时扩展类型   205

    6.11  使用分析器编写更好的代码   207

    6.12  实践和探索   211

    6.12.1  练习6.1:测试你掌握的知识   211

    6.12.2  练习6.2:练习创建继承层次结构   212

    6.12.3  练习6.3:探索主题   212

    6.13  本章小结   212

    第7章  理解和打包.NET类型   213

    7.1  .NET 6简介   213

    7.1.1  .NET Core 1.0   214

    7.1.2  .NET Core 1.1   214

    7.1.3  .NET Core 2.0   214

    7.1.4  .NET Core 2.1   214

    7.1.5  .NET Core 2.2   215

    7.1.6  .NET Core 3.0   215

    7.1.7  .NET Core 3.1   215

    7.1.8  .NET 5.0   215

    7.1.9  .NET 6.0   216

    7.1.10  从.NET Core 2.0到.NET 5不断提高性能   216

    7.1.11  检查.NET SDK以进行更新   216

    7.2  了解.NET组件   216

    7.2.1  程序集、包和名称空间   217

    7.2.2  微软.NET SDK平台   217

    7.2.3  理解程序集中的名称空间和类型   218

    7.2.4  NuGet包   218

    7.2.5  框架   219

    7.2.6  导入名称空间以使用类型   219

    7.2.7  将C#关键字与.NET类型相关联   220

    7.2.8  使用.NET Standard在旧平台之间共享代码   222

    7.2.9  理解不同SDK中类库的默认值   222

    7.2.10  创建.NET Standard 2.0类库   223

    7.2.11  控制.NET SDK   223

    7.3  发布用于部署的代码   224

    7.3.1  创建要发布的控制台应用程序   225

    7.3.2  dotnet命令   226

    7.3.3  获取关于.NET及其环境的信息   227

    7.3.4  管理项目   227

    7.3.5  发布自包含的应用程序   228

    7.3.6  发布单文件应用   229

    7.3.7  使用app trimming系统减小应用程序的大小   230

    7.4  反编译程序集   231

    7.4.1  使用Visual Studio 2022的ILSpy扩展进行反编译   231

    7.4.2  使用Visual Studio Code的ILSpy扩展进行反编译   232

    7.4.3  不能在技术上阻止反编译   235

    7.5  为NuGet分发打包自己的库   236

    7.5.1  引用NuGet包   236

    7.5.2  为NuGet打包库   237

    7.5.3  使用工具探索NuGet包   240

    7.5.4  测试类库包   241

    7.6  从.NET Framework移植到.NET   241

    7.6.1  能移植吗?   242

    7.6.2  应该移植吗?   242

    7.6.3  .NET Framework和现代.NET之间的区别   243

    7.6.4  .NET可移植性分析器   243

    7.6.5  .NET升级助手   243

    7.6.6  使用非.NET Standard类库   243

    7.7  使用预览特性   245

    7.7.1  需要预览特性   245

    7.7.2  启用预览特性   245

    7.7.3  通用数学   246

    7.8  实践和探索   246

    7.8.1  练习7.1:测试你掌握的知识   247

    7.8.2  练习7.2:探索主题   247

    7.8.3  练习7.3:探索PowerShell   247

    7.9  本章小结   247

    第8章  使用常见的.NET类型   248

    8.1  处理数字   248

    8.1.1  处理大的整数   249

    8.1.2  处理复数   249

    8.1.3  理解四元数   250

    8.2  处理文本   250

    8.2.1  获取字符串的长度   250

    8.2.2  获取字符串中的字符   251

    8.2.3  拆分字符串   251

    8.2.4  获取字符串的一部分   252

    8.2.5  检查字符串的内容   252

    8.2.6  连接、格式化和其他的字符串成员方法   253

    8.2.7  高效地构建字符串   254

    8.3  处理日期和时间   254

    8.3.1  指定日期和时间值   254

    8.3.2  日期和时间的全球化   256

    8.3.3  只使用日期或时间   257

    8.4  模式匹配与正则表达式   258

    8.4.1  检查作为文本输入的数字   258

    8.4.2  改进正则表达式的性能   259

    8.4.3  正则表达式的语法   260

    8.4.4  正则表达式的例子   260

    8.4.5  分割使用逗号分隔的复杂字符串   261

    8.5  在集合中存储多个对象   262

    8.5.1  所有集合的公共特性   262

    8.5.2  通过确保集合的容量来提高性能   264

    8.5.3  理解集合的选择   264

    8.5.4  使用列表   267

    8.5.5  使用字典   268

    8.5.6  处理队列   270

    8.5.7  集合的排序   272

    8.5.8  使用专门的集合   272

    8.5.9  使用不可变集合   272

    8.5.10  集合的最佳实践   273

    8.6  使用Span、索引和范围   274

    8.6.1  通过Span高效地使用内存   274

    8.6.2  用索引类型标识位置   274

    8.6.3  使用Range值类型标识范围   274

    8.6.4  使用索引、范围和Span   275

    8.7  使用网络资源   275

    8.7.1  使用URI、DNS和IP地址   276

    8.7.2  ping服务器   277

    8.8  处理反射和属性   278

    8.8.1  程序集的版本控制   279

    8.8.2  阅读程序集元数据   279

    8.8.3  创建自定义特性   281

    8.8.4  更多地使用反射   283

    8.9  处理图像   283

    8.10  国际化代码   285

    8.11  实践和探索   287

    8.11.1  练习8.1:测试你掌握的知识   287

    8.11.2  练习8.2:练习正则表达式   287

    8.11.3  练习8.3:练习编写扩展方法   288

    8.11.4  练习8.4:探索主题   288

    8.12  本章小结   288

    第9章  处理文件、流和序列化   289

    9.1  管理文件系统   289

    9.1.1  处理跨平台环境和文件系统   289

    9.1.2  管理驱动器   291

    9.1.3  管理目录   292

    9.1.4  管理文件   293

    9.1.5  管理路径   294

    9.1.6  获取文件信息   294

    9.1.7  控制如何处理文件   295

    9.2  用流来读写   296

    9.2.1  理解抽象和具体的流   296

    9.2.2  写入文本流   297

    9.2.3  写入XML流   299

    9.2.4  文件资源的释放   300

    9.2.5  压缩流   302

    9.2.6  使用Brotli算法进行压缩   304

    9.3  编码和解码文本   306

    9.3.1  将字符串编码为字节数组   306

    9.3.2  对文件中的文本进行编码和解码   308

    9.4  序列化对象图   309

    9.4.1  序列化为XML   309

    9.4.2  生成紧凑的XML   311

    9.4.3  反序列化XML文件   312

    9.4.4  用JSON序列化   313

    9.4.5  高性能的JSON处理   314

    9.5  控制JSON的处理   315

    9.5.1  用于处理HTTP响应的新的JSON扩展方法   317

    9.5.2  从Newtonsoft迁移到新的JSON   317

    9.6  实践和探索   318

    9.6.1  练习9.1:测试你掌握的知识   318

    9.6.2  练习9.2:练习序列化为XML   318

    9.6.3  练习9.3:探索主题   319

    9.7  本章小结   319

    第10章  使用Entity Framework Core处理数据库   320

    10.1  理解现代数据库   320

    10.1.1  理解旧的实体框架   320

    10.1.2  理解Entity Framework Core   321

    10.1.3  使用EF Core创建控制台应用程序   321

    10.1.4  使用示例关系数据库   322

    10.1.5  使用Microsoft SQL Server for Windows   322

    10.1.6  为SQL Server创建Northwind示例数据库   323

    10.1.7  使用Server Explorer管理Northwind示例数据库   324

    10.1.8  使用SQLite   325

    10.1.9  为SQLite创建Northwind示例数据库   326

    10.1.10  使用SQLiteStudio管理Northwind示例数据库   326

    10.2  设置EF Core   327

    10.2.1  选择EF Core数据提供程序   327

    10.2.2  连接到数据库   328

    10.2.3  定义Northwind数据库上下文类   329

    10.3  定义EF Core模型   330

    10.3.1  使用EF Core约定定义模型   331

    10.3.2  使用EF Core注解特性定义模型   331

    10.3.3  使用EF Core Fluent API定义模型   332

    10.3.4  为Northwind表构建EF Core模型   333

    10.3.5  向Northwind数据库上下文类添加表   335

    11.3.6  安装dotnet-ef工具   336

    10.3.7  使用现有数据库搭建模型   336

    10.3.8  配置约定前模型   340

    10.4  查询EF Core模型   340

    10.4.1  过滤结果中返回的实体   342

    10.4.2  过滤和排序产品   343

    10.4.3  获取生成的SQL   344

    10.4.4  使用自定义日志提供程序记录EF Core   345

    10.4.5  模式匹配与Like   349

    10.4.6  定义全局过滤器   350

    10.5  使用EF Core加载模式   350

    10.5.1  立即加载实体   350

    10.5.2  启用延迟加载   351

    10.5.3  显式加载实体   352

    10.6  使用EF Core操作数据   354

    10.6.1  插入实体   354

    10.6.2  更新实体   355

    10.6.3  删除实体   356

    10.6.4  池化数据库环境   357

    10.7  事务   357

    10.7.1  使用隔离级别控制事务   358

    10.7.2  定义显式事务   358

    10.8  Code First EF Core模型   359

    10.9  实践和探索   364

    10.9.1  练习10.1:测试你掌握的知识   364

    10.9.2  练习10.2:练习使用不同的序列化格式导出数据   365

    10.9.3  练习10.3:研究EF Core文档   365

    10.9.4  练习10.4:探索NoSQL数据库   365

    10.10  本章小结   365

    第11章  使用LINQ查询和操作数据   366

    11.1  编写LINQ表达式   366

    11.1.1  LINQ的组成   366

    11.1.2  使用Enumerable类构建LINQ表达式   367

    11.1.3  使用Where扩展方法过滤实体   369

    11.1.4  以命名方法为目标   371

    11.1.5  通过删除委托的显式实例化来简化代码   371

    11.1.6  以lambda表达式为目标   371

    11.1.7  实体的排序   372

    11.1.8  使用var或指定类型来声明查询   373

    11.1.9  根据类型进行过滤   373

    11.1.10  使用LINQ处理集合   374

    11.2  使用LINQ与EF Core   376

    11.2.1  构建EF Core模型   376

    11.2.2  序列的筛选和排序   379

    11.2.3  将序列投影到新的类型中   380

    11.2.4  连接和分组序列   381

    11.2.5  聚合序列   384

    11.3  使用语法糖美化LINQ语法   385

    11.4  使用带有并行LINQ的多个线程   386

    11.5  创建自己的LINQ扩展方法   388

    11.6  使用LINQ to XML   391

    11.6.1  使用LINQ to XML生成XML   391

    11.6.2  使用LINQ to XML读取XML   392

    11.7  实践和探索   393

    11.7.1  练习11.1:测试你掌握的知识   393

    11.7.2  练习11.2:练习使用LINQ进行查询   393

    11.7.3  练习11.3:探索主题   394

    11.8  本章小结   394

    第12章  使用多任务提高性能和可伸缩性   395

    12.1  理解进程、线程和任务   395

    12.2  监控性能和资源使用情况   396

    12.2.1  评估类型的效率   396

    12.2.2  监控性能和内存使用情况   396

    12.2.3  测量处理字符串的效率   399

    12.2.4  使用Benchmark.NET监控性能和内存   400

    12.3  异步运行任务   403

    12.3.1  同步执行多个操作   403

    12.3.2  使用任务异步执行多个操作   405

    12.3.3  等待任务   406

    12.3.4  继续执行另一项任务   407

    12.3.5  嵌套任务和子任务   408

    12.3.6  将任务包装在其他对象周围   409

    12.4  同步访问共享资源   410

    12.4.1  从多个线程访问资源   410

    12.4.2  对conch应用互斥锁   412

    12.4.3  事件的同步   414

    12.4.4  使CPU操作原子化   415

    12.4.5  应用其他类型的同步   415

    12.5  理解async和await   416

    12.5.1  提高控制台应用程序的响应能力   416

    12.5.2  改进GUI应用程序的响应能力   417

    12.5.3  改进Web应用程序和Web服务的可伸缩性   420

    12.5.4  支持多任务处理的常见类型   420

    12.5.5  在catch块中使用await关键字   420

    12.5.6  使用async流   420

    12.6  实践和探索   421

    12.6.1  练习12.1:测试你掌握的知识   422

    12.6.2  练习12.2:探索主题   422

    12.7  本章小结   422

    第13章  C#和.NET的实际应用   423

    13.1  理解C#和.NET的应用模型   423

    13.1.1  使用ASP.NET Core构建网站   423

    13.1.2  构建Web和其他服务   425

    13.1.3  构建移动和桌面应用   425

    13.1.4  .NET MAUI的替代品   426

    13.2  ASP.NET Core的新特性   426

    13.2.1  ASP.NET Core 1.0   427

    13.2.2  ASP.NET Core 1.1   427

    13.2.3  ASP.NET Core 2.0   427

    13.2.4  ASP.NET Core 2.1   427

    13.2.5  ASP.NET Core 2.2   428

    13.2.6  ASP.NET Core 3.0   428

    13.2.7  ASP.NET Core 3.1   428

    13.2.8  Blazor WebAssembly 3.2   428

    13.2.9  ASP.NET Core 5.0   428

    13.2.10  ASP.NET Core 6.0   429

    13.3  构建Windows专用的桌面应用程序   429

    13.3.1  理解旧的Windows应用程序平台   429

    13.3.2  理解现代.NET对旧Windows平台的支持   430

    13.4  结构化项目   430

    13.5  使用其他项目模板   431

    13.6  为Northwind数据库建立实体数据模型   433

    13.6.1  使用SQLite创建实体模型类库   433

    13.6.2  使用SQL Server创建实体模型类库   440

    13.7  实践和探索   442

    13.7.1  练习13.1:测试你掌握的知识   442

    13.7.2  练习13.2:探索主题   442

    13.8  本章小结   442

    第14章  使用ASP.NET Core Razor Pages构建网站   444

    14.1  了解Web开发   444

    14.1.1  HTTP   444

    14.1.2  使用Google Chrome浏览器发出HTTP请求   446

    14.1.3  客户端Web开发技术   448

    14.2  了解ASP.NET Core   448

    14.2.1  传统的ASP.NET与现代的ASP.NET Core   449

    14.2.2  创建ASP.NET Core项目   449

    14.2.3  测试和保护网站   451

    14.2.4  控制托管环境   454

    14.2.5  分离服务和管道的配置   456

    14.2.6  使网站能够提供静态内容   457

    14.3  了解ASP.NET Core Razor Pages   459

    14.3.1  启用Razor Pages   459

    14.3.2  给Razor Pages添加代码   460

    14.3.3  通过Razor Pages使用共享布局   461

    14.3.4  使用后台代码文件与Razor Pages   463

    14.4  使用Entity Framework Core与ASP.NET Core   465

    14.4.1  将Entity Framework Core配置为服务   465

    14.4.2  使用Razor Pages操作数据   467

    14.4.3  将依赖服务注入Razor Pages中   468

    14.5  使用Razor类库   469

    14.5.1  创建Razor类库   469

    14.5.2  禁用Visual Studio Code的Compact Folders功能   469

    14.5.3  使用EF Core实现员工特性   470

    14.5.4  实现分部视图以显示单个员工   472

    14.5.5  使用和测试Razor类库   473

    14.6  配置服务和HTTP请求管道   473

    14.6.1  端点路由   474

    14.6.2  检查项目中的端点路由配置   474

    14.6.3  总结关键的中间件扩展方法   477

    14.6.4  可视化HTTP管道   478

    14.6.5  实现匿名内联委托作为中间件   478

    14.7  实践和探索   479

    14.7.1  练习14.1:测试你掌握的知识   479

    14.7.2  练习14.2:练习建立数据驱动的网页   480

    14.7.3  练习14.3:练习为控制台应用程序构建Web页面   480

    14.7.4  练习14.4:探索主题   480

    14.8  本章小结   480

    第15章  使用MVC模式构建网站   481

    15.1  设置ASP.NET Core MVC网站   481

    15.1.1  创建ASP.NET Core MVC网站   481

    15.1.2  为SQL Server LocalDB创建认证数据库   482

    15.1.3  探索默认的ASP.NET  Core MVC网站   483

    15.1.4  审查MVC网站项目结构   484

    15.1.5  回顾ASP.NET Core Identity数据库   486

    15.2  探索ASP.NET Core MVC网站   487

    15.2.1  了解ASP.NET Core MVC的启动   487

    15.2.2  理解MVC使用的默认路由   489

    15.2.3  理解控制器和操作   489

    15.2.4  理解视图搜索路径约定   492

    15.2.5  了解记录   493

    15.2.6  过滤器   493

    15.2.7  实体和视图模型   498

    15.2.8  视图   500

    15.3  自定义ASP.NET Core MVC网站   502

    15.3.1  自定义样式   503

    15.3.2  设置类别图像   503

    15.3.3  Razor语法   503

    15.3.4  定义类型化视图   504

    15.3.5  测试自定义首页   506

    15.3.6  使用路由值传递参数   507

    15.3.7  模型绑定程序   509

    15.3.8  验证模型   512

    15.3.9  视图辅助方法   514

    15.4  查询数据库和使用显示模板   516

    15.5  使用异步任务提高可伸缩性   518

    15.6  实践与探索   519

    15.6.1  练习15.1:测试你掌握的知识   519

    15.6.2  练习15.2:通过实现类别详细信息页面来练习实现MVC   520

    15.6.3  练习15.3:理解和实现异步操作方法以提高可伸缩性   520

    15.6.4  练习15.4:单元测试MVC控制器   520

    15.6.5  练习15.5:探索主题   520

    15.7  本章小结   520

    第16章  构建和消费Web服务   521

    16.1  使用ASP.NET Core Web API构建Web服务   521

    16.1.1  理解Web服务缩写词   521

    16.1.2  理解Web API的HTTP请求和响应   522

    16.1.3  创建ASP.NET Core Web API项目   524

    16.1.4  检查Web服务的功能   526

    16.1.5  为Northwind示例数据库创建Web服务   527

    16.1.6  为实体创建数据存储库   529

    16.1.7  实现Web API控制器   531

    16.1.8  配置客户存储库和Web API控制器   533

    16.1.9  指定问题的细节   536

    16.1.10  控制XML序列化   537

    16.2  解释和测试Web服务   537

    16.2.1  使用浏览器测试GET请求   538

    16.2.2  使用REST Client扩展测试HTTP请求   539

    16.2.3  启用Swagger   541

    16.2.4  使用Swagger UI测试请求   542

    16.2.5  启用HTTP logging   546

    16.3  使用HTTP客户端消费Web服务   547

    16.3.1  了解HttpClient类   547

    16.3.2  使用HttpClientFactory配置HTTP客户端   548

    16.3.3  在控制器中以JSON的形式获取客户   548

    16.3.4  支持跨源资源共享   550

    16.4  为Web服务实现高级功能   552

    16.4.1  实现健康检查API   552

    16.4.2  实现Open API分析器和约定   552

    16.4.3  实现临时故障处理   553

    16.4.4  添加HTTP安全标头   553

    16.5  使用最少的API构建Web服务   554

    16.5.1  使用最少的API构建天气服务   555

    16.5.2  测试最小天气服务   556

    16.5.3  向Northwind网站主页添加天气预报   556

    16.6  实践和探索   559

    16.6.1  练习16.1:测试你掌握的知识   559

    16.6.2  练习16.2:练习使用HttpClient创建和删除客户   559

    16.6.3  练习16.3:探索主题   559

    16.7  本章小结   559

    第17章  使用Blazor构建用户界面   560

    17.1  理解Blazor   560

    17.1.1  JavaScript   560

    17.1.2  Silverlight——使用插件的C#和.NET   561

    17.1.3  WebAssembly——Blazor的目标   561

    17.1.4  理解Blazor托管模型   561

    17.1.5  理解Blazor组件   562

    17.1.6  比较Blazor和Razor   562

    17.2  比较Blazor项目模板   563

    17.2.1  Blazor服务器项目模板   563

    17.2.2  理解到页面组件的Blazor路由   568

    17.2.3  运行Blazor服务器项目模板   570

    17.2.4  查看Blazor WebAssembly项目模板   571

    17.3  使用Blazor服务器构建组件   575

    17.3.1  定义和测试简单的组件   575

    17.3.2  转换成可路由的页面组件   576

    17.3.3  将实体放入组件   576

    17.4  为Blazor组件抽象服务   579

    17.4.1  使用EditForm组件定义表单   581

    17.4.2  构建和使用客户表单组件   581

    17.4.3  测试客户表单组件   584

    17.5  使用Blazor WebAssembly构建组件   585

    17.5.1  为Blazor WebAssembly配置服务器   586

    17.5.2  为Blazor WebAssembly配置客户端   588

    17.5.3  测试Blazor WebAssembly组件和服务   590

    17.6  改进Blazor WebAssembly应用程序   591

    17.6.1  启用Blazor WebAssembly AOT   591

    17.6.2  Web App的渐进式支持   593

    17.6.3  了解Blazor WebAssembly的浏览器兼容性分析程序   594

    17.6.4  在类库中共享Blazor组件   595

    17.6.5  使用JavaScript交互操作   596

    17.6.6  Blazor组件库   598

    17.7  实践和探索   598

    17.7.1  练习17.1:测试你掌握的知识   599

    17.7.2  练习17.2:练习创建组件   599

    17.7.3  练习17.3:通过创建国家导航项进行练习   599

    17.7.4  练习17.4:探索主题   599

    17.8  本章小结   600

    第18章  构建和消费专业服务   601

    第19章  使用.NET MAUI构建移动和桌面应用程序   660

    第20章  保护数据和应用程序   685

    —以下部分通过二维码扫描获取—

    附录A  练习题答案   709

    后记      726
  • 内容简介:
    这个新版本对上一版做了全面修订,涵盖 C# 10和.NET 6的所有新功能。   本书讨论面向对象编程、编写函数、测试函数、调试函数、实现接口以及继承类等主题;介绍.NET API,这些API可执行多种任务,如管理和查询数据,监视和改进性能,以及使用文件系统、异步流、序列化和加密。你可用ASP.NET Core来构建和部署本书列举的跨平台示例应用程序,如网站和服务。   在学习C#语言和许多.NET库的过程中,为确保不会因不必要的应用代码而分心,第1~12章构建的是控制台应用程序;打下坚实基础后,第13~17章再使用ASP.NET Core、MVC模式以及Blazor构建实际的应用程序和服务。    第18章讲述如何使用Web API、OData、gRPC、GraphQL、SignalR和Azure Functions等技术构建服务;第19章讨论如何使用.NET MAUI构建跨平台应用程序。
  • 作者简介:
    Mark J. Price拥有Microsoft Specialist: Programming in C#、MCSD和MCT等微软编程专家和培训专家认证,拥有20多年的编程和培训经验。自1993年以来,Mark已经通过了80多项微软编程认证,并且擅长帮助他的学生通过这些认证。他的学生中既有经验丰富的编程专家,也有初学编程的中学生。2001年至2003年,Mark在微软美国总部工作,编写官方教学课件。当C#还处于早期的版本时,他的团队就编写了第一个C#培训课程。在微软工作期间,Mark负责培训MCT(微软认证讲师),帮助他们以最快的速度掌握C#和.NET的新知识。
  • 目录:
    第1章  C#与.NET入门   1

    1.1  设置开发环境   2

    1.1.1  选择适合学习的工具和应用程序类型   2

    1.1.2  跨平台部署   4

    1.1.3  下载并安装Visual Studio 2022 for Windows   5

    1.1.4  下载并安装 Visual Studio Code   6

    1.2  理解.NET   8

    1.2.1  理解.NET Framework   8

    1.2.2  理解Mono、Xamarin和Unity项目   8

    1.2.3  理解.NET Core   8

    1.2.4  了解.NET的未来版本   9

    1.2.5  了解.NET支持   10

    1.2.6  现代.NET的区别   11

    1.2.7  现代.NET的主题   12

    1.2.8  了解.NET Standard   12

    1.2.9  本书使用的.NET平台和工具   13

    1.2.10  理解中间语言   13

    1.2.11  比较.NET技术   14

    1.3  使用Visual Studio 2022构建控制台应用程序   14

    1.3.1  使用Visual Studio 2022管理多个项目   14

    1.3.2  使用Visual Studio 2022编写代码   14

    1.3.3  使用Visual Studio编译和运行代码   15

    1.3.4  编写顶级程序   16

    1.3.5  使用Visual Studio 2022添加第二个项目   17

    1.4  使用Visual Studio Code构建控制台应用程序   19

    1.4.1  使用Visual Studio Code管理多个项目   19

    1.4.2  使用Visual Studio Code编写代码   19

    1.4.3  使用dotnet命令行编译和运行代码   21

    1.4.4  使用Visual Studio Code添加第二个项目   22

    1.4.5  使用Visual Studio Code管理多个文件   23

    1.5  使用.NET Interactive Notebooks探索代码   23

    1.5.1  创建一个Notebook   23

    1.5.2  在Notebook上编写和运行代码   24

    1.5.3  保存Notebook   25

    1.5.4  给Notebook添加Markdown和特殊命令   25

    1.5.5  在多个单元中执行代码   26

    1.5.6  为本书中的代码使用.NET Interactive Notebooks   27

    1.6  检查项目的文件夹和文件   27

    1.6.1  了解常见的文件夹和文件   28

    1.6.2  理解GitHub中的解决方案代码   28

    1.7  充分利用本书的GitHub存储库   28

    1.7.1  对本书提出问题   29

    1.7.2  反馈   29

    1.7.3  从GitHub存储库下载解决方案代码   29

    1.7.4  使用Git、Visual Studio Code和命令行   30

    1.8  寻求帮助   30

    1.8.1  阅读微软文档   30

    1.8.2  获取关于dotnet工具的帮助   30

    1.8.3  获取类型及其成员的定义   31

    1.8.4  在Stack Overflow上寻找答案   33

    1.8.5  使用谷歌搜索答案   33

    1.8.6  订阅官方的.NET博客   33

    1.8.7  观看Scott Hanselman的视频   34

    1.9  实践和探索   34

    1.9.1  练习1.1:测试你掌握的知识   34

    1.9.2  练习1.2:在任何地方练习C#   34

    1.9.3  练习1.3:探索主题   34

    1.10  本章小结   35

    第2章  C#编程基础   36

    2.1  介绍C#   36

    2.1.1  理解语言版本和特性   36

    2.1.2  了解C#标准   39

    2.1.3  发现C#编译器版本   40

    2.2  理解C#语法和词汇   41

    2.2.1  显示编译器版本   42

    2.2.2  了解C#语法   43

    2.2.3  语句   43

    2.2.4  注释   43

    2.2.5  块   44

    2.2.6  语句和块的示例   44

    2.2.7  了解C#词汇表   44

    2.2.8  将编程语言与人类语言进行比较   44

    2.2.9  改变C#语法的配色方案   45

    2.2.10  如何编写正确的代码   45

    2.2.11  导入名称空间   46

    2.2.12  动词表示方法   48

    2.2.13  名词表示类型、变量、字段和属性   49

    2.2.14  揭示C#词汇表的范围   49

    2.3  使用变量   51

    2.3.1  命名和赋值   51

    2.3.2  字面值   52

    2.3.3  存储文本   52

    2.3.4  存储数字   53

    2.3.5  存储实数   54

    2.3.6  存储布尔值   57

    2.3.7  存储任何类型的对象   57

    2.3.8  动态存储类型   58

    2.3.9  声明局部变量   59

    2.3.10  获取和设置类型的默认值   61

    2.3.11  在数组中存储多个值   61

    2.4  深入研究控制台应用程序   62

    2.4.1  向用户显示输出   63

    2.4.2  从用户那里获取文本输入   65

    2.4.3  简化控制台的使用   66

    2.4.4  获取用户的重要输入   66

    2.4.5  向控制台应用程序传递参数   67

    2.4.6  使用参数设置选项   68

    2.4.7  处理不支持API的平台   70

    2.5  实践和探索   71

    2.5.1  练习2.1:测试你掌握的知识   71

    2.5.2  练习2.2:测试对数字类型的了解   72

    2.5.3  练习2.3:练习数字的大小和范围   72

    2.5.4  练习2.4:探索主题   72

    2.6  本章小结   73

    第3章  控制程序流程、转换类型和处理异常   74

    3.1  操作变量   74

    3.1.1  一元算术运算符   75

    3.1.2  二元算术运算符   76

    3.1.3  赋值运算符   77

    3.1.4  逻辑运算符   77

    3.1.5  条件逻辑运算符   78

    3.1.6  按位和二元移位运算符   79

    3.1.7  其他运算符   80

    3.2  理解选择语句   81

    3.2.1  使用if语句进行分支   81

    3.2.2  模式匹配与if语句   82

    3.2.3  使用switch语句进行分支   83

    3.2.4  模式匹配与switch语句   84

    3.2.5  使用switch表达式简化switch语句   86

    3.3  理解迭代语句   86

    3.3.1  while循环语句   86

    3.3.2  do循环语句   87

    3.3.3  for循环语句   87

    3.3.4  foreach循环语句   88

    3.4  类型转换   88

    3.4.1  隐式和显式地转换数值   89

    3.4.2  使用System.Convert类型进行转换   90

    3.4.3  圆整数字   90

    3.4.4  控制圆整规则   91

    3.4.5  从任何类型转换为字符串   92

    3.4.6  从二进制对象转换为字符串   92

    3.4.7  将字符串转换为数值或日期和时间   93

    3.5  处理异常   94

    3.6  检查溢出   98

    3.6.1  使用checked语句抛出溢出异常   98

    3.6.2  使用unchecked语句禁用编译时检查溢出   99

    3.7  实践和探索   100

    3.7.1  练习3.1:测试你掌握的知识   100

    3.7.2  练习3.2:探索循环和溢出   100

    3.7.3  练习3.3:实践循环和运算符   101

    3.7.4  练习3.4:实践异常处理   101

    3.7.5  练习3.5:测试你对运算符的认识程度   101

    3.7.6  练习3.6:探索主题   102

    3.8  本章小结   102

    第4章  编写、调试和测试函数   103

    4.1  编写函数   103

    4.1.1  乘法表示例   103

    4.1.2  编写带返回值的函数   105

    4.1.3  将数字从序数转换为基数   106

    4.1.4  用递归计算阶乘   108

    4.1.5  使用XML注释解释函数   110

    4.1.6  在函数实现中使用lambda   111

    4.2  在开发过程中进行调试   113

    4.2.1  创建带有故意错误的代码   113

    4.2.2  设置断点并开始调试   114

    4.2.3  使用调试工具栏进行导航   116

    4.2.4  调试窗格   117

    4.2.5  单步执行代码   117

    4.2.6  自定义断点   119

    4.3  在开发和运行时进行日志记录   120

    4.3.1  理解日志记录选项   120

    4.3.2  使用Debug和Trace类型   120

    4.3.3  配置跟踪侦听器   122

    4.3.4  切换跟踪级别   123

    4.4  单元测试   127

    4.4.1  理解测试类型   127

    4.4.2  创建需要测试的类库   128

    4.4.3  编写单元测试   129

    4.5  在函数中抛出和捕获异常   131

    4.5.1  理解使用错误和执行错误   131

    4.5.2  在函数中通常抛出异常   131

    4.5.3  理解调用堆栈   132

    4.5.4  在哪里捕获异常   134

    4.5.5  重新抛出异常   134

    4.5.6  实现tester-doer模式   136

    4.6  实践和探索   136

    4.6.1  练习4.1:测试你掌握的知识   137

    4.6.2  练习4.2:使用调试和单元测试练习函数的编写   137

    4.6.3  练习4.3:探索主题   137

    4.7  本章小结   138

    第5章  使用面向对象编程技术构建自己的类型   139

    5.1  面向对象编程   139

    5.2  构建类库   140

    5.2.1  创建类库   140

    5.2.2  在名称空间中定义类   141

    5.2.3  成员   142

    5.2.4  实例化类   142

    5.2.5  导入名称空间以使用类型   143

    5.2.6  对象   144

    5.3  在字段中存储数据   145

    5.3.1  定义字段   145

    5.3.2  理解访问修饰符   145

    5.3.3  设置和输出字段值   146

    5.3.4  使用enum类型存储值   146

    5.3.5  使用enum类型存储多个值   147

    5.4  使用集合存储多个值   149

    5.4.1  理解泛型集合   149

    5.4.2  使字段成为静态字段   150

    5.4.3  使字段成为常量   151

    5.4.4  使字段只读   151

    5.4.5  使用构造函数初始化字段   152

    5.5  写入和调用方法   153

    5.5.1  从方法返回值   153

    5.5.2  使用元组组合多个返回值   154

    5.5.3  定义参数并将参数传递给方法   157

    5.5.4  重载方法   157

    5.5.5  传递可选参数和命名参数   158

    5.5.6  控制参数的传递方式   159

    5.5.7  理解ref返回   160

    5.5.8  使用partial关键字分割类   160

    5.6  使用属性和索引器控制访问   161

    5.6.1  定义只读属性   161

    5.6.2  定义可设置的属性   162

    5.6.3  要求在实例化期间设置属性   163

    5.6.4  定义索引器   164

    5.7  模式匹配和对象   165

    5.7.1  创建和引用.NET 6类库   165

    5.7.2  定义飞机乘客   165

    5.7.3  C# 9.0对模式匹配做了增强   167

    5.8  使用记录   167

    5.8.1  init-only属性   167

    5.8.2  理解记录   168

    5.8.3  记录中的位置数据成员   169

    5.9  实践和探索   170

    5.9.1  练习5.1:测试你掌握的知识   170

    5.9.2  练习5.2:探索主题   170

    5.10  本章小结   170

    第6章  实现接口和继承类   171

    6.1  建立类库和控制台应用程序   171

    6.2  方法的更多信息   172

    6.2.1  使用方法实现功能   173

    6.2.2  使用运算符实现功能   174

    6.2.3  使用局部函数实现功能   175

    6.3  触发和处理事件   176

    6.3.1  使用委托调用方法   176

    6.3.2  定义和处理委托   177

    6.3.3  定义和处理事件   178

    6.4  使用泛型安全地重用类型   179

    6.4.1  使用非泛型类型   179

    6.4.2  使用泛型类型   180

    6.5  实现接口   181

    6.5.1  公共接口   181

    6.5.2  排序时比较对象   181

    6.5.3  使用单独的类比较对象   183

    6.5.4  隐式和显式接口实现   184

    6.5.5  使用默认实现定义接口   185

    6.6  使用引用类型和值类型管理内存   186

    6.6.1  定义引用类型和值类型   186

    6.6.2  如何在内存中存储引用和值类型   187

    6.6.3  类型的相等性   188

    6.6.4  定义struct类型   189

    6.6.5  使用record struct类型   190

    6.6.6  释放非托管资源   190

    6.6.7  确保调用Dispose方法   192

    6.7  使用空值   192

    6.7.1  使值类型可为空   192

    6.7.2  理解可空引用类型   193

    6.7.3  启用可空引用类型和不可空引用类型   193

    6.7.4  声明非空变量和参数   194

    6.7.5  检查null   195

    6.8  从类继承   196

    6.8.1  扩展类以添加功能   197

    6.8.2  隐藏成员   197

    6.8.3  覆盖成员   198

    6.8.4  从抽象类继承   199

    6.8.5  防止继承和覆盖   200

    6.8.6  理解多态   200

    6.9  在继承层次结构中进行类型转换   202

    6.9.1  隐式类型转换   202

    6.9.2  显式类型转换   202

    6.9.3  避免类型转换异常   202

    6.10  继承和扩展.NET类型   204

    6.10.1  继承异常   204

    6.10.2  无法继承时扩展类型   205

    6.11  使用分析器编写更好的代码   207

    6.12  实践和探索   211

    6.12.1  练习6.1:测试你掌握的知识   211

    6.12.2  练习6.2:练习创建继承层次结构   212

    6.12.3  练习6.3:探索主题   212

    6.13  本章小结   212

    第7章  理解和打包.NET类型   213

    7.1  .NET 6简介   213

    7.1.1  .NET Core 1.0   214

    7.1.2  .NET Core 1.1   214

    7.1.3  .NET Core 2.0   214

    7.1.4  .NET Core 2.1   214

    7.1.5  .NET Core 2.2   215

    7.1.6  .NET Core 3.0   215

    7.1.7  .NET Core 3.1   215

    7.1.8  .NET 5.0   215

    7.1.9  .NET 6.0   216

    7.1.10  从.NET Core 2.0到.NET 5不断提高性能   216

    7.1.11  检查.NET SDK以进行更新   216

    7.2  了解.NET组件   216

    7.2.1  程序集、包和名称空间   217

    7.2.2  微软.NET SDK平台   217

    7.2.3  理解程序集中的名称空间和类型   218

    7.2.4  NuGet包   218

    7.2.5  框架   219

    7.2.6  导入名称空间以使用类型   219

    7.2.7  将C#关键字与.NET类型相关联   220

    7.2.8  使用.NET Standard在旧平台之间共享代码   222

    7.2.9  理解不同SDK中类库的默认值   222

    7.2.10  创建.NET Standard 2.0类库   223

    7.2.11  控制.NET SDK   223

    7.3  发布用于部署的代码   224

    7.3.1  创建要发布的控制台应用程序   225

    7.3.2  dotnet命令   226

    7.3.3  获取关于.NET及其环境的信息   227

    7.3.4  管理项目   227

    7.3.5  发布自包含的应用程序   228

    7.3.6  发布单文件应用   229

    7.3.7  使用app trimming系统减小应用程序的大小   230

    7.4  反编译程序集   231

    7.4.1  使用Visual Studio 2022的ILSpy扩展进行反编译   231

    7.4.2  使用Visual Studio Code的ILSpy扩展进行反编译   232

    7.4.3  不能在技术上阻止反编译   235

    7.5  为NuGet分发打包自己的库   236

    7.5.1  引用NuGet包   236

    7.5.2  为NuGet打包库   237

    7.5.3  使用工具探索NuGet包   240

    7.5.4  测试类库包   241

    7.6  从.NET Framework移植到.NET   241

    7.6.1  能移植吗?   242

    7.6.2  应该移植吗?   242

    7.6.3  .NET Framework和现代.NET之间的区别   243

    7.6.4  .NET可移植性分析器   243

    7.6.5  .NET升级助手   243

    7.6.6  使用非.NET Standard类库   243

    7.7  使用预览特性   245

    7.7.1  需要预览特性   245

    7.7.2  启用预览特性   245

    7.7.3  通用数学   246

    7.8  实践和探索   246

    7.8.1  练习7.1:测试你掌握的知识   247

    7.8.2  练习7.2:探索主题   247

    7.8.3  练习7.3:探索PowerShell   247

    7.9  本章小结   247

    第8章  使用常见的.NET类型   248

    8.1  处理数字   248

    8.1.1  处理大的整数   249

    8.1.2  处理复数   249

    8.1.3  理解四元数   250

    8.2  处理文本   250

    8.2.1  获取字符串的长度   250

    8.2.2  获取字符串中的字符   251

    8.2.3  拆分字符串   251

    8.2.4  获取字符串的一部分   252

    8.2.5  检查字符串的内容   252

    8.2.6  连接、格式化和其他的字符串成员方法   253

    8.2.7  高效地构建字符串   254

    8.3  处理日期和时间   254

    8.3.1  指定日期和时间值   254

    8.3.2  日期和时间的全球化   256

    8.3.3  只使用日期或时间   257

    8.4  模式匹配与正则表达式   258

    8.4.1  检查作为文本输入的数字   258

    8.4.2  改进正则表达式的性能   259

    8.4.3  正则表达式的语法   260

    8.4.4  正则表达式的例子   260

    8.4.5  分割使用逗号分隔的复杂字符串   261

    8.5  在集合中存储多个对象   262

    8.5.1  所有集合的公共特性   262

    8.5.2  通过确保集合的容量来提高性能   264

    8.5.3  理解集合的选择   264

    8.5.4  使用列表   267

    8.5.5  使用字典   268

    8.5.6  处理队列   270

    8.5.7  集合的排序   272

    8.5.8  使用专门的集合   272

    8.5.9  使用不可变集合   272

    8.5.10  集合的最佳实践   273

    8.6  使用Span、索引和范围   274

    8.6.1  通过Span高效地使用内存   274

    8.6.2  用索引类型标识位置   274

    8.6.3  使用Range值类型标识范围   274

    8.6.4  使用索引、范围和Span   275

    8.7  使用网络资源   275

    8.7.1  使用URI、DNS和IP地址   276

    8.7.2  ping服务器   277

    8.8  处理反射和属性   278

    8.8.1  程序集的版本控制   279

    8.8.2  阅读程序集元数据   279

    8.8.3  创建自定义特性   281

    8.8.4  更多地使用反射   283

    8.9  处理图像   283

    8.10  国际化代码   285

    8.11  实践和探索   287

    8.11.1  练习8.1:测试你掌握的知识   287

    8.11.2  练习8.2:练习正则表达式   287

    8.11.3  练习8.3:练习编写扩展方法   288

    8.11.4  练习8.4:探索主题   288

    8.12  本章小结   288

    第9章  处理文件、流和序列化   289

    9.1  管理文件系统   289

    9.1.1  处理跨平台环境和文件系统   289

    9.1.2  管理驱动器   291

    9.1.3  管理目录   292

    9.1.4  管理文件   293

    9.1.5  管理路径   294

    9.1.6  获取文件信息   294

    9.1.7  控制如何处理文件   295

    9.2  用流来读写   296

    9.2.1  理解抽象和具体的流   296

    9.2.2  写入文本流   297

    9.2.3  写入XML流   299

    9.2.4  文件资源的释放   300

    9.2.5  压缩流   302

    9.2.6  使用Brotli算法进行压缩   304

    9.3  编码和解码文本   306

    9.3.1  将字符串编码为字节数组   306

    9.3.2  对文件中的文本进行编码和解码   308

    9.4  序列化对象图   309

    9.4.1  序列化为XML   309

    9.4.2  生成紧凑的XML   311

    9.4.3  反序列化XML文件   312

    9.4.4  用JSON序列化   313

    9.4.5  高性能的JSON处理   314

    9.5  控制JSON的处理   315

    9.5.1  用于处理HTTP响应的新的JSON扩展方法   317

    9.5.2  从Newtonsoft迁移到新的JSON   317

    9.6  实践和探索   318

    9.6.1  练习9.1:测试你掌握的知识   318

    9.6.2  练习9.2:练习序列化为XML   318

    9.6.3  练习9.3:探索主题   319

    9.7  本章小结   319

    第10章  使用Entity Framework Core处理数据库   320

    10.1  理解现代数据库   320

    10.1.1  理解旧的实体框架   320

    10.1.2  理解Entity Framework Core   321

    10.1.3  使用EF Core创建控制台应用程序   321

    10.1.4  使用示例关系数据库   322

    10.1.5  使用Microsoft SQL Server for Windows   322

    10.1.6  为SQL Server创建Northwind示例数据库   323

    10.1.7  使用Server Explorer管理Northwind示例数据库   324

    10.1.8  使用SQLite   325

    10.1.9  为SQLite创建Northwind示例数据库   326

    10.1.10  使用SQLiteStudio管理Northwind示例数据库   326

    10.2  设置EF Core   327

    10.2.1  选择EF Core数据提供程序   327

    10.2.2  连接到数据库   328

    10.2.3  定义Northwind数据库上下文类   329

    10.3  定义EF Core模型   330

    10.3.1  使用EF Core约定定义模型   331

    10.3.2  使用EF Core注解特性定义模型   331

    10.3.3  使用EF Core Fluent API定义模型   332

    10.3.4  为Northwind表构建EF Core模型   333

    10.3.5  向Northwind数据库上下文类添加表   335

    11.3.6  安装dotnet-ef工具   336

    10.3.7  使用现有数据库搭建模型   336

    10.3.8  配置约定前模型   340

    10.4  查询EF Core模型   340

    10.4.1  过滤结果中返回的实体   342

    10.4.2  过滤和排序产品   343

    10.4.3  获取生成的SQL   344

    10.4.4  使用自定义日志提供程序记录EF Core   345

    10.4.5  模式匹配与Like   349

    10.4.6  定义全局过滤器   350

    10.5  使用EF Core加载模式   350

    10.5.1  立即加载实体   350

    10.5.2  启用延迟加载   351

    10.5.3  显式加载实体   352

    10.6  使用EF Core操作数据   354

    10.6.1  插入实体   354

    10.6.2  更新实体   355

    10.6.3  删除实体   356

    10.6.4  池化数据库环境   357

    10.7  事务   357

    10.7.1  使用隔离级别控制事务   358

    10.7.2  定义显式事务   358

    10.8  Code First EF Core模型   359

    10.9  实践和探索   364

    10.9.1  练习10.1:测试你掌握的知识   364

    10.9.2  练习10.2:练习使用不同的序列化格式导出数据   365

    10.9.3  练习10.3:研究EF Core文档   365

    10.9.4  练习10.4:探索NoSQL数据库   365

    10.10  本章小结   365

    第11章  使用LINQ查询和操作数据   366

    11.1  编写LINQ表达式   366

    11.1.1  LINQ的组成   366

    11.1.2  使用Enumerable类构建LINQ表达式   367

    11.1.3  使用Where扩展方法过滤实体   369

    11.1.4  以命名方法为目标   371

    11.1.5  通过删除委托的显式实例化来简化代码   371

    11.1.6  以lambda表达式为目标   371

    11.1.7  实体的排序   372

    11.1.8  使用var或指定类型来声明查询   373

    11.1.9  根据类型进行过滤   373

    11.1.10  使用LINQ处理集合   374

    11.2  使用LINQ与EF Core   376

    11.2.1  构建EF Core模型   376

    11.2.2  序列的筛选和排序   379

    11.2.3  将序列投影到新的类型中   380

    11.2.4  连接和分组序列   381

    11.2.5  聚合序列   384

    11.3  使用语法糖美化LINQ语法   385

    11.4  使用带有并行LINQ的多个线程   386

    11.5  创建自己的LINQ扩展方法   388

    11.6  使用LINQ to XML   391

    11.6.1  使用LINQ to XML生成XML   391

    11.6.2  使用LINQ to XML读取XML   392

    11.7  实践和探索   393

    11.7.1  练习11.1:测试你掌握的知识   393

    11.7.2  练习11.2:练习使用LINQ进行查询   393

    11.7.3  练习11.3:探索主题   394

    11.8  本章小结   394

    第12章  使用多任务提高性能和可伸缩性   395

    12.1  理解进程、线程和任务   395

    12.2  监控性能和资源使用情况   396

    12.2.1  评估类型的效率   396

    12.2.2  监控性能和内存使用情况   396

    12.2.3  测量处理字符串的效率   399

    12.2.4  使用Benchmark.NET监控性能和内存   400

    12.3  异步运行任务   403

    12.3.1  同步执行多个操作   403

    12.3.2  使用任务异步执行多个操作   405

    12.3.3  等待任务   406

    12.3.4  继续执行另一项任务   407

    12.3.5  嵌套任务和子任务   408

    12.3.6  将任务包装在其他对象周围   409

    12.4  同步访问共享资源   410

    12.4.1  从多个线程访问资源   410

    12.4.2  对conch应用互斥锁   412

    12.4.3  事件的同步   414

    12.4.4  使CPU操作原子化   415

    12.4.5  应用其他类型的同步   415

    12.5  理解async和await   416

    12.5.1  提高控制台应用程序的响应能力   416

    12.5.2  改进GUI应用程序的响应能力   417

    12.5.3  改进Web应用程序和Web服务的可伸缩性   420

    12.5.4  支持多任务处理的常见类型   420

    12.5.5  在catch块中使用await关键字   420

    12.5.6  使用async流   420

    12.6  实践和探索   421

    12.6.1  练习12.1:测试你掌握的知识   422

    12.6.2  练习12.2:探索主题   422

    12.7  本章小结   422

    第13章  C#和.NET的实际应用   423

    13.1  理解C#和.NET的应用模型   423

    13.1.1  使用ASP.NET Core构建网站   423

    13.1.2  构建Web和其他服务   425

    13.1.3  构建移动和桌面应用   425

    13.1.4  .NET MAUI的替代品   426

    13.2  ASP.NET Core的新特性   426

    13.2.1  ASP.NET Core 1.0   427

    13.2.2  ASP.NET Core 1.1   427

    13.2.3  ASP.NET Core 2.0   427

    13.2.4  ASP.NET Core 2.1   427

    13.2.5  ASP.NET Core 2.2   428

    13.2.6  ASP.NET Core 3.0   428

    13.2.7  ASP.NET Core 3.1   428

    13.2.8  Blazor WebAssembly 3.2   428

    13.2.9  ASP.NET Core 5.0   428

    13.2.10  ASP.NET Core 6.0   429

    13.3  构建Windows专用的桌面应用程序   429

    13.3.1  理解旧的Windows应用程序平台   429

    13.3.2  理解现代.NET对旧Windows平台的支持   430

    13.4  结构化项目   430

    13.5  使用其他项目模板   431

    13.6  为Northwind数据库建立实体数据模型   433

    13.6.1  使用SQLite创建实体模型类库   433

    13.6.2  使用SQL Server创建实体模型类库   440

    13.7  实践和探索   442

    13.7.1  练习13.1:测试你掌握的知识   442

    13.7.2  练习13.2:探索主题   442

    13.8  本章小结   442

    第14章  使用ASP.NET Core Razor Pages构建网站   444

    14.1  了解Web开发   444

    14.1.1  HTTP   444

    14.1.2  使用Google Chrome浏览器发出HTTP请求   446

    14.1.3  客户端Web开发技术   448

    14.2  了解ASP.NET Core   448

    14.2.1  传统的ASP.NET与现代的ASP.NET Core   449

    14.2.2  创建ASP.NET Core项目   449

    14.2.3  测试和保护网站   451

    14.2.4  控制托管环境   454

    14.2.5  分离服务和管道的配置   456

    14.2.6  使网站能够提供静态内容   457

    14.3  了解ASP.NET Core Razor Pages   459

    14.3.1  启用Razor Pages   459

    14.3.2  给Razor Pages添加代码   460

    14.3.3  通过Razor Pages使用共享布局   461

    14.3.4  使用后台代码文件与Razor Pages   463

    14.4  使用Entity Framework Core与ASP.NET Core   465

    14.4.1  将Entity Framework Core配置为服务   465

    14.4.2  使用Razor Pages操作数据   467

    14.4.3  将依赖服务注入Razor Pages中   468

    14.5  使用Razor类库   469

    14.5.1  创建Razor类库   469

    14.5.2  禁用Visual Studio Code的Compact Folders功能   469

    14.5.3  使用EF Core实现员工特性   470

    14.5.4  实现分部视图以显示单个员工   472

    14.5.5  使用和测试Razor类库   473

    14.6  配置服务和HTTP请求管道   473

    14.6.1  端点路由   474

    14.6.2  检查项目中的端点路由配置   474

    14.6.3  总结关键的中间件扩展方法   477

    14.6.4  可视化HTTP管道   478

    14.6.5  实现匿名内联委托作为中间件   478

    14.7  实践和探索   479

    14.7.1  练习14.1:测试你掌握的知识   479

    14.7.2  练习14.2:练习建立数据驱动的网页   480

    14.7.3  练习14.3:练习为控制台应用程序构建Web页面   480

    14.7.4  练习14.4:探索主题   480

    14.8  本章小结   480

    第15章  使用MVC模式构建网站   481

    15.1  设置ASP.NET Core MVC网站   481

    15.1.1  创建ASP.NET Core MVC网站   481

    15.1.2  为SQL Server LocalDB创建认证数据库   482

    15.1.3  探索默认的ASP.NET  Core MVC网站   483

    15.1.4  审查MVC网站项目结构   484

    15.1.5  回顾ASP.NET Core Identity数据库   486

    15.2  探索ASP.NET Core MVC网站   487

    15.2.1  了解ASP.NET Core MVC的启动   487

    15.2.2  理解MVC使用的默认路由   489

    15.2.3  理解控制器和操作   489

    15.2.4  理解视图搜索路径约定   492

    15.2.5  了解记录   493

    15.2.6  过滤器   493

    15.2.7  实体和视图模型   498

    15.2.8  视图   500

    15.3  自定义ASP.NET Core MVC网站   502

    15.3.1  自定义样式   503

    15.3.2  设置类别图像   503

    15.3.3  Razor语法   503

    15.3.4  定义类型化视图   504

    15.3.5  测试自定义首页   506

    15.3.6  使用路由值传递参数   507

    15.3.7  模型绑定程序   509

    15.3.8  验证模型   512

    15.3.9  视图辅助方法   514

    15.4  查询数据库和使用显示模板   516

    15.5  使用异步任务提高可伸缩性   518

    15.6  实践与探索   519

    15.6.1  练习15.1:测试你掌握的知识   519

    15.6.2  练习15.2:通过实现类别详细信息页面来练习实现MVC   520

    15.6.3  练习15.3:理解和实现异步操作方法以提高可伸缩性   520

    15.6.4  练习15.4:单元测试MVC控制器   520

    15.6.5  练习15.5:探索主题   520

    15.7  本章小结   520

    第16章  构建和消费Web服务   521

    16.1  使用ASP.NET Core Web API构建Web服务   521

    16.1.1  理解Web服务缩写词   521

    16.1.2  理解Web API的HTTP请求和响应   522

    16.1.3  创建ASP.NET Core Web API项目   524

    16.1.4  检查Web服务的功能   526

    16.1.5  为Northwind示例数据库创建Web服务   527

    16.1.6  为实体创建数据存储库   529

    16.1.7  实现Web API控制器   531

    16.1.8  配置客户存储库和Web API控制器   533

    16.1.9  指定问题的细节   536

    16.1.10  控制XML序列化   537

    16.2  解释和测试Web服务   537

    16.2.1  使用浏览器测试GET请求   538

    16.2.2  使用REST Client扩展测试HTTP请求   539

    16.2.3  启用Swagger   541

    16.2.4  使用Swagger UI测试请求   542

    16.2.5  启用HTTP logging   546

    16.3  使用HTTP客户端消费Web服务   547

    16.3.1  了解HttpClient类   547

    16.3.2  使用HttpClientFactory配置HTTP客户端   548

    16.3.3  在控制器中以JSON的形式获取客户   548

    16.3.4  支持跨源资源共享   550

    16.4  为Web服务实现高级功能   552

    16.4.1  实现健康检查API   552

    16.4.2  实现Open API分析器和约定   552

    16.4.3  实现临时故障处理   553

    16.4.4  添加HTTP安全标头   553

    16.5  使用最少的API构建Web服务   554

    16.5.1  使用最少的API构建天气服务   555

    16.5.2  测试最小天气服务   556

    16.5.3  向Northwind网站主页添加天气预报   556

    16.6  实践和探索   559

    16.6.1  练习16.1:测试你掌握的知识   559

    16.6.2  练习16.2:练习使用HttpClient创建和删除客户   559

    16.6.3  练习16.3:探索主题   559

    16.7  本章小结   559

    第17章  使用Blazor构建用户界面   560

    17.1  理解Blazor   560

    17.1.1  JavaScript   560

    17.1.2  Silverlight——使用插件的C#和.NET   561

    17.1.3  WebAssembly——Blazor的目标   561

    17.1.4  理解Blazor托管模型   561

    17.1.5  理解Blazor组件   562

    17.1.6  比较Blazor和Razor   562

    17.2  比较Blazor项目模板   563

    17.2.1  Blazor服务器项目模板   563

    17.2.2  理解到页面组件的Blazor路由   568

    17.2.3  运行Blazor服务器项目模板   570

    17.2.4  查看Blazor WebAssembly项目模板   571

    17.3  使用Blazor服务器构建组件   575

    17.3.1  定义和测试简单的组件   575

    17.3.2  转换成可路由的页面组件   576

    17.3.3  将实体放入组件   576

    17.4  为Blazor组件抽象服务   579

    17.4.1  使用EditForm组件定义表单   581

    17.4.2  构建和使用客户表单组件   581

    17.4.3  测试客户表单组件   584

    17.5  使用Blazor WebAssembly构建组件   585

    17.5.1  为Blazor WebAssembly配置服务器   586

    17.5.2  为Blazor WebAssembly配置客户端   588

    17.5.3  测试Blazor WebAssembly组件和服务   590

    17.6  改进Blazor WebAssembly应用程序   591

    17.6.1  启用Blazor WebAssembly AOT   591

    17.6.2  Web App的渐进式支持   593

    17.6.3  了解Blazor WebAssembly的浏览器兼容性分析程序   594

    17.6.4  在类库中共享Blazor组件   595

    17.6.5  使用JavaScript交互操作   596

    17.6.6  Blazor组件库   598

    17.7  实践和探索   598

    17.7.1  练习17.1:测试你掌握的知识   599

    17.7.2  练习17.2:练习创建组件   599

    17.7.3  练习17.3:通过创建国家导航项进行练习   599

    17.7.4  练习17.4:探索主题   599

    17.8  本章小结   600

    第18章  构建和消费专业服务   601

    第19章  使用.NET MAUI构建移动和桌面应用程序   660

    第20章  保护数据和应用程序   685

    —以下部分通过二维码扫描获取—

    附录A  练习题答案   709

    后记      726
查看详情
12
相关图书 / 更多
C# 10 和 .NET 6入门与跨平台开发(第6版)
C#图书馆自动化技术与应用
于源 著
C# 10 和 .NET 6入门与跨平台开发(第6版)
C#从入门到精通(第7版)
明日科技
C# 10 和 .NET 6入门与跨平台开发(第6版)
C#程序设计实验指导与习题测试(第4版)
余青松;江红
C# 10 和 .NET 6入门与跨平台开发(第6版)
C#开发案例精粹
明日科技
C# 10 和 .NET 6入门与跨平台开发(第6版)
C#网络应用编程(第4版 微课版)
马骏 韩道军
C# 10 和 .NET 6入门与跨平台开发(第6版)
C#程序设计
路炜
C# 10 和 .NET 6入门与跨平台开发(第6版)
C#编程开发实战(微课视频版)
郭佳佳;涂振;陈林
C# 10 和 .NET 6入门与跨平台开发(第6版)
C#可视化程序设计案例教程 第5版
刘培林 史荧中 刘贵锋
C# 10 和 .NET 6入门与跨平台开发(第6版)
C# 11和.NET 7入门与跨平台开发(第7版)
(美) 马克·J. 普莱斯(Mark J. Price) 著 叶伟民 译
C# 10 和 .NET 6入门与跨平台开发(第6版)
C#函数式编程(第2版)
[美]恩里科·博南诺(Enrico Buonanno) 著;张骏温 译
C# 10 和 .NET 6入门与跨平台开发(第6版)
C#.NET项目开发案例教程(微课视频版)
陈建国;王莹;张锦;王如龙
C# 10 和 .NET 6入门与跨平台开发(第6版)
C#程序设计
崔舒宁
您可能感兴趣 / 更多
C# 10 和 .NET 6入门与跨平台开发(第6版)
争吵的恋人:我们为什么相爱,又为什么争吵
[美]约翰·金,[美]瓦妮莎·贝内特
C# 10 和 .NET 6入门与跨平台开发(第6版)
蒙特卡洛的密码锁(数学大师的逻辑课) 文教科普读物 [美]雷蒙德·m.斯穆里安(raymondm.smullyan)
[美]雷蒙德·m.斯穆里安(raymondm.smullyan)
C# 10 和 .NET 6入门与跨平台开发(第6版)
全新正版图书 新任管理者快速成长蕾切尔·帕切科浙江教育出版社9787572277214
[美]蕾切尔· 帕切科
C# 10 和 .NET 6入门与跨平台开发(第6版)
《生命大设计.重构》(关于“生命创造现实”这一惊人事实,独特且完整的科学探索与哲学诠释)
[美]鲍勃·伯曼 著;杨泓 译;[美]罗伯特·兰札;马泰·帕夫希奇(斯洛文尼亚)
C# 10 和 .NET 6入门与跨平台开发(第6版)
杰出投资者的底层认知:成功投资与明智创富的10个茅塞顿开之问(《聪明的投资者》新时代精华版)
[美]J.戴维·斯坦恩(J.David Stein) 著;刘寅龙 译;庞鑫
C# 10 和 .NET 6入门与跨平台开发(第6版)
浴缸里的海洋
[美]塞思·菲什曼
C# 10 和 .NET 6入门与跨平台开发(第6版)
新视界文库-生命故事:生物学上的伟大发现
[美]肖恩·B.卡罗尔
C# 10 和 .NET 6入门与跨平台开发(第6版)
洛丽塔原型:小说《洛丽塔》背后的萨莉?霍纳绑架案
[美]萨拉·魏恩曼 著;真故图书 出品
C# 10 和 .NET 6入门与跨平台开发(第6版)
托尔斯泰
[美]莉莎·克纳普(Liza Knapp)
C# 10 和 .NET 6入门与跨平台开发(第6版)
奇迹之门 《纽约时报》畅销书作家写给孩子的一封“成长家书”。让父母的爱与肯定,成为孩子探索世界的底气。拥抱成长的不确定性,打开通向无限可能的“奇迹之门”。
[美]艾莉森·麦基/文 (美) 柳泰恩 图
C# 10 和 .NET 6入门与跨平台开发(第6版)
全球通史(全六册)(另一个角度的“全球通史”,不一样的视野与新知。以地理为骨,历史为肉,一部超级丰满的世界通史。)
[美]塞缪尔·古德里奇 译者:冷惠玲、冯佳娜、王小忠、孙丽霞、李江艳
C# 10 和 .NET 6入门与跨平台开发(第6版)
《星际争霸》动画影像艺术
[美]罗伯特·布鲁克斯