内 容 简 介
C#作为微软的旗舰编程语言,深受程序员喜爱,是编写高效应用程序的首选语言。Visual C# 2013提供了大量新功能,本书围绕语言的基础知识和这些新功能全面介绍了如何利用Visual Studio 2013和.NET Framework 4.5编写C#应用程序。本书沿袭深受读者欢迎的Step by Step风格,通过合理的练习引导读者逐步构建在Windows 7和Windows 8.1上运行的应用程序、访问SQL Server数据库以及开发多线程应用等。
全书共27章,结构清晰,叙述清楚。所有练习均在Visual Studio 2013简体中文版上进行过全面演练。无论是刚开始接触面向对象编程的新手,还是打算迁移到C#的C、C++或Java程序员,都可以从本书汲取到新的知识。迅速掌握C#编程技术。
Authorized translation from the English language edition, entitled MICROSOFT VISUAL C# 2013 STEP BY STEP,1st Edition, 9780735681835 by SHARP,JOHN,published by Pearson Education, Inc, publishing as Microsoft Press, Copyright © 2014 by John Sharp.
All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording or by any information storage retrieval system, without permission from Pearson Education, Inc. CHINESE SIMPLIFIED language edition published by TSINGHUA UNIVERSITY PRESS LIMITED Copyright © 2015.
本书中文简体翻译版由Pearson Education授权给清华大学出版社在中国境内(不包括中国香港、澳门特别行政区)出版发行。
前 言
Microsoft Visual C#是一种功能强大、使用简单的语言,主要面向需要使用Microsoft .NET Framework来创建应用程序的开发者。它在C++和Microsoft Visual Basic的基础上去芜存菁,最终形成了一种更加清晰、更富有逻辑的语言。C# 1.0于2001年亮相。几年后随着C# 2.0和Visual Studio 2005的问世,语言新增了几个重要功能,包括泛型、迭代器和匿名方法等。随同Microsoft 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操作符提供了对异步任务的原生支持。
Windows 8是Microsoft近年来最具革命性的一款操作系统。新操作系统支持高度交互式的应用程序,它们能相互分享和协作,还能轻松连接云端服务。Visual Studio 2012开发环境使这些强大功能变得容易使用,大量新向导和增强显著提高了开发效率。Visual Studio 2012、Windows 8和C# 5.0三剑客提供了完善的平台和工具集来帮助你开发下一代的、功能强大的、直观的而且容易移植的应用程序。
在认真倾听了开发人员的反馈之后,Microsoft对UI进行了一些修订并发布了Windows 8.1,同时发布的还有Visual Studio 2013,其中包含Visual Studio 2012的累积更新并增添了一些新功能来进一步提升编程效率。虽然对Visual Studio的许多更新都不大,而且C#语言本身没有发生任何变化,但我们认为由于Windows 8.1在UI上发生了变化,所以有必要对本书进行一番修订,这正是这一版的来由。
注意 本书原版基于Visual Studio 2013 Technical Preview和Windows 8.1。中文版则针对Visual Studio 2013正式版和Windows 8.1 Update 1进行了全面修订。
本书面向的读者
本书假定你要使用Visual Studio 2013和.NET Framework 4.5.1学习基础的C#编程知识。学完本书后,会对C#有一个全面、透彻的理解,会用它开发反应灵敏的、可伸缩的、能在Windows操作系统上运行的应用程序。
C# 5.0应用程序在Windows 7、Windows 8和Windows 8.1上都能生成和运行。但Windows 7和Windows 8在UI上有很大区别。另外,Windows 8.1对UI模型进行了一些修改,造成使用新功能的应用程序在Windows 8上可能无法运行。因此,本书的设计是第I到第III部分的练习和示例在三种环境中都能运行,但第IV部分专注于Windows 8.1开发,强调了如何针对新平台开发交互式程序。
本书不面向的读者
本书面向刚开始用C#进行开发的人士,重点放在C#语言上面。本书不涉及企业级Windows应用程序的开发技术,比如ADO.NET、ASP.NET、Windows Communication Foundation或者Workflow Foundation。要了解这些方面的知识,可参考《从入门到精通》系列的其他书籍,包括《Microsoft ASP.NET 4从入门到精通》、《Microsoft ADO.NET 4从入门到精通》以及《Microsoft Windows Communication Foundation 4从入门到精通》。
本书的组织
本书分为以下四大部分。
第I部分“Visual C#和Visual Studio 2013概述”介绍了C#语言的核心语法,还演示了Visual Studio编程环境。
第II部分“理解C#对象模型”深入探讨如何用C#创建和管理新类型,以及如何管理这些类型引用的资源。
第III部分“用C#定义可扩展类型”全面讨论了如何利用C#语言元素来构建能在多个应用程序中重用的类型。
第IV部分“使用C#构建专业Windows 8.1应用程序”描述了Windows 8.1编程模型,以及如何用C#为新模型构建交互式应用程序。
注意虽然第IV部分面向Windows 8.1,但第23章和第24章的一些概念还是适用于Windows 7和Windows 8应用程序。
导读
本书帮助你掌握多个基本领域的开发技能。无论刚开始学习编程,还是从另一种语言(C、C++、Java或Visual Basic)转向C#,本书都能提供帮助。参考下表找到最佳起点。
读者类型
面向对象编程的新手
步骤
1. 按照“范例代码”一节的步骤安装练习文件
2. 顺序阅读第Ⅰ部分、第Ⅱ部分和第Ⅲ部分
3. 有了一定经验后,如果有兴趣,继续完成第Ⅳ部分的学习
续表
读者类型
熟悉C语言等过程编程语言,但新涉足C#
步骤
1. 按照“范例代码”一节的步骤安装练习文件
2. 略读前6章来获得对C#和Visual Studio 2013的大致印象,重点阅读第7~22章
3. 阅读第Ⅳ部分了解如何构建可伸缩的Windows 8.1应用程序
从面向对象语言C++或Java等迁移到C# 1. 按照“范例代码”一节的步骤安装练习文件
2. 略读前7章,获得对C#语言和Visual Studio 2013的大致印象,
重点阅读第8~22章
3. 阅读第Ⅳ部分了解如何构建可伸缩的Windows 8.1应用程序
从Visual Basic迁移到C# 1. 按照“范例代码”一节的步骤安装练习文件
2. 顺序阅读第Ⅰ部分、第Ⅱ部分和第Ⅲ部分
3. Windows 8.1应用程序开发请阅读第Ⅳ部分
4. 阅读每章末尾的“快速参考”小节,了解C#特有的构造做完所有练习后再将本书作为参考书使用的读者 1. 根据目录寻找特定主题的信息2. 阅读每章最后的“快速参考”,查看语法和技术归纳本书大多数章节都通过实际的例子方便读者巩固刚学到的知识。无论感兴趣的是哪个主题,都注意先下载并安装好范例代码。
本书的约定和特色本书通过一些约定来增强内容的可读性,以便于读者理解。
每个练习都用编号的操作步骤来完成。
“注意”等特色段落提供了成功完成一个步骤需要了解的额外信息或替代方案。
要求读者输入的文本加粗显示。
两个键名之间的加号(+)意味着必须同时按下这两个键。例如,“按Alt+Tab键”意味着按住Alt键不放,然后按Tab键。
描述菜单操作时,采取“文件”|“打开”的形式,意思是从“文件”菜单中选择“打开”命令。
系统需求
为了完成本书的练习,需准备以下硬件和软件:
Windows 7(x86或x64),Windows 8(x86或x64),Windows 8.1(x86或x64),Windows Server 2008 R2(x64),Windows Server 2012(x64)或者Windows Server 2012 R2(x64)
注意 Visual Studio 2013的Windows Store模板不可用于Windows 8,Windows 7,Windows Server 2012或Windows Server 2008 R2。要使用这些模板,或者要执行生成Windows Store应用的那些练习,操作系统必须是Windows 8.1或Windows Server 2012 R2。
Visual Studio 2013(除Visual Studio Express for Windows 8.1之外的任意版本)
注意 可以使用Visual Studio Express 2013 for Windows Desktop,但就只能执行本书的Windows 7版本的练习。不可用它执行第IV部分的练习。
1.6 GHz或更快的处理器(推荐2 GHz以上)32位操作系统至少1 GB RAM,64位至少2 GB RAM。在虚拟机中运行再加512 MB10 GB剩余硬盘空间支持DirectX 9的显示卡,1024 × 768或更高分辨率。Windows 8.1推荐1366 × 768或更高分辨率DVD-ROM驱动器(如果从DVD安装Visual Studio)下载软件和范例代码需要Internet连接此外,还需要以管理员身份安装和配置Visual tudio 2013。
范例代码
本书的配套网络资源包含练习时会用到的范例代码。使用这些范例代码,读者不再需要浪费时间创建和练习无关的文件。借助于这些练习文件和课程中描述的步骤,读者可以在实践中学习,这是迅速掌握并记住新的编程技能的一种简单而高效的方式。
按以下步骤在计算机上安装本书配套代码。
1.在Internet Explorer或其他浏览器的地址栏中输入transbot.ys168.com。
2.点击和本书对应的目录,并下载源代码文件压缩包。
3.将压缩包解压到计算机的“文档”文件夹 。如下图所示。
使用练习文件
本书每一章都解释了在什么时候以及如何使用必要的练习文件。需要使用练习文件的时候,书中会给出相应的指示,帮助你打开正确的文件。
如果想知道所有细节,可以参见下表,其中列出了本书要用到的所有Visual Studio 2013项目和解决方案,它们以文件夹的形式进行分组以便查找。练习通常会为同一个项目提供初始文件和完成之后的版本。有的练习提供Windows 7和Windows 8.1两个版本,操作步骤会针对不同操作系统给出相应的指示。已完成的项目存储在带有- Complete后缀的文件夹中。
注意 如果使用Windows 7、Windows 8、Windows Server 2012或Windows Server 2008 R2,按照Windows 7的步骤操作。如果使用Windows 8.1或Windows Server 2012 R2,按照Windows 8.1的步骤操作。
项目名称说明
第1章
TextHello 作为第一个项目,它指导你创建一个简单程序来显示欢迎文本
WPFHello 使用WPF技术在窗口中显示欢迎文本
第2章
PrimitiveDataTypes 演示如何使用基元类型来声明变量,如何向变量赋值,如何在窗口中显示值
MathsOperators 演示了算术操作符(+、–、*、/、%)
第3章
Methods 改进上个项目的代码,体会如何使用方法来建立代码的结构
DailyRate 指导你写自己的方法,执行方法,使用Visual Studio 2013调试器来单步执行方法
使用可选参数的DailyRate 演示如何让方法获取可选参数,如何使用具名参数来调用方法
第4章
Selection 演示如何用嵌套if语句实现复杂逻辑,例如比较两个日期的相等性
SwitchStatement 这个简单的程序使用一个switch语句将字符转换成相应的XML形式
第5章
WhileStatement 用while语句逐行读取源文件,在Windows窗体的文本框中显示每一行
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 Using Interfaces 实现图形绘图包的一部分。用接口定义要由几何图形对象公开并实现的方法
Drawing Using Abstract Classes 扩展了Drawing Using Interfaces项目,将几何图形对象的常用功能集成到抽象类中
第14章
GarbageCollectionDemo 演示如何使用Dispose模式实现异常安全的资源清理
第15章
Drawing Using Properties 扩展第13章的Drawing Using Abstract Classes项目,用属性将数据封装到类中
AutomaticProperties 演示如何为类创建自动属性,如何用它们初始化类的实例
第16章
Indexers 该项目使用了两个索引器,一个根据姓名查找电话号码,另一个根据电话号码查找姓名
第17章
BinaryTree 演示如何使用泛型生成类型安全的结构,可包含任何类型的元素
BuildTree 演示如何使用泛型实现类型安全的方法,可获取任何类型的参数
第18章
Cards 升级第10章的代码,演示如何用集合建模一手牌
续表
项目名称 说明
第19章
BinaryTree 演示如何实现泛型IEnumerator<T>接口,为泛型Tree类创建枚举器
IteratorBinaryTree 用迭代器为泛型Tree类生成枚举器
第20章
Delegates 演示如何通过委托调用方法,将方法的逻辑和调用方法的应用程序分开
Delegates With Event 演示如何用事件提醒对象发生了某事,如何捕捉事件并执行需要的处理
第21章
QueryBinaryTree 演示如何通过LINQ查询从二叉树对象获取数据
第22章
ComplexNumbers 定义新类型来建模复数,并为这种类型实现常用的操作符
第23章
GraphDemo 生成并在WPF窗体上显示复杂图表。使用单线程执行计算
GraphDemo With Tasks 创建多个任务,并行执行图表计算
Parallel GraphDemo 使用Parallel类对创建和管理任务的过程进行抽象
GraphDemo With Cancellation 中途得体地取消任务
ParallelLoop 演示何时不该使用Parallel类创建和运行任务
第24章
GraphDemo 修改第23章的同名项目,使用async关键字和await操作符异步计算图表数据
PLINQ 使用并行任务,用PLINQ查询数据
CalculatePI 使用统计学采样计算PI的近似值。使用了并行任务
第25章
Customers Without Scalable UI 使用默认Grid控件进行Adventure Works公司的Customers 应用程序的UI布局。控件使用绝对定位,屏幕分辨率和设备大小改变时,不会自动伸缩
Customers With Scalable UI 使用嵌套Grid控件并定义行和列来实现控件的相对定位。这个版本的UI能自动适应不同的屏幕分辨率和设备大小。但在贴靠视图中表现不佳
Customers With Adaptive UI 对上一个可伸缩UI进行扩展。使用Visual State Manager检测切换到贴靠视图的事件,并相应修改控件布局
Customers With Styles
使用XAML样式更改字体和背景图片
第26章
DataBinding 使用数据绑定在UI中显示从数据源获取的客户资料;还演示了如何实现INotifyPropertyChanged接口,从而允许UI更新客户资料,并将改动发送回数据源
ViewModel 通过实现Model-View-ViewModel模式,将UI同数据源访问逻辑分开
Search 实现Windows 8.1搜索合约,按名字或姓氏搜索客户
续表
项目名称 说明
第27章
Data Service 这个解决方案包含一个Web应用程序来提供REST Web服务,使Customers应用程序能从SQL Server数据库获取客户数据。REST Web服务通过由实体框架创建的实体模型来访问数据库
Updatable ViewModel 这个解决方案中的Customers项目包含一个扩展的ViewModel,它提供许多命令,允许UI通过REST Web服务插入和更新客户资料
目 录
第I部分 Visual C#和Visual Studio 2013概述
第1章 欢迎进入C#编程世界 3
1.1 开始在Visual Studio 2013环境中编程 3
1.2 编写第一个程序 7
1.3 使用命名空间 12
1.4 创建图形应用程序 14
1.4.1 探索Windows Store应用程序 24
1.4.2 探索WPF应用程序 27
1.4.3 向图形应用程序添加代码 29
小结 31
第1章快速参考 31
第2章 使用变量、操作符和表达式 33
2.1 理解语句 33
2.2 使用标识符 34
2.3 使用变量 35
2.3.1 命名变量 35
2.3.2 声明变量 35
2.4 使用基元数据类型 36
2.4.1 未赋值的局部变量 37
2.4.2 显示基元数据类型的值 37
2.5 使用算术操作符 43
2.5.1 操作符和类型 43
2.5.2 深入了解算术操作符 45
2.5.3 控制优先级 50
2.5.4 使用结合性对表达式进行求值 50
2.5.5 结合性和赋值操作符 51
2.6 变量递增和递减 52
2.7 声明隐式类型的局部变量 53
小结 54
第2章快速参考 54
第3章 方法和作用域 56
3.1 创建方法 56
3.1.1 声明方法 56
3.1.2 从方法返回数据 57
3.1.3 调用方法 59
3.2 使用作用域 61
3.2.1 定义局部作用域 62
3.2.2 定义类作用域 62
3.2.3 重载方法 63
3.3 编写方法 63
3.4 使用可选参数和具名参数 70
3.4.1 定义可选参数 72
3.4.2 传递具名参数 72
3.4.3 消除可选参数和具名参数的歧义 73
小结 77
第3章快速参考 78
第4章 使用判断语句 79
4.1 声明布尔变量 79
4.2 使用布尔操作符 79
4.2.1 理解相等和关系操作符 80
4.2.2 理解条件逻辑操作符 80
4.2.3 短路求值 81
4.2.4 操作符的优先级和结合性总结 81
4.3 使用if语句做出判断 82
4.3.1 理解if语句的语法 82
4.3.2 使用代码块分组语句 83
4.3.3 嵌套if语句 84
4.4 使用switch语句 90
4.4.1 理解switch语句的语法 91
4.4.2 遵守switch语句的规则 92
小结 95
第4章快速参考 95
第5章 使用复合赋值和循环语句 97
5.1 使用复合赋值操作符 97
5.2 使用while语句 98
5.3 编写for语句 103
5.4 编写do语句 105
小结 113
第5章快速参考 113
第6章 管理错误和异常 114
6.1 处理错误 114
6.2 尝试执行代码和捕捉异常 114
6.2.1 未处理的异常 116
6.2.2 使用多个catch处理程序 116
6.2.3 捕捉多个异常 117
6.2.4 传播异常 122
6.3 使用checked和unchecked整数运算 124
6.3.1 编写checked语句 125
6.3.2 编写checked表达式 125
6.4 抛出异常 128
6.5 使用finally块 132
小结 133
第6章快速参考 134
第II部分 理解C#对象模型
第7章 创建并管理类和对象 137
7.1 理解分类 137
7.2 封装的目的 137
7.3 定义并使用类 138
7.4 控制可访问性 139
7.4.1 使用构造器 140
7.4.2 重载构造器 141
7.5 理解静态方法和数据 148
7.5.1 创建共享字段 149
7.5.2 使用const关键字创建静态字段 150
7.5.3 静态类 150
7.5.4 匿名类 152
小结 153
第7章快速参考 154
第8章 理解值和引用 156
8.1 复制值类型的变量和类 156
8.2 理解null值和可空类型 161
8.2.1 使用可空类型 162
8.2.2 理解可空类型的属性 163
8.3 使用ref和out参数 164
8.3.1 创建ref参数 164
8.3.2 创建out参数 165
8.4 计算机内存的组织方式 167
8.5 System.Object类 169
8.6 装箱 170
8.7 拆箱 170
8.8 数据类型的安全转换 171
8.8.1 is操作符 172
8.8.2 as操作符 172
小结 174
第8章快速参考 174
第9章 使用枚举和结构创建值类型 177
9.1 使用枚举 177
9.1.1 声明枚举 177
9.1.2 使用枚举 177
9.1.3 选择枚举字面值 178
9.1.4 选择枚举的基本类型 179
9.2 使用结构 181
9.2.1 声明结构 183
9.2.2 理解结构和类的区别 184
9.2.3 声明结构变量 185
9.2.4 理解结构的初始化 185
9.2.5 复制结构变量 189
小结 193
第9章快速参考 193
第10章 使用数组 195
10.1 声明和创建数组 195
10.1.1 声明数组变量 195
10.1.2 创建数组实例 196
10.1.3 填充和使用数组 197
10.1.4 创建隐式类型的数组 197
10.1.5 访问单独的数组元素 198
10.1.6 遍历数组 199
10.1.7 数组作为方法参数和返回值传递 200
10.1.8 复制数组 201
10.1.9 使用多维数组 203
10.1.10 创建交错数组 203
小结 213
第10章快速参考 213
第11章 理解参数数组 215
11.1 回顾重载 215
11.2 使用数组参数 216
11.2.1 声明参数数组 217
11.2.2 使用params object[] 219
11.2.3 使用参数数组 220
11.3 比较参数数组和可选参数 223
小结 225
第11章快速参考 225
第12章 使用继承 226
12.1 什么是继承 226
12.2 使用继承 227
12.2.1 复习System.Object类 228
12.2.2 调用基类构造器 229
12.2.3 类的赋值 230
12.2.4 声明新方法 231
12.2.5 声明虚方法 232
12.2.6 声明重写方法 233
12.2.7 理解受保护的访问 236
12.3 理解扩展方法 242
小结 245
第12章快速参考 246
第13章 创建接口和定义抽象类 248
13.1 理解接口 248
13.1.1 定义接口 249
13.1.2 实现接口 249
13.1.3 通过接口来引用类 251
13.1.4 使用多个接口 251
13.1.5 显式实现接口 252
13.1.6 接口的限制 254
13.1.7 定义和使用接口 254
13.2 抽象类 263
13.3 密封类 265
13.3.1 密封方法 266
13.3.2 实现并使用抽象类 266
小结 272
第13章快速参考 272
第14章 使用垃圾回收和资源管理 274
14.1 对象的生存期 274
14.1.1 编写析构器 275
14.1.2 为什么要使用垃圾回收器 276
14.1.3 垃圾回收器的工作原理 278
14.1.4 慎用析构器 278
14.2 资源管理 279
14.2.1 资源清理方法 279
14.2.2 异常安全的资源清理 279
14.2.3 using语句和IDisposable 接口 280
14.2.4 从析构器中调用Dispose 方法 282
14.3 实现异常安全的资源清理 283
小结 290
第14章快速参考 291
第III部分 用C#定义可扩展类型
第15章 实现属性以访问字段 295
15.1 使用方法实现封装 295
15.2 什么是属性 297
15.2.1 使用属性 299
15.2.2 只读属性 299
15.2.3 只写属性 300
15.2.4 属性的可访问性 300
15.3 理解属性的局限性 301
15.4 在接口中声明属性 302
15.5 生成自动属性 308
15.6 使用属性来初始化对象 309
小结 313
第15章快速参考 313
第16章 使用索引器 315
16.1 什么是索引器 315
16.1.1 不用索引器的例子 315
16.1.2 使用索引器的同一个例子 317
16.1.3 理解索引器的访问器 319
16.1.4 对比索引器和数组 319
16.2 接口中的索引器 321
16.3 在Windows应用程序中使用索引器 322
小结 328
第16章快速参考 328
第17章 泛型概述 330
17.1 object的问题 330
17.2 泛型解决方案 333
17.2.1 对比泛型类与常规类 335
17.2.2 泛型和约束 336
17.3 创建泛型类 336
17.3.1 二叉树理论 336
17.3.2 使用泛型构造二叉树类 339
17.4 创建泛型方法 347
17.5 可变性和泛型接口 350
17.5.1 协变接口 351
17.5.2 逆变接口 353
小结 355
第17章快速参考 355
第18章 使用集合 357
18.1 什么是集合类 357
18.1.1 List<T>集合类 358
18.1.2 LinkedList<T>集合类 360
18.1.3 Queue<T>集合类 362
18.1.4 Stack<T>集合类 363
18.1.5 Dictionary<TKey, TValue>集合类 364
18.1.6 SortedList<TKey, TValue>集合类 365
18.1.7 HashSet<T>集合类 366
18.2 使用集合初始化器 368
18.3 Find方法、谓词和Lambda表达式 368
18.4 比较数组和集合 370
小结 374
第18章快速参考 375
第19章 枚举集合 377
19.1 枚举集合中的元素 377
19.1.1 手动实现枚举器 378
19.1.2 实现IEnumerable接口 382
19.2 使用迭代器来实现枚举器 384
19.2.1 一个简单的迭代器 384
19.2.2 使用迭代器为Tree<TItem>类定义枚举器 386
小结 388
第19章快速参考 389
第20章 分离应用程序逻辑并处理事件 390
20.1 理解委托 390
20.1.1 .NET Framework类库的委托例子 391
20.1.2 自动化工厂的例子 393
20.1.3 不使用委托来实现工厂 393
20.1.4 使用委托来实现工厂 394
20.1.5 声明和使用委托 396
20.2 Lambda表达式和委托 404
20.2.1 创建方法适配器 405
20.2.2 Lambda表达式的形式 405
20.3 启用事件通知 407
20.3.1 声明事件 407
20.3.2 订阅事件 408
20.3.3 取消订阅事件 408
20.3.4 引发事件 409
20.4 理解用户界面事件 409
小结 417
第20章快速参考 417
第21章 使用查询表达式来查询内存中的数据 420
21.1 什么是语言集成查询 420
21.2 在C#应用程序中使用LINQ 421
21.2.1 选择数据 422
21.2.2 筛选数据 425
21.2.3 排序、分组和聚合数据 425
21.2.4 联接数据 427
21.2.5 使用查询操作符 428
21.2.6 查询Tree<TItem>对象中的数据 431
21.2.7 LINQ和推迟求值 436
小结 440
第21章快速参考 440
第22章 操作符重载 442
22.1 理解操作符 442
22.1.1 操作符的限制 442
22.1.2 重载的操作符 443
22.1.3 创建对称操作符 444
22.2 理解复合赋值 446
22.3 声明递增和递减操作符 447
22.4 比较结构和类中的操作符 448
22.5 定义成对的操作符 449
22.6 实现操作符 450
22.7 理解转换操作符 456
22.7.1 提供内建转换 456
22.7.2 实现用户自定义的转换操作符 457
22.7.3 再论创建对称操作符 458
22.7.4 添加隐式转换操作符 458
小结 461
第22章快速参考 461
第IV部分 使用C#构建Windows 8.1专业应用
第23章 使用任务提高吞吐量 465
23.1 使用并行处理来执行多任务处理 465
23.2 用.NET Framework实现多任务处理 467
23.2.1 任务、线程和线程池 468
23.2.2 创建、运行和控制任务 469
23.2.3 使用Task类实现并行处理 471
23.2.4 使用Parallel类对任务进行抽象 480
23.2.5 什么时候不要使用Parallel类 484
23.3 取消任务和处理异常 486
23.3.1 协作式取消的原理 486
23.3.2 为Canceled和Faulted任务使用延续任务 498
小结 498
第23章快速参考 499
第24章 通过异步操作提高响应速度 501
24.1 实现异步方法 502
24.1.1 定义异步方法:问题 502
24.1.2 定义异步方法:解决方案 504
24.1.3 定义返回值的异步方法 509
24.1.4 异步方法和Windows RuntimeAPI 510
24.2 用PLINQ进行并行数据访问 512
24.2.1 用PLINQ增强遍历集合时的性能 513
24.2.2 取消PLINQ查询 517
24.3 同步对数据的并发访问 517
24.3.1 锁定数据 520
24.3.2 用于协调任务的同步基元 521
24.3.3 取消同步 523
24.3.4 并发集合类 523
24.3.5 使用并发集合和锁来实现线程安全的数据访问 524
小结 533
第24章快速参考 533
第25章 实现Windows Store应用程序的用户界面 536
25.1 什么是Windows Store应用 536
25.2 使用空白模板构建Windows Store应用 539
25.2.1 实现可伸缩的用户界面 541
25.2.2 向用户界面应用样式 567
小结 575
第25章快速参考 576
第26章 在Windows Store应用程序中显示和搜索数据 577
26.1 实现Model-View-ViewModel模式 577
26.1.1 通过数据绑定显示数据 578
26.1.2 通过数据绑定修改数据 583
26.1.3 为ComboBox控件使用数据绑定 587
26.1.4 创建ViewModel 589
26.1.5 向ViewModel添加命令 592
26.2 Windows 8.1合约 602
26.2.1 实现搜索合约 603
26.2.2 导航至所选项 613
小结 615
第26章快速参考 617
第27章 在Windows Store应用程序中 访问远程数据库 619
27.1 从数据库获取数据 619
27.1.1 创建实体模型 621
27.1.2 创建和使用REST Web 服务 625
27.2 通过REST Web服务插入、更新 和删除 636
小结 651
第27章快速参考 652
译者后记 655