本书是一本C#编程方面的优秀教材。在第五版的基础上,全书根据最新的C# 6规范进行了更新。除了讲解面向对象编程的类与对象、方法、控制语句、数组、继承、多态、异常处理、GUI、字符串和字符、文件和流、搜索与排序、泛型、集合、数据库等基本概念,还重点介绍了C# 6中新包含的功能,比如字符串插值、索引初始值设定项、null条件运算符等,并且专门讲解了函数式编程的相关特点。
Paul Deitel和Harvey Deitel是全球畅销的编程语言教材和专业图书作家,“How to Program”系列是其最负盛名的一套计算机编程教材,已经销售近40年,并被翻译成中文在内的十几种语言。他们成立的Deitel & Associates公司是一家国际知名的企业培训和写作公司,专门进行计算机编程语言、对象技术、移动应用开发及Internet和Web软件技术方面的培训和写作,出版了一流的编程专业的大学教材、 专业图书以及LiveLessons视频课程。
张君施,北京工商大学数理系副教授,党支部书记。研究方向为概率论与数理统计、计算机语言,翻译过多部经典编程教材。
目 录
第1章 计算机、Internet和Visual C#简介 1
1.1 简介 1
1.2 在行业和研究领域的计算机与Internet 2
1.3 硬件和软件 3
1.4 数据层次 4
1.5 机器语言、汇编语言和高级语言 6
1.6 对象技术 7
1.7 Internet和WWW 9
1.8 C# 10
1.9 Microsoft的 .NET 13
1.10 Windows操作系统 14
1.11 Visual Studio集成开发环境 15
1.12 在Visual Studio Community中测试Painter程序 15
自测题 17
自测题答案 18
练习题 19
挑战题 20
与挑战题相关的资源 21
第2章 Visual Studio和可视化编程简介 22
2.1 简介 22
2.2 Visual Studio Community 2015 IDE概述 22
2.3 菜单栏和工具栏 26
2.4 Visual Studio IDE概览 27
2.5 Help菜单与上下文相关帮助 30
2.6 可视化编程:创建显示文本和图像的简单程序 30
2.7 小结 36
2.8 Web资源 36
摘要 37
术语表 38
自测题 38
自测题答案 39
练习题 39
第3章 C#编程入门 43
3.1 简介 44
3.2 一个简单程序:显示一行文本 44
3.3 在VIsual Studio中创建简单的程序 48
3.4 修改C#程序 52
3.5 字符串插值 54
3.6 另一个C#程序:整数相加 54
3.7 内存概念 57
3.8 算术运算 58
3.9 判断:相等性运算符与关系运算符 60
3.10 小结 64
摘要 64
术语表 66
自测题 67
自测题答案 68
练习题 70
挑战题 73
第4章 类、对象、方法和string简介 74
4.1 简介 75
4.2 测试一个Account类 75
4.3 包含实例变量、Set方法和Get方法的Account类 77
4.4 创建、编译和运行带两个类的Visual C#项目 81
4.5 包含Set方法和Get方法的软件工程 82
4.6 具有属性而不是Set方法和Get方法的Account类 82
4.7 自动实现的属性 85
4.8 Account类:用构造函数初始化对象 86
4.9 具有余额的Account类以及货币值处理 88
4.10 小结 92
摘要 93
术语表 96
自测题 97
自测题答案 97
练习题 98
挑战题 99
第5章 算法设计与控制语句(1) 100
5.1 简介 101
5.2 算法 101
5.3 伪代码 101
5.4 控制结构 102
5.5 if单选择语句 103
5.6 if…else双选择语句 104
5.7 Student类:嵌套if…else语句 107
5.8 while循环语句 109
5.9 形成算法:计数器控制循环 110
5.10 形成算法:标记控制循环 113
5.11 形成算法:嵌套控制语句 118
5.12 复合赋值运算符 121
5.13 增量运算符和减量运算符 122
5.14 简单类型 124
5.15 小结 124
摘要 125
术语表 127
自测题 128
自测题答案 129
练习题 130
挑战题 135
第6章 控制语句(2) 137
6.1 简介 138
6.2 计数器控制循环的实质 138
6.3 for循环语句 139
6.4 使用for语句的示例 141
6.5 程序:对偶数求和 142
6.6 程序:复利计算 143
6.7 do…while循环语句 145
6.8 switch多选择语句 146
6.9 AutoPolicy类案例分析:switch语句中的字符串 150
6.10 break和continue语句 152
6.11 逻辑运算符 153
6.12 结构化编程小结 158
6.13 小结 161
摘要 161
术语表 163
自测题 164
自测题答案 165
练习题 166
挑战题 169
第7章 方法:深入探究 170
7.1 简介 171
7.2 C#的代码包装 171
7.3 静态方法、静态变量和Math类 172
7.4 声明多参数方法 174
7.5 关于方法使用的说明 177
7.6 实参提升与强制转换 178
7.7 .NET Framework类库 179
7.8 案例分析:随机数生成方法 181
7.9 案例分析:机会游戏(引入枚举) 184
7.10 声明的作用域 188
7.11 方法调用栈与活动记录 190
7.12 方法重载 193
7.13 可选参数 194
7.14 命名参数 195
7.15 C# 6的表达式方法和属性 196
7.16 递归 196
7.17 值类型与引用类型 199
7.18 按值与按引用传递实参 199
7.19 小结 202
摘要 202
术语表 207
自测题 207
自测题答案 209
练习题 210
挑战题 215
第8章 数组以及异常处理简介 216
8.1 简介 217
8.2 数组 217
8.3 声明和创建数组 218
8.4 数组使用示例 219
8.5 用数组分析汇总结果以及异常处理 226
8.6 案例分析:模拟洗牌和发牌 228
8.7 将数组和数组元素传入方法 232
8.8 案例分析:GradeBook类用数组保存成绩 233
8.9 多维数组 237
8.10 案例分析:使用矩形数组的GradeBook类 241
8.11 变长实参表 245
8.12 使用命令行实参 246
8.13 (选修)按值与按引用传递数组 248
8.14 小结 251
摘要 251
术语表 254
自测题 254
自测题答案 255
练习题 256
拓展内容:建立自己的计算机 262
挑战题 267
第9章 LINQ和List集合简介 268
9.1 简介 268
9.2 用LINQ查询int数组 269
9.3 用LINQ查询Employee对象数组 272
9.4 集合 276
9.5 用LINQ查询泛型List集合 279
9.6 小结 281
9.7 Deitel的LINQ资源中心 282
摘要 282
术语表 284
自测题 284
自测题答案 284
练习题 284
第10章 类与对象:深入探究 286
10.1 简介 286
10.2 Time类案例分析以及抛出异常 287
10.3 控制对成员的访问 290
10.4 用this引用访问当前对象的成员 290
10.5 Time类案例分析:重载构造函数 292
10.6 默认构造函数和无参数构造函数 296
10.7 组合 297
10.8 垃圾回收与析构函数 299
10.9 静态类成员 300
10.10 只读实例变量 302
10.11 Class View与Object Browser 303
10.12 对象初始值设定项 304
10.13 运算符重载以及struct简介 305
10.14 Time类案例分析:扩展方法 308
10.15 小结 310
摘要 310
术语表 313
自测题 313
自测题答案 313
练习题 314
第11章 面向对象编程:继承 316
11.1 简介 316
11.2 基类与派生类 317
11.3 protected成员 318
11.4 基类与派生类的关系 319
11.5 派生类的构造函数 333
11.6 继承与软件工程 333
11.7 object类 334
11.8 小结 334
摘要 335
术语表 336
自测题 336
自测题答案 337
练习题 337
第12章 面向对象编程:多态与接口 339
12.1 简介 339
12.2 多态示例 340
12.3 演示多态行为 341
12.4 抽象类和抽象方法 343
12.5 案例分析:使用多态的工资系统 345
12.6 sealed方法和类 355
12.7 案例分析:创建和使用接口 356
12.8 小结 362
摘要 362
术语表 364
自测题 364
自测题答案 364
练习题 365
挑战题 366
第13章 异常处理:深入探究 367
13.1 简介 368
13.2 示例:除数为0不用异常处理 368
13.3 示例:处理DivideByZeroException和FormatException异常 370
13.4 .NET的Exception层次 374
13.5 finally语句块 375
13.6 using语句 380
13.7 Exception属性 381
13.8 用户定义异常类 384
13.9 检验空引用以及C# 6的“?.”运算符 387
13.10 异常过滤器与C# 6的when子句 389
13.11 小结 389
摘要 389
术语表 392
自测题 392
自测题答案 393
练习题 393
第14章 图形用户界面与Windows窗体(1) 395
14.1 简介 395
14.2 Windows窗体 396
14.3 事件处理 398
14.4 控件的属性和布局 403
14.5 标签、文本框和按钮 406
14.6 组框和面板 408
14.7 复选框和单选钮 410
14.8 图形框 416
14.9 工具提示 418
14.10 数字上下控件 419
14.11 鼠标事件处理 420
14.12 键事件处理 422
14.13 小结 424
摘要 424
术语表 428
自测题 429
自测题答案 429
练习题 430
挑战题 431
第15章 图形用户界面与Windows窗体(2) 433
15.1 简介 433
15.2 菜单 434
15.3 MonthCalendar控件 440
15.4 DateTimePicker控件 441
15.5 LinkLabel控件 443
15.6 ListBox控件 446
15.7 CheckedListBox控件 449
15.8 ComboBox控件 450
15.9 TreeView控件 453
15.10 ListView控件 457
15.11 TabControl控件 462
15.12 多文档界面(MDI)窗口 465
15.13 可视化继承 470
15.14 用户定义的控件 474
15.15 小结 476
摘要 476
术语表 479
自测题 480
自测题答案 480
练习题 481
第16章 字符串和字符:深入探究 483
16.1 简介 483
16.2 字符和字符串基础 484
16.3 string构造函数 484
16.4 string索引器、Length属性和CopyTo方法 485
16.5 字符串比较 487
16.6 查找字符串中的字符和子串 489
16.7 抽取字符串中的子串 491
16.8 拼接字符串 492
16.9 其他的string方法 492
16.10 StringBuilder类 493
16.11 StringBuilder类的Length属性、Capacity属性、EnsureCapacity方法 以及索引器 494
16.12 StringBuilder类的Append和AppendFormat方法 495
16.13 StringBuilder类的Insert、Remove和Replace方法 497
16.14 几个Char方法 499
16.15 (在线)正则表达式处理简介 501
16.16 小结 501
摘要 501
术语表 503
自测题 503
自测题答案 504
练习题 504
挑战题 504
第17章 文件和流 506
17.1 简介 506
17.2 文件和流 506
17.3 创建顺序访问文本文件 507
17.4 从顺序访问文本文件读取数据 513
17.5 案例分析:信用查询程序 516
17.6 序列化 520
17.7 用对象序列化创建顺序访问文件 521
17.8 从二进制文件读取和去序列化数据 524
17.9 File类和Directory类 525
17.10 小结 531
摘要 532
术语表 533
自测题 534
自测题答案 534
练习题 535
挑战题 536
第18章 搜索与排序 537
18.1 简介 537
18.2 搜索算法 538
18.3 排序算法 544
18.4 搜索算法和排序算法的效率 553
18.5 小结 554
摘要 554
术语表 556
自测题 556
自测题答案 556
练习题 556
第19章 定制链式数据结构 559
19.1 简介 559
19.2 简单类型struct以及装箱和拆箱 559
19.3 自引用类 560
19.4 链表 561
19.5 栈 569
19.6 队列 572
19.7 树 575
19.8 小结 584
摘要 584
术语表 586
自测题 586
自测题答案 587
练习题 587
拓展内容:建立自己的编译器 589
第20章 泛型 590
20.1 简介 590
20.2 泛型方法的由来 591
20.3 泛型方法的实现 592
20.4 类型约束 594
20.5 重载泛型方法 597
20.6 泛型类 597
20.7 小结 604
摘要 604
术语表 606
自测题 606
自测题答案 607
练习题 607
第21章 泛型集合以及LINQ/PLINQ函数式编程 609
21.1 简介 610
21.2 集合概述 611
21.3 Array类和枚举器 612
21.4 字典集合 615
21.5 泛型LinkedList集合 619
21.6 C# 6的null条件运算符“?[ ]” 623
21.7 C# 6的字典和集合初始值设定项 623
21.8 代理 624
21.9 lambda表达式 626
21.10 函数式编程简介 628
21.11 用LINQ方法调用语法和lambda表达式进行函数式编程 630
21.12 PLINQ:提升LINQ to Objects在多核处理器上的性能 634
21.13 (选修)泛型类型的协变和逆变 637
21.14 小结 638
摘要 639
术语表 643
自测题 644
自测题答案 645
练习题 645
函数式编程练习 646
第22章 数据库和LINQ 648
22.1 简介 648
22.2 关系数据库 649
22.3 Books数据库 650
22.4 LINQ to Entities与ADO.NET实体框架 653
22.5 用LINQ查询数据库 654
22.6 动态绑定查询结果 663
22.7 用LINQ取得来自多个表的数据 667
22.8 创建主/细视图程序 671
22.9 地址簿案例分析 673
22.10 工具和Web资源 678
22.11 小结 678
摘要 678
术语表 681
自测题 682
自测题答案 682
练习题 683
第23章 async、await与异步编程 684
23.1 简介 684
23.2 async和await概述 686
23.3 在GUI程序中执行异步任务 686
23.4 同步执行两个计算密集型任务 689
23.5 异步执行两个计算密集型任务 691
23.6 使用HttpClient类异步调用Flickr Web服务 694
23.7 显示异步任务的进度 700
23.8 小结 703
摘要 703
术语表 706
自测题 707
自测题答案 707
练习题 707
附录A 运算符优先级表 709
附录B 简单类型 711
附录C ASCII字符集 712
索引 715