描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787302617648
基于Visual Studio 2022的Visual C#基础实践指南
扩展专业能力,通过自主学习,完全掌握Visual C#编程基础知识。本书基于Visual Studio 2022,提供指导方针、练习和代码来帮助软件开发人员构建几乎可以在任何地方运行的高响应性、高伸缩性的云端应用。
C#作为微软的旗舰编程语言,是编写高效应用程序的语言,深受程序员喜爱。《Visual C#从入门到精通(第10版)》沿袭深受读者欢迎的Step by Step风格,围绕语言的基础知识和新功能进行了全面的介绍,同时借助于练习来引导读者逐步构建云端应用等。全书共27章,结构清晰,叙述清楚。所有练习均在Visual Studio 2022简体中文版上进行过全面演练。无论是刚开始接触面向对象编程的新手,还是打算迁移到C#的C、C 或Java程序员,都可以从本书中汲取到新的知识,迅速掌握C#编程技术。
简明目录
第Ⅰ部分 Visual C#和Visual Studio 2022概述
第1章 欢迎进入C#编程世界 3
第2章 使用变量、操作符和表达式 37
第3章 方法和作用域 61
第4章 使用判断语句 93
第5章 使用复合赋值和循环语句 115
第6章 管理错误和异常 131
第Ⅱ部分 理解C#对象模型
第7章 创建并管理类和对象 155
第8章 理解值和引用 177
第9章 使用枚举和结构创建值类型 201
第10章 使用数组 219
第11章 理解参数数组 243
第12章 使用继承 255
第13章 创建接口和定义抽象类 277
第14章 使用垃圾回收和资源管理 303
第Ⅲ部分 用C#定义可扩展类型
第15章 实现属性以访问字段 327
第16章 处理二进制数据和使用索引器 357
第17章 泛型概述 373
第18章 使用集合 403
第19章 枚举集合 427
第20章 分离应用程序逻辑并处理事件 441
第21章 使用查询表达式来查询内存中的数据 469
第22章 操作符重载 491
第Ⅳ部分 用C#构建UWP应用
第23章 使用任务提高吞吐量 511
第24章 通过异步操作提高响应速度 549
第25章 实现UWP应用的用户界面 587
第26章 在UWP应用中显示和搜索数据 627
第27章 在UWP应用中访问远程数据库 655
详细目录
第Ⅰ部分 Visual C#和Visual Studio 2022概述
第1章 欢迎进入C#编程世界 3
1.1 写个C#程序 3
1.2 开始在Visual Studio 2022环境中编程 8
1.3 用Visual Studio 2022写个程序 12
1.4 使用命名空间 17
1.5 命名空间和程序集 18
1.6 对代码进行注释 19
1.7 创建图形应用程序 19
1.7.1 探索通用Windows平台应用程序 28
1.7.2 向图形应用程序添加代码 31
小结 34
第1章快速参考 35
第2章 使用变量、操作符和表达式 37
2.1 理解语句 37
2.2 使用标识符 38
2.3 C#语言的关键字 38
2.4 使用变量 39
2.4.1 命名变量 39
2.4.2 声明变量 40
2.4.3 指定数值 40
2.5 使用基元数据类型 41
2.5.1 未赋值的局部变量 42
2.5.2 显示基元数据类型的值 42
2.6 使用算术操作符 47
2.6.1 操作符和类型 48
2.6.2 深入了解算术操作符 49
2.6.3 控制优先级 54
2.6.4 使用结合性对表达式进行求值 54
2.6.5 结合性和赋值操作符 55
2.7 变量递增和递减 56
2.8 声明隐式类型的局部变量 57
小结 58
第2章快速参考 58
第3章 方法和作用域 61
3.1 创建方法 61
3.1.1 声明方法 62
3.1.2 从方法返回数据 63
3.1.3 使用表达式主体方法 63
3.2 调用方法 65
3.2.1 方法的调用语法 65
3.2.2 从方法返回多个值 67
3.3 使用作用域 69
3.3.1 定义局部作用域 69
3.3.2 定义类作用域 70
3.3.3 重载方法 71
3.3.4 编写方法 71
3.4 使用Visual Studio调试器来调试方法 75
3.4.1 重构代码 80
3.4.2 嵌套方法 80
3.5 使用可选参数和具名参数 83
3.5.1 定义可选参数 84
3.5.2 传递具名参数 85
3.5.3 消除可选参数和具名参数的歧义 85
小结 90
第3章快速参考 90
第4章 使用判断语句 93
4.1 声明布尔变量 93
4.2 使用布尔操作符 94
4.2.1 理解相等和关系操作符 94
4.2.2 理解条件逻辑操作符 95
4.2.3 短路求值 95
4.2.4 操作符的优先级和结合性总结 96
4.2.5 模式匹配 97
4.3 使用if语句做判断 97
4.3.1 理解if语句的语法 97
4.3.2 使用代码块分组语句 99
4.3.3 嵌套if语句 100
4.4 使用switch语句做判断 105
4.4.1 理解switch语句的语法 105
4.4.2 遵守switch语句的规则 106
4.5 为switch表达式使用模式匹配 110
小结 112
第4章快速参考 112
第5章 使用复合赋值和循环语句 115
5.1 使用复合赋值操作符 115
5.2 编写while语句 116
5.3 编写for语句 120
5.4 编写do语句 122
小结 129
第5章快速参考 129
第6章 管理错误和异常 131
6.1 尝试执行代码并捕捉异常 132
6.1.1 未处理的异常 133
6.1.2 使用多个catch处理程序 134
6.1.3 捕捉多个异常 135
6.1.4 筛选异常 136
6.1.5 传播异常 139
6.2 使用checked和unchecked进行整数运算 141
6.2.1 编写checked语句 142
6.2.2 编写checked表达式 142
6.3 抛出异常 145
6.4 使用finally块 150
小结 151
第6章快速参考 151
第Ⅱ部分 理解C#对象模型
第7章 创建并管理类和对象 155
7.1 理解分类 155
7.2 封装的目的 156
7.3 定义并使用类 156
7.4 控制可访问性 158
7.5 使用构造器 159
7.5.1 重载构造器 160
7.5.2 解构对象 167
7.6 理解静态方法和数据 168
7.6.1 创建共享字段 169
7.6.2 使用const关键字创建静态字段 170
7.6.3 理解静态类 170
7.6.4 静态using语句 170
7.7 匿名类 173
小结 174
第7章快速参考 174
第8章 理解值和引用 177
8.1 复制值类型的变量和类 177
8.2 理解null值和可空类型 182
8.2.1 空条件操作符 184
8.2.2 使用可空类型 185
8.2.3 理解可空类型的属性 185
8.3 使用ref参数和out参数 186
8.3.1 创建ref参数 187
8.3.2 创建out参数 188
8.4 计算机内存的组织方式 190
8.4.1 使用栈和堆 191
8.4.2 System.Object类 192
8.4.3 装箱 192
8.4.4 拆箱 193
8.5 数据的安全转型 194
8.5.1 is操作符 195
8.5.2 as操作符 195
8.5.3 复习switch语句 196
小结 198
第8章快速参考 199
第9章 使用枚举和结构创建值类型 201
9.1 使用枚举 201
9.1.1 声明枚举 201
9.1.2 使用枚举 202
9.1.3 选择枚举字面值 203
9.1.4 选择枚举的基础类型 203
9.2 使用结构 205
9.2.1 声明结构 207
9.2.2 理解结构和类的区别 208
9.2.3 声明结构变量 209
9.2.4 理解结构的初始化 210
9.2.5 复制结构变量 214
小结 218
第9章快速参考 218
第10章 使用数组 219
10.1 声明数组变量 220
10.2 创建数组实例 220
10.3 填充和使用数组 221
10.3.1 创建隐式类型的数组 222
10.3.2 访问单独的数组元素 223
10.3.3 访问数组元素序列 223
10.3.4 遍历数组 224
10.3.5 数组作为方法的参数和返回值 225
10.4 复制数组 226
10.5 使用多维数组 228
10.6 访问包含值类型的数组 238
小结 241
第10章快速参考 241
第11章 理解参数数组 243
11.1 回顾重载 243
11.2 使用数组参数 244
11.2.1 声明参数数组 245
11.2.2 使用params object[] 247
11.2.3 使用参数数组 248
11.3 比较参数数组和可选参数 251
小结 253
第11章快速参考 253
第12章 使用继承 255
12.1 什么是继承 255
12.2 使用继承 256
12.2.1 复习System.Object类 258
12.2.2 调用基类构造器 258
12.2.3 类的赋值 259
12.2.4 声明新方法 260
12.2.5 声明虚方法 262
12.2.6 声明重写方法 263
12.2.7 理解受保护的访问 265
12.3 创建扩展方法 271
小结 274
第12章快速参考 274
第13章 创建接口和定义抽象类 277
13.1 理解接口 277
13.1.1 定义接口 278
13.1.2 实现接口 279
13.1.3 通过接口引用类 280
13.1.4 使用多个接口 281
13.1.5 显式实现接口 281
13.1.6 用接口进行版本控制 283
13.1.7 接口的限制 284
13.1.8 定义和使用接口 285
13.2 抽象类 293
13.3 密封类 295
13.3.1 密封方法 295
13.3.2 实现并使用抽象类 296
小结 301
第13章快速参考 302
第14章 使用垃圾回收和资源管理 303
14.1 对象生存期 303
14.1.1 编写终结器 304
14.1.2 为什么要使用垃圾回收器 306
14.1.3 垃圾回收器的工作原理 307
14.1.4 慎用终结器 308
14.2 资源管理 308
14.2.1 资源清理方法 309
14.2.2 异常安全的资源清理 309
14.2.3 using语句和IDisposable 接口 310
14.2.4 从终结器中调用Dispose方法 312
14.3 实现异常安全的资源清理 313
14.4 处理异步清理 322
小结 323
第14章快速参考 323
第Ⅲ部分 用C#定义可扩展类型
第15章 实现属性以访问字段 327
15.1 使用方法实现封装 327
15.2 什么是属性 329
15.2.1 使用属性 331
15.2.2 只读属性 332
15.2.3 只写属性 332
15.2.4 属性的可访问性 333
15.3 理解属性的局限性 334
15.4 在接口中声明属性 335
15.4.1 用属性替代方法 337
15.4.2 用属性进行模式匹配 340
15.5 生成自动属性 341
15.6 用属性初始化对象 343
15.7 用带属性的“记录”来实现轻量级结构 348
小结 352
第15章快速参考 353
第16章 处理二进制数据和使用索引器 357
16.1 什么是索引器 357
16.1.1 存储二进制值 358
16.1.2 显示二进制值 358
16.1.3 操纵二进制值 359
16.1.4 用索引器解决相同问题 360
16.2 理解索引器的访问器 362
16.3 对比索引器和数组 363
16.3 接口中的索引器 365
16.4 在Windows应用程序中使用索引器 366
小结 371
第16章快速参考 371
第17章 泛型概述 373
17.1 object的问题 373
17.2 泛型解决方案 377
17.2.1 对比泛型类和常规类 379
17.2.2 泛型和约束 379
17.3 创建泛型类 379
17.3.1 二叉树理论 379
17.3.2 使用泛型构造二叉树类 382
17.4 创建泛型方法 391
17.5 可变性和泛型接口 396
17.5.1 协变接口 397
17.5.2 逆变接口 399
小结 401
第17章快速参考 401
第18章 使用集合 403
18.1 什么是集合类 403
18.1.1 List集合类 404
18.1.2 LinkedList集合类 406
18.1.3 Queue集合类 408
18.1.4 PriorityQueue集合类 409
18.1.5 Stack集合类 410
18.1.6 Dictionary 集合类 411
18.1.7 SortedList 集合类 412
18.1.8 HashSet集合类 413
18.2 使用集合初始化器 415
18.3 Find方法、谓词和Lambda 表达式 416
18.3.1 Lambda表达式的形式 417
18.3.2 Lambda表达式和匿名 方法 418
18.4 比较数组和集合 419
小结 423
第18章快速参考 424
第19章 枚举集合 427
19.1 枚举集合中的元素 427
19.1.1 手动实现枚举器 428
19.1.2 实现IEnumerable接口 433
19.2 用迭代器实现枚举器 435
19.2.1 一个简单的迭代器 435
19.2.2 使用迭代器为Tree 类定义枚举器 437
小结 439
第19章快速参考 439
第20章 分离应用程序逻辑并处理事件 441
20.1 理解委托 442
20.2 .NET类库的委托例子 443
20.2.1 自动化工厂的例子 444
20.2.2 声明和使用委托 447
20.3 Lambda表达式和委托 455
20.4 启用事件通知 456
20.4.1 声明事件 456
20.4.2 订阅事件 457
20.4.3 取消订阅事件 458
20.4.4 引发事件 458
20.5 理解用户界面事件 459
20.6 使用事件 460
小结 466
第20章快速参考 466
第21章 使用查询表达式来查询内存中的数据 469
21.1 什么是LINQ 469
21.2 在C#应用程序中使用LINQ 470
21.2.1 选择数据 472
21.2.2 筛选数据 474
21.2.3 排序、分组和聚合数据 474
21.2.4 联接数据 476
21.2.5 使用查询操作符 478
21.2.6 查询Tree对象中的数据 480
21.3 LINQ和推迟求值 485
小结 489
第21章快速参考 489
第22章 操作符重载 491
22.1 理解操作符 491
22.1.1 操作符的限制 492
22.1.2 重载的操作符 492
22.1.3 创建对称操作符 493
22.1.4 理解复合赋值 495
22.2 声明递增和递减操作符 495
22.3 比较结构和类中的操作符 496
22.4 定义成对的操作符 497
22.5 实现操作符 497
22.6 重载相等操作符 500
22.7 理解转换操作符 503
22.7.1 提供内建转换 503
22.7.2 实现用户自定义的转换操作符 504
22.7.3 再论创建对称操作符 505
22.7.4 编码转换操作符 506
小结 508
第22章快速参考 508
第Ⅳ部分 用C#构建UWP应用
第23章 使用任务提高吞吐量 511
23.1 使用并行处理执行多任务处理 511
23.2 多核处理器的崛起 512
23.3 用Microsoft .NET实现多任务处理 513
23.3.1 任务、线程和线程池 513
23.3.2 创建、运行和控制任务 515
23.3.3 使用Task类实现并行 处理 517
23.3.4 使用Parallel类对任务进行抽象 525
23.3.5 什么时候使用 Parallel类 529
23.4 取消任务和处理异常 531
23.4.1 协作式取消的原理 532
23.4.2 使用AggregateException类处理任务的异常 542
23.4.3 为Canceled和Faulted任务使用延续 543
小结 544
第23章快速参考 545
第24章 通过异步操作提高响应速度 549
24.1 实现异步方法 550
24.1.1 定义异步方法:问题 550
24.1.2 定义异步方法:解决 方案 553
24.1.3 定义返回值的异步方法 557
24.1.4 异步方法注意事项 558
24.1.5 异步方法和Windows Runtime API 560
24.1.6 任务、内存分配和效率 561
24.2 用PLINQ进行并行数据访问 564
24.2.1 用PLINQ增强遍历集合时的性能 564
24.2.2 取消PLINQ查询 568
24.3 同步对数据的并发访问 569
24.3.1 锁定数据 571
24.3.2 用于协调任务的同步 基元 572
24.3.3 取消同步 574
24.3.4 并发集合类 575
24.3.5 使用并发集合和锁实现线程安全的数据访问 575
小结 584
第24章快速参考 585
第25章 实现UWP应用的用户界面 587
25.1 UWP应用的特点 588
25.2 使用“空白应用”模板构建UWP应用 590
25.3 实现可伸缩用户界面 593
25.3.1 用Grid控件实现表格 布局 602
25.3.2 用可视状态管理器调整 布局 610
25.4 向UI应用样式 616
小结 626
第25章快速参考 626
第26章 在UWP应用中显示和搜索 数据 627
26.1 实现Model-View-ViewModel模式 627
26.2 通过数据绑定显示数据 628
26.2.1 通过数据绑定修改数据 633
26.2.2 为ComboBox控件使用数据 绑定 638
26.3 创建ViewModel 640
26.4 向ViewModel添加命令 643
小结 653
第26章快速参考 653
第27章 在UWP应用中访问远程数据库 655
27.1 从数据库获取数据 655
27.1.1 创建实体模型 664
27.1.2 创建并使用REST Web 服务 669
27.2 更新UWP应用来使用Web 服务 683
27.3 在Customers应用中查找数据 693
27.4 通过REST Web服务插入、更新和删除数据 699
小结 700
第27章快速参考 701
过去20年,很多事情都发生了变化。为了好玩,我有时会拿起2001年出版的第1版,并感慨自己当年的天真。当然,C#当时达到了完美编程语言的。C#和.NET Framework在开发界引起了轰动,其反响一直持续到今天。现在,两者非但没有泯然于众,反而在软件开发界的地位变得越来越重要。C#和.NET并不像2001年那些反对者初所叫嚣的那样是一种单一的平台,而是逐渐证明自己是一种完整的多平台解决方案,无论你是为Windows、macOS、Linux还是Android构建应用程序。此外,C#和.NET已经证明自己是许多基于云的系统的运行库。没有它们,Azure怎么可能这么火?
过去,大多数常用编程语言只是时不时地更新一下,往往相隔数年。以Fortran为例,会看到名为Fortran 66、Fortran 77、Fortran 90、Fortran 95、Fortran 2003、Fortran 2008和Fortran 2018的标准。这就是过去55年中的7次更新。虽然这种相对缓慢的变化周期有利于稳定性,但也可能导致停滞不前。问题在于,开发人员必须解决的问题的性质变化很快,他们所依赖的工具好能跟上步伐,这样才能开发出有效的解决方案。微软.NET提供的正是这样一个不断发展的框架,C#语言也会相应地更新,从而好地利用平台的优势。所以,和Fortran相比,C#语言自首次发布以来经历了快速迭代,仅过去5年内就有6个版本问世,2022年甚至会再次发布C#语言的一个新版本。C#语言仍然支持20多年前写的代码,但通过不断对语言进行补充和增强,现在能用更优雅的代码和更简洁的构造来创建解决方案。出于这个原因,本书也要定期进行更新,现在已经是第10版了!
C#语言的进化历程简要概述如下。
C# 1.0于2001年亮相。
几年后随着C# 2.0和Visual Studio 2005的问世,该语言新增了几个重要特性,包括泛型、迭代器和匿名方法等。
随Visual Studio 2008发布的C# 3.0新增了更多特性,包括扩展方法、Lambda表达式以及语言集成查询(Language Integrated Query,LINQ)。
2010年发布的C# 4.0继续增强,改善了与其他语言和技术的互操作性。新增特性包括具名参数和可选参数,另外还有dynamic类型(指示语言的“运行时”对对象进行晚期绑定)。在随C# 4.0发布的.NET Framework中,重要的增补就是“任务并行库”(Task Parallel Library,TPL)。可用TPL构建具有良好伸缩性的应用程序,从而快速和简单地发挥多核处理器的能力。
C# 5.0通过async方法修饰符和await操作符提供了对异步任务的原生支持。
C# 6.0是一次增量式升级,新添了许多有利于简化开发的特性,包括字符串插值(再也不需要String.Format了)、改进的属性实现方式以及表达式主体方法等。
C# 7.0~ C# 7.3进一步增强,提高了生产力并移除了C#一些不合时宜的设计。例如,现在属性访问器方法可作为表达式主体成员实现,方法支持以元组形式返回多个值,简化了out参数的用法,switch语句开始支持模式和类型匹配。还有其他许多小的调整,解决了开发人员的众多关切,比如允许写异步Main方法。
C# 8.0、C# 9.0和C# 10.0延续上一版的做法,继续对语言进行增强以提高可读性和帮助开发人员提高生产力。一些主要的新增特性包括record类型(用来构建不可变的引用类型)、扩展了模式匹配(现在能在整个语言中使用这个特性,不只局限于在switch语句中使用)、语句(现在能将C#作为脚本语言使用,不必总是写一个Main方法)、默认接口方法、静态局部函数、异步可清理(asynchronous disposable)类型以及其他许多特性,所有这些都会在本书中讲到。
虽然微软的Windows是运行C#应用程序重要的平台,但现在也可通过.NET运行时在其他操作系统(包括Linux)上运行用C#写的代码。这样一来,程序更容易在多种环境中运行。另外,Windows支持高度交互性的应用程序,它们可以进行数据共享和协作,还可以连接云服务。Windows引人注目的是对UWP(Universal Windows Platform,通用Windows平台)应用的支持。这种应用设计在任何Windows 10或Windows 11设备上运行,无论这些设备是全功能的桌面系统、笔记本和平板,还是资源有限的智能手机和物联网(IoT)设备。熟悉C#语言的核心特性后,下一步是掌握如何开发能在所有这些平台上运行的应用。
云已成为许多系统架构中的一个重要元素——从大型企业应用,到在便携式设备上运行的移动应用,所以,我决定在本书后一章重点讨论这方面的开发。
Visual Studio开发环境使这些特性变得很容易使用,大量新向导和增强显著提升了开发人员的生产力。这本书的写作过程中,我感受到了许多乐趣,希望你的阅读也如此!
本书适合哪些读者
本书假定读者要使用Visual Studio和.NET 6(以及更高版本)学习基础的C#编程知识。学完本书后,会对C#语言有一个全面和透彻的理解,会用它来开发响应灵敏、易于伸缩且能在Windows操作系统上运行的应用程序。
本书不适合哪些读者
本书面向刚开始接触C#语言的开发人员,所以重点会侧重于C#语言本身。本书不涉及企业级和全局Windows应用程序开发技术,比如ADO.NET、ASP.NET、Azure或Windows Presentation Foundation(WPF)。要了解这些知识,可参考微软出版社出版的其他书籍。
导读
本书可以帮助读者掌握多种基本开发技能。无论是刚开始学习编程,还是从另一种语言(C、C 、Java或Visual Basic)转向C#,本书都能提供帮助。参考下表,找到合适自己的起点即可。
读者类型 步骤
面向对象编程的新手 1. 按照稍后“示例代码”一节的步骤安装练习文件
2. 顺序阅读第1章~第22章
3. 有一定经验后,如有兴趣,继续完成第23章~第27章的学习
熟悉C语言等过程式编程语言,但新涉足C# 1. 按照稍后“示例代码”一节的步骤安装练习文件
2. 略读前5章来获得对C#语言和Visual Studio 2022的大致印象,然后重点阅读第6章~第22章
3. 有一定经验后,如有兴趣,继续完成第23章~第27章的学习
从C 或Java等面向对象语言迁移到C# 1. 按照稍后“示例代码”一节的步骤安装练习文件
2. 略读前7章来获得对C#和Visual Studio 2022的大致印象,然后重点阅读第8章~第22章
3. 阅读第23章~第27章了解如何构建UWP应用程序
从Visual Basic语言迁移到C# 1. 按照稍后“示例代码”一节的步骤安装练习文件
2. 顺序阅读第1章~第22章
3. 阅读第23章~第27章了解如何构建UWP应用程序
4. 阅读每章末尾的“快速参考”小节,了解C#语言和Visual Studio 2022特有的信息
做完所有练习后再将本书用作参考 1. 按目录查主题
2. 阅读章末“快速参考”,查看语法和技术要点归纳
本书大多数章节都通过实例方便读者巩固刚学到的知识。无论感兴趣的是哪个主题,都注意先下载并安装好示例代码。
本书约定和特色
本书通过一些约定来增强内容的可读性,以便于读者理解。
每个练习都用编号的操作步骤来完成。
“注意”等特色段落提供了成功完成一个步骤需要了解的额外信息或替代方案。
要求读者输入的文本加粗显示。
两个按键名称之间的加号( )意味着必须同时按下这两个键。例如,按Alt Tab意味着按住Alt键,再按Tab键。
描述菜单操作时,采用“文件”|“打开”的形式,意思是从“文件”菜单中选择“打开”命令。
系统需求
为了完成本书的练习,需要准备以下硬件和软件:
Windows 10/Windows 11家庭、专业、教育或企业版
Visual Studio 2022社区、专业或企业版的版本。安装时起码选择以下“工作负荷”:
– 通用Windows平台开发
– .NET桌面开发
– ASP.NET和Web开发
– Azure开发
– 数据存储和处理
– .NET Core跨平台开发
注意 本书所有练习和示例代码都用Visual Studio Community 2022开发和测试。它们在Visual Studio Professional 2022和Visual Studio Enterprise 2022中都应该能正常工作,无须进行任何修改。
1.8 GHz或更快的64位处理器(推荐四核或以上)。不支持ARM处理器
4 GB或更多RAM
硬盘空间:850 MB~210 GB可用空间,具体取决于所安装的特性;典型安装需要20~50 GB可用空间
显卡支持720p分辨率(1280 ? 720);Visual Studio在WXGA分辨率(1366 ? 768)或更高分辨率下发挥得好
下载软件和示例代码需要网络连接
取决于Windows配置,可能需要以管理员身份安装和配置Visual Studio。
电脑上要启用开发人员模式以创建和运行UWP应用。详情参考“启用设备进行开发”(https://msdn.microsoft.com/library/windows/apps/dn706236.aspx)。
示例代码
本书大多数章节都包含互动练习供练手。从以下网址下载示例代码(包括练习完成前后的两种格式):
https://MicrosoftPressStore.com/VisualCsharp10e/downloads
https://bookzhou.com
安装示例代码很简单,在“文档”文件夹中新建Microsoft Press文件夹,再在其中新建VCSBS子文件夹,后打开下载的zip文件,将其中的chapter 1~chapter 27文件夹解压到该文件夹中。
准备好的示例代码目录结构如下图所示。
使用示例代码
本书每一章都解释了在什么时候以及如何使用练习文件。需要练习文件时,书中会给出相应的指示,帮助你打开正确的文件。
重要提示 许多例子都依赖示例代码没有包含的NuGet包。这些包在首次生成项目时自动下载。如首次打开一个项目且不生成,Visual Studio可能报告大量引用无法解析的错误。生成一次即可完成引用的解析,错误将消失。
下表总结了本书用到的所有Visual Studio项目和解决方案,它们以文件夹的形式进行分组以便查找。练习通常会为同一个项目提供初始文件和完成后的版本。已完成的项目存储在带有- Complete后缀的文件夹中。
项目/解决方案 说明
第1章
HelloWorld 该项目帮你上手,指导你用文本编辑器手动创建一个简单程序,并显示基于文本的欢迎辞
HelloWorld2 演示如何使用.NET命令行界面(CLI)来自动生成并运行一个简单的C#应用程序
TestHello 该Visual Studio项目显示一条欢迎辞
HelloUWP 该项目打开一个窗口,提示用户输入自己的姓名,并显示相应的欢迎辞
第2章
PrimitiveDataTypes 演示如何使用基元类型声明变量,如何向变量赋值,如何在窗口中显示值
MathsOperators 演示算术操作符( 、–、*、/、%)
第3章
Methods 改进上个项目的代码,体会如何使用方法来建立代码的结构
DailyRate 指导你写自己的方法,执行方法,使用Visual Studio调试器来单步执行方法
DailyRate Using Optional Parameters 演示如何让方法获取可选参数,如何使用具名参数来调用方法
Factorial 演示计算阶乘的递归方法
第4章
Selection 演示如何用嵌套if语句实现复杂逻辑,例如比较两个日期的相等性
SwitchStatement 这个简单的程序用一个switch语句将字符转换成相应的XML形式
SwitchStatement using Pattern Matching SwitchStatement项目的修正版,使用模式匹配来简化switch语句中的逻辑
第5章
WhileStatement 用while语句逐行读取源文件,在窗体上的文本框中显示每一行
DoStatement 使用do语句将十进制数转换成八进制数
第6章
MathsOperators 改进第2章的MathsOperators项目,试验会造成程序执行失败的各种未处理异常。然后用try和catch关键字使应用程序更健壮,防止因为错误输入或操作而失败
第7章
Classes 演示如何定义自己的类,为它添加公共构造器、方法和私有字段;还演示如何用new关键字创建类的实例,如何定义静态方法和字段
第8章
Parameters 演示值类型和引用类型的参数的区别,还演示如何使用ref和out关键字
第9章
StructsAndEnums 定义结构来表示日期
第10章
Cards 使用数组来建模纸牌游戏中的一手牌
第11章
ParamsArrays 演示如何使用params关键字使方法能接受任意数量的实参
第12章
Vehicles 用继承创建交通工具类的一个简单层次结构,还演示如何定义虚方法
ExtensionMethod 演示如何为int类型创建扩展方法,允许将整数从十进制转换成其他进制
第13章
Drawing 实现图形绘图包的一部分。用接口定义要由几何图形对象公开并实现的方法
第14章
GarbageCollectionDemo 演示如何使用Dispose模式实现异常安全的资源清理
第15章
Drawing Using Properties 扩展第13章的Drawing项目,用属性封装类的数据
AutomaticProperties 演示如何为类创建自动属性,如何用它们初始化类的实例
Student enrollment 演示如何使用record类型来建模结构化的不可变类型
第16章
Indexers 该项目使用了两个索引器,一个根据姓名查电话号码,另一个根据电话号码查姓名
第17章
BinaryTree 演示如何使用泛型生成类型安全的结构,可包含任何类型的元素
BuildTree 演示如何使用泛型实现类型安全的方法,可获取任何类型的参数
第18章
Cards 升级第10章的代码,演示如何用集合建模一手牌
第19章
BinaryTree 演示如何实现泛型IEnumerator接口,为泛型Tree类创建枚举器
IteratorBinaryTree 用迭代器为泛型Tree类生成枚举器
第20章
Delegates 演示如何通过委托调用方法,将方法的逻辑和调用方法的应用程序分开。然后对项目进行扩展,演示如何用事件提醒对象发生了某事,以及如何捕捉事件并执行必要的处理
第21章
QueryBinaryTree 演示如何通过LINQ查询从二叉树对象获取数据
第22章
ComplexNumbers 定义新类型来建模复数,并为这种类型实现常用的操作符
第23章
GraphDemo 生成并在UWP窗体上显示复杂图表。用单线程执行计算
Parallel GraphDemo 使用Parallel类对创建和管理任务的过程进行抽象
GraphDemo With Cancellation 中途得体地取消任务
ParallelLoop 演示何时不该使用Parallel类创建和运行任务
第24章
GraphDemo 修改第23章的同名项目,使用async关键字和await操作符来异步计算图表数据
PLINQ 使用并行任务,用PLINQ查询数据
CalculatePI 使用统计学采样计算PI的近似值。使用了并行任务
ParallelTest 演示并行线程不受控制地访问共享数据的危险性
第25章
Customers 实现能自动适应不同屏幕分辨率和设备大小的用户界面。用户界面使用XAML样式更改字体和背景图片
第26章
DataBinding 修改上一章的Customers项目,使用数据绑定在UI中显示从数据源获取的客户资料;还演示了如何实现INotifyPropertyChanged接口,以允许用户界面更新客户资料,并将改动发送回数据源
ViewModel 这个版本的Customers项目通过实现Model-View-ViewModel模式,将UI同数据源访问逻辑分开
第27章
Web Service 该解决方案包含一个Web应用程序来提供REST Web服务,Customers应用程序用它获取和修改一个SQL Server数据库中的客户数据。Web服务使用实体框架来访问数据库。数据库和Web服务在Azure上运行
Customers with insert and update features 该解决方案更新了Customers项目,使用REST网络服务来创建新客户和修改现有客户的资料
评论
还没有评论。