新書推薦:
《
农为邦本——农业历史与传统中国
》
售價:HK$
74.8
《
郊庙之外:隋唐国家祭祀与宗教 增订版 (三联·哈佛燕京学术丛书)
》
售價:HK$
105.6
《
小麦文明:“黄金石油”争夺战
》
售價:HK$
97.9
《
悬壶杂记全集:老中医多年临证经验总结(套装3册) 中医医案诊疗思路和处方药应用
》
售價:HK$
135.1
《
无法忍受谎言的人:一个调查记者的三十年
》
售價:HK$
63.8
《
战争社会学专论
》
售價:HK$
118.8
《
剑桥意大利戏剧史(剑桥世界戏剧史译丛)
》
售價:HK$
162.8
《
教育何用:重估教育的价值
》
售價:HK$
65.8
編輯推薦:
C#经典名著,连续畅销十五年,累计销售超20万册,引领无数读者进入程序开发殿堂
最新版更新至C# 2012和.NET 4.5
2009年度2011年度全行业优秀畅销书,深受广大读者喜爱
2008年度优秀技术图书!
2007年度最畅销的C#销售图书!
2006年最受读者喜爱的十大技术开发类图书!
2005年最权威的十大IT图书之C#2010最新版
內容簡介:
《C#高级编程第8版》是C# 2012和.NET 4.5高级技术的终极资源,旨在帮助读者更新、提高用C#
2012和.NET 4.5编写Windows应用程序、Web应用程序、Windows
8样式应用程序的技巧。本书的顶级作者专家团队首先介绍了C#的基础知识,之后全面探讨了该语言和架构中的新增功能,以及新的测试驱动的开发和并发编程特性。本书提供了学习C#
2012和.NET 4.5所需的所有知识,使读者可以最大限度地发挥出这些动态技术的潜能。
◆ 介绍富有挑战性的.NET特性,包括LINQ、LINQ toEquities、LINQ to
XML、WCF、WPF、Workflow和泛型
◆ 详细论述了异步编程、模式、基础和方法
◆ 研究了Windows 8开发的新选项和接口、WinRT和Windows 8样式应用程序
◆ 阐述了文件和注册表的操作
◆ 介绍了WPF编程,包括样式、数据驱动的应用程序和文档、ASP.NET Web Forms以及ASP.NET
MVC
關於作者:
Christian Nagel是Microsoft区域董事、Microsoft
MVP,thinktecture的合作伙伴,CN革新技术的拥有者,他是一位软件架构师和开发人员,为开发Microsoft
.NET解决方案提供培训和咨询服务。他具备超过25年的软件开发经验。Christian从PDP
11和VAXVMS系统开始其计算机生涯,熟悉各种语言和平台。自从2000年以来,那时.NET还只是一个技术框架,他就开始使用各种.NET技术构建大量.NET解决方案。目前,他主要开发Windows
Store应用程序来访问Windows
Azure服务。他具备Microsoft技术的深厚功底,编写了大量图书,并获得了Microsoft认证培训师和专业开发人员证书。Christian在国际会议上发表演讲如TechEd和Tech
Days并创立INETA
Europe,以支持.NET用户组。通过Web站点www.cninnovation.com和www.thinktecture.com可以联系Christian,其微博是@christiannagel。
Jay Glynn开发软件的时间超过20年,使用PICK Basic为PICK操作系统编写应用程序。到目前为止,他使用过Paradox
PAL and Object PAL、Delphi、VBA、Visual Basic、C、Java和C#编写软件。他目前是UL
PureSafety的高级软件工程师,编写基于Web的应用程序。
Morgan Skinner年轻时对Sinclair
ZX80很感兴趣,在校期间就开始了计算机生涯,当时他对教师编写的一些代码不感兴趣,便开始用汇编语言编程。从此以后他使用各种语言和平台,包括VAX宏汇编程序、Pascal、Modula2、Smalltalk、X86汇编语言、PowerBuilder、CC++、VB和目前的C#,自从2000年发布PDC以来,他就用.NET编程,而且非常喜欢.NET,于是在2001年加入了Microsoft。他现在是一位独立的顾问。
目錄 :
第Ⅰ部分 C# 语 言
第1章 .NET体系结构2
1.1 C#与.NET的关系2
1.2 公共语言运行库3
1.2.1 平台无关性3
1.2.2 提高性能3
1.2.3 语言的互操作性4
1.3 中间语言5
1.3.1 面向对象和接口的支持6
1.3.2 不同的值类型和引用类型6
1.3.3 强数据类型化7
1.3.4 通过异常处理错误11
1.3.5 特性的使用12
1.4 程序集12
1.4.1 私有程序集13
1.4.2 共享程序集13
1.4.3 反射14
1.4.4 并行编程14
1.4.5 异步编程14
1.5 .NET Framework类14
1.6 名称空间15
1.7 用C#创建.NET应用程序16
1.7.1 创建ASP.NET应用程序16
1.7.2 使用WPF18
1.7.3 Windows 8应用程序18
1.7.4 Windows服务18
1.7.5 WCF19
1.7.6 Windows WF19
1.8 C#在.NET企业体系结构中的作用19
1.9 小结20
第2章 核心C#22
2.1 C#基础23
2.2 第一个C#程序23
2.2.1 代码23
2.2.2 编译并运行程序23
2.2.3 详细介绍24
2.3 变量26
2.3.1 变量的初始化26
2.3.2 类型推断27
2.3.3 变量的作用域28
2.3.4 常量30
2.4 预定义数据类型31
2.4.1 值类型和引用类型31
2.4.2 CTS类型32
2.4.3 预定义的值类型33
2.4.4 预定义的引用类型35
2.5 流控制37
2.5.1 条件语句37
2.5.2 循环41
2.5.3 跳转语句44
2.6 枚举45
2.7 名称空间46
2.7.1 using语句47
2.7.2 名称空间的别名48
2.8 Main方法49
2.8.1 多个Main方法49
2.8.2 给Main方法传递参数50
2.9 有关编译C#文件的更多内容51
2.10 控制台IO53
2.11 使用注释54
2.11.1 源文件中的内部注释54
2.11.2 XML文档55
2.12 C#预处理器指令57
2.12.1 #define和 #undef57
2.12.2 #if、#elif、#else和#endif58
2.12.3 #warning和 # error59
2.12.4 #region和#endregion59
2.12.5 #line60
2.12.6 #pragma60
2.13 C#编程规则60
2.13.1 关于标识符的规则60
2.13.2 用法约定61
2.14 小结67
第3章 对象和类型68
3.1 创建及使用类68
3.2 类和结构69
3.3 类69
3.3.1 数据成员70
3.3.2 函数成员70
3.3.3 只读字段82
3.4 匿名类型83
3.5 结构84
3.5.1 结构是值类型85
3.5.2 结构和继承86
3.5.3 结构的构造函数86
3.6 弱引用86
3.7 部分类88
3.8 静态类89
3.9 Object类89
3.9.1 System.Object方法90
3.9.2 ToString方法91
3.10 扩展方法92
3.11 小结93
第4章 继承94
4.1 继承94
4.2 继承的类型94
4.2.1 实现继承和接口继承94
4.2.2 多重继承95
4.2.3 结构和类95
4.3 实现继承95
4.3.1 虚方法96
4.3.2 隐藏方法97
4.3.3 调用函数的基类版本98
4.3.4 抽象类和抽象函数99
4.3.5 密封类和密封方法99
4.3.6 派生类的构造函数100
4.4 修饰符105
4.4.1 可见性修饰符105
4.4.2 其他修饰符106
4.5 接口106
4.5.1 定义和实现接口107
4.5.2 派生的接口110
4.6 小结112
第5章 泛型113
5.1 泛型概述113
5.1.1 性能114
5.1.2 类型安全115
5.1.3 二进制代码的重用115
5.1.4 代码的扩展116
5.1.5 命名约定116
5.2 创建泛型类116
5.3 泛型类的功能120
5.3.1 默认值121
5.3.2 约束122
5.3.3 继承124
5.3.4 静态成员125
5.4 泛型接口125
5.4.1 协变和抗变126
5.4.2 泛型接口的协变127
5.4.3 泛型接口的抗变128
5.5 泛型结构129
5.6 泛型方法132
5.6.1 泛型方法示例132
5.6.2 带约束的泛型方法133
5.6.3 带委托的泛型方法134
5.6.4 泛型方法规范135
5.7 小结136
第6章 数组137
6.1 同一类型和不同类型的多个对象137
6.2 简单数组138
6.2.1 数组的声明138
6.2.2 数组的初始化138
6.2.3 访问数组元素139
6.2.4 使用引用类型140
6.3 多维数组141
6.4 锯齿数组142
6.5 Array类143
6.5.1 创建数组143
6.5.2 复制数组144
6.5.3 排序145
6.6 数组作为参数148
6.6.1 数组协变149
6.6.2 ArraySegment149
6.7 枚举150
6.7.1 IEnumerator接口150
6.7.2 foreach语句151
6.7.3 yield语句151
6.8 元组156
6.9 结构比较157
6.10 小结160
第7章 运算符和类型强制转换161
7.1 运算符和类型转换161
7.2 运算符161
7.2.1 运算符的简化操作163
7.2.2 运算符的优先级167
7.3 类型的安全性168
7.3.1 类型转换168
7.3.2 装箱和拆箱172
7.4 比较对象的相等性172
7.4.1 比较引用类型的相等性172
7.4.2 比较值类型的相等性173
7.5 运算符重载174
7.5.1 运算符的工作方式175
7.5.2 运算符重载的示例:Vector结构176
7.6 用户定义的类型强制转换182
7.6.1 实现用户定义的类型强制转换184
7.6.2 多重类型强制转换189
7.7 小结193
第8章 委托、Lambda表达式
和事件194
8.1 引用方法194
8.2 委托195
8.2.1 声明委托195
8.2.2 使用委托196
8.2.3 简单的委托示例199
8.2.4 Action和Func委托201
8.2.5 BubbleSorter示例202
8.2.6 多播委托204
8.2.7 匿名方法208
8.3 Lambda表达式209
8.3.1 参数209
8.3.2 多行代码210
8.3.3 闭包210
8.3.4 使用foreach语句的闭包211
8.4 事件212
8.4.1 事件发布程序212
8.4.2 事件侦听器214
8.4.3 弱事件215
8.5 小结219
第9章 字符串和正则表达式220
9.1 System.String类221
9.1.1 创建字符串222
9.1.2 StringBuilder成员225
9.1.3 格式字符串226
9.2 正则表达式231
9.2.1 正则表达式概述231
9.2.2 RegularExpressionsPlayaround示例232
9.2.3 显示结果235
9.2.4 匹配、组合和捕获236
9.3 小结238
第10章 集合239
10.1 概述239
10.2 集合接口和类型240
10.3 列表241
10.3.1 创建列表242
10.3.2 只读集合251
10.4 队列251
10.5 栈255
10.6 链表256
10.7 有序列表262
10.8 字典263
10.8.1 键的类型264
10.8.2 字典示例265
10.8.3 Lookup类269
10.8.4 有序字典270
10.9 集270
10.10 可观察的集合272
10.11 位数组273
10.11.1 BitArray类274
10.11.2 BitVector32结构276
10.12 并发集合278
10.12.1 创建管道279
10.12.2 使用Blocking-Collection282
10.12.3 使用Concurrent-Dictionary283
10.12.4 完成管道285
10.13 性能286
10.14 小结288
第11章 LINQ289
11.1 LINQ概述289
11.1.1 列表和实体289
11.1.2 LINQ查询293
11.1.3 扩展方法294
11.1.4 推迟查询的执行295
11.2 标准的查询操作符297
11.2.1 筛选299
11.2.2 用索引筛选299
11.2.3 类型筛选300
11.2.4 复合的from子句300
11.2.5 排序301
11.2.6 分组302
11.2.7 对嵌套的对象分组303
11.2.8 内连接304
11.2.9 左外连接305
11.2.10 组连接306
11.2.11 集合操作309
11.2.12 合并310
11.2.13 分区311
11.2.14 聚合操作符312
11.2.15 转换操作符314
11.2.16 生成操作符315
11.3 并行LINQ316
11.3.1 并行查询316
11.3.2 分区器317
11.3.3 取消317
11.4 表达式树318
11.5 LINQ提供程序320
11.6 小结321
第12章 动态语言扩展322
12.1 DLR322
12.2 dynamic类型323
12.3 包含DLR ScriptRuntime327
12.4 DynamicObject和ExpandoObject330
12.4.1 DynamicObject330
12.4.2 ExpandoObject332
12.5 小结333
第13章 异步编程334
13.1 异步编程的重要性334
13.2 异步模式335
13.2.1 同步调用342
13.2.2 异步模式343
13.2.3 基于事件的异步模式344
13.2.4 基于任务的异步模式345
13.3 异步编程的基础347
13.3.1 创建任务347
13.3.2 调用异步方法348
13.3.3 延续任务348
13.3.4 同步上下文349
13.3.5 使用多个异步方法349
13.3.6 转换异步模式350
13.4 错误处理351
13.4.1 异步方法的异常处理352
13.4.2 多个异步方法的异常处理352
13.4.3 AggregateException类353
13.5 取消353
13.5.1 开始取消任务354
13.5.2 使用框架特性取消任务354
13.5.3 取消自定义任务355
13.6 小结355
第14章 内存管理和指针356
14.1 内存管理356
14.2 后台内存管理356
14.2.1 值数据类型357
14.2.2 引用数据类型358
14.2.3 垃圾回收359
14.3 释放非托管的资源361
14.3.1 析构函数361
14.3.2 IDisposable接口362
14.3.3 实现IDisposable接口和析构函数363
14.4 不安全的代码365
14.4.1 用指针直接访问内存365
14.4.2 指针示例:PointerPlayground374
14.4.3 使用指针优化性能378
14.5 小结381
第15章 反射382
15.1 在运行期间处理和检查代码382
15.2 自定义特性383
15.2.1 编写自定义特性383
15.2.2 自定义特性示例:WhatsNewAttributes386
15.3 反射389
15.3.1 System.Type类389
15.3.2 TypeView示例392
15.3.3 Assembly类393
15.3.4 完成WhatsNewAttributes示例395
15.4 小结398
第16章 错误和异常399
16.1 简介399
16.2 异常类400
16.3 捕获异常401
16.3.1 实现多个catch块403
16.3.2 在其他代码中捕获异常407
16.3.3 System.Exception属性407
16.3.4 没有处理异常时所发生的情况408
16.3.5 嵌套的 try块408
16.4 用户定义的异常类410
16.4.1 捕获用户定义的异常411
16.4.2 抛出用户定义的异常412
16.4.3 定义用户定义的异常类415
16.5 调用者信息417
16.6 小结418
第Ⅱ部分 Visual Studio
第17章 Visual Studio 2012420
17.1 用Visual Studio 2012进行工作420
17.1.1 项目文件的改进423
17.1.2 Visual Studio的版本423
17.1.3 Visual Studio设置424
17.2 创建项目424
17.2.1 面向多个版本的.NET Framework425
17.2.2 选择项目类型427
17.3 浏览并编写项目430
17.3.1 Solution Explorer430
17.3.2 用代码编辑器进行工作436
17.3.3 学习和理解其他窗口438
17.3.4 排列窗口442
17.4 构建项目442
17.4.1 构建、编译和生成442
17.4.2 调试版本和发布版本443
17.4.3 选择配置445
17.4.4 编辑配置445
17.5 调试代码446
17.5.1 设置断点446
17.5.2 使用数据提示和调试器可视化工具447
17.5.3 监视和修改变量448
17.5.4 异常449
17.5.5 多线程450
17.5.6 IntelliTrace451
17.6 重构工具451
17.7 体系结构工具453
17.7.1 依赖项关系图453
17.7.2 层关系图454
17.8 分析应用程序456
17.8.1 序列图456
17.8.2 探查器457
17.8.3 Concurrency Visualizer459
17.8.4 Code Analysis459
17.8.5 Code Metrics460
17.9 单元测试461
17.9.1 创建单元测试461
17.9.2 运行单元测试462
17.9.3 预期异常463
17.9.4 测试全部代码路径463
17.9.5 外部依赖464
17.9.6 Fakes Framework467
17.10 Windows 8、WCF、WF等468
17.10.1 使用Visual Studio 2012生成WCF应用程序468
17.10.2 使用Visual Studio 2012生成WF应用程序470
17.10.3 使用Visual Studio 2012生成Windows
Store应用程序470
17.11 小结472
第18章 部署473
18.1 部署是应用程序生命周期的一部分473
18.2 部署的规划473
18.2.1 部署选项474
18.2.2 部署要求474
18.2.3 部署.NET运行库475
18.3 传统的部署选项475
18.3.1 xcopy部署476
18.3.2 xcopy和Web应用程序476
18.3.3 Windows Installer476
18.4 ClickOnce477
18.4.1 ClickOnce操作477
18.4.2 发布ClickOnce应用程序477
18.4.3 ClickOnce设置479
18.4.4 ClickOnce文件的应用程序缓存481
18.4.5 应用程序的安装481
18.4.6 ClickOnce部署API482
18.5 Web部署483
18.5.1 Web应用程序483
18.5.2 配置文件483
18.5.3 创建Web Deploy包484
18.6 Windows 8应用程序485
18.6.1 创建应用程序包486
18.6.2 Windows App Certification Kit487
18.6.3 旁加载487
18.6.4 Windows部署API488
18.7 小结490
第Ⅲ部分 基 础
第19章 程序集492
19.1 程序集的含义492
19.1.1 程序集的功能493
19.1.2 程序集的结构493
19.1.3 程序集清单494
19.1.4 名称空间、程序集和组件494
19.1.5 私有程序集和共享程序集495
19.1.6 附属程序集495
19.1.7 查看程序集495
19.2 构建程序集496
19.2.1 创建模块和程序集496
19.2.2 程序集的特性497
19.2.3 创建和动态加载程序集499
19.3 应用程序域502
19.4 共享程序集506
19.4.1 强名506
19.4.2 使用强名获得完整性507
19.4.3 全局程序集缓存508
19.4.4 创建共享程序集509
19.4.5 创建强名509
19.4.6 安装共享程序集510
19.4.7 使用共享程序集511
19.4.8 程序集的延迟签名512
19.4.9 引用513
19.4.10 本机映像生成器513
19.5 配置.NET应用程序514
19.5.1 配置类别515
19.5.2 绑定程序集516
19.6 版本问题517
19.6.1 版本号517
19.6.2 通过编程方式获取版本518
19.6.3 绑定到程序集版本518
19.6.4 发行者策略文件519
19.6.5 运行库的版本521
19.7 在不同的技术之间共享程序集522
19.7.1 共享源代码522
19.7.2 可移植类库523
19.8 小结524
第20章 诊断525
20.1 诊断概述525
20.2 代码协定526
20.2.1 前提条件527
20.2.2 后置条件528
20.2.3 不变量529
20.2.4 纯粹性529
20.2.5 接口的协定529
20.2.6 简写531
20.2.7 协定和遗留代码531
20.3 跟踪532
20.3.1 跟踪源533
20.3.2 跟踪开关534
20.3.3 跟踪侦听器535
20.3.4 筛选器537
20.3.5 相关性538
20.3.6 使用ETW进行跟踪541
20.4 事件日志542
20.4.1 事件日志体系结构542
20.4.2 事件日志类544
20.4.3 创建事件源545
20.4.4 写入事件日志546
20.4.5 资源文件546
20.5 性能监视550
20.5.1 性能监视类550
20.5.2 性能计数器生成器550
20.5.3 添加PerformanceCounter组件553
20.5.4 perfmon.exe555
20.6 小结556
第21章 任务、线程和同步557
21.1 概述557
21.2 Parallel类558
21.2.1 用Parallel.For方法循环559
21.2.2 使用Parallel.ForEach方法循环562
21.2.3 通过Parallel.Invoke方法调用多个方法563
21.3 任务563
21.3.1 启动任务563
21.3.2 Future—— 任务的结果566
21.3.3 连续的任务567
21.3.4 任务层次结构568
21.4 取消架构568
21.4.1 Parallel.For方法的取消569
21.4.2 任务的取消570
21.5 线程池571
21.6 Thread类573
21.6.1 给线程传递数据574
21.6.2 后台线程575
21.6.3 线程的优先级576
21.6.4 控制线程576
21.7 线程问题577
21.7.1 争用条件577
21.7.2 死锁579
21.8 同步581
21.8.1 lock语句和线程安全582
21.8.2 Interlocked类587
21.8.3 Monitor类588
21.8.4 SpinLock结构589
21.8.5 WaitHandle基类589
21.8.6 Mutex类590
21.8.7 Semaphore类591
21.8.8 Events类593
21.8.9 Barrier类596
21.8.10 ReaderWriterLockSlim类598
21.9 Timer类601
21.10 数据流602
21.10.1 使用动作块602
21.10.2 源和目标数据块603
21.10.3 连接块604
21.11 小结606
第22章 安全性608
22.1 概述608
22.2 身份验证和授权609
22.2.1 标识和Principal609
22.2.2 角色610
22.2.3 声明基于角色的安全性611
22.2.4 声称612
22.2.5 客户端应用程序服务613
22.3 加密618
22.3.1 签名619
22.3.2 交换密钥和安全传输621
22.4 资源的访问控制624
22.5 代码访问安全性627
22.5.1 第2级安全透明性627
22.5.2 权限628
22.6 使用证书发布代码632
22.7 小结633
第23章 互操作634
23.1 .NET和COM技术634
23.1.1 元数据635
23.1.2 释放内存635
23.1.3 接口636
23.1.4 方法绑定637
23.1.5 数据类型637
23.1.6 注册638
23.1.7 线程638
23.1.8 错误处理640
23.1.9 事件640
23.1.10 封送640
23.2 在.NET客户端中使用COM组件641
23.2.1 创建一个COM组件641
23.2.2 创建运行库可调用包装647
23.2.3 使用RCW648
23.2.4 通过动态语言扩展使用COM服务649
23.2.5 线程问题650
23.2.6 添加连接点650
23.3 在COM客户端中使用.NET组件652
23.3.1 COM可调用包装653
23.3.2 创建.NET组件653
23.3.3 创建一个类型库654
23.3.4 COM互操作特性656
23.3.5 COM注册658
23.3.6 创建COM客户端应用程序659
23.3.7 添加连接点660
23.3.8 使用sink对象创建客户端661
23.3.9 平台调用663
23.4 小结667
第24章 文件和注册表操作668
24.1 文件和注册表668
24.2 管理文件系统669
24.2.1 表示文件和文件夹的.NET类670
24.2.2 Path类672
24.2.3 FileProperties示例672
24.3 移动、复制和删除文件677
24.3.1 FilePropertiesAndMovement示例677
24.3.2 FilePropertiesAndMovement示例的代码678
24.4 读写文件681
24.4.1 读取文件681
24.4.2 写入文件683
24.4.3 流684
24.4.4 缓存的流686
24.4.5 使用FileStream类读写二进制文件686
24.4.6 读写文本文件691
24.5 映射内存的文件697
24.6 读取驱动器信息698
24.7 文件的安全性700
24.7.1 从文件中读取ACL700
24.7.2 从目录中读取ACL701
24.7.3 添加和删除文件中的ACL项703
24.8 读写注册表704
24.8.1 注册表705
24.8.2 .NET注册表类706
24.9 读写独立存储器709
24.10 小结713
第25章 事务处理714
25.1 简介714
25.2 概述715
25.2.1 事务处理阶段715
25.2.2 ACID属性716
25.3 数据库和实体类716
25.4 传统的事务718
25.4.1 ADO.NET事务718
25.4.2 System.Enterprise-Services719
25.5 System.Transactions720
25.5.1 可提交的事务722
25.5.2 事务处理的升级724
25.5.3 依赖事务726
25.5.4 环境事务728
25.6 隔离级别735
25.7 自定义资源管理器736
25.8 文件系统事务742
25.9 小结746
第26章 网络747
26.1 网络747
26.2 WebClient类748
26.2.1 下载文件748
26.2.2 基本的WebClient示例748
26.2.3 上传文件750
26.3 WebRequest类和WebResponse类750
26.3.1 身份验证752
26.3.2 使用代理752
26.3.3 异步页面请求753
26.4 把输出结果显示为HTML页面753
26.4.1 从应用程序中进行简单的Web浏览754
26.4.2 启动Internet Explorer实例755
26.4.3 给应用程序提供更多IE类型的功能756
26.4.4 使用WebBrowser控件打印761
26.4.5 显示所请求页面的代码761
26.4.6 WebRequest类和WebResponse类的层次结构762
26.5 实用工具类763
26.5.1 URI763
26.5.2 IP地址和DNS名称764
26.6 较低层的协议766
26.6.1 使用SmtpClient767
26.6.2 使用TCP类768
26.6.3 TcpSend和TcpReceive示例769
26.6.4 TCP和UDP771
26.6.5 UDP类771
26.6.6 Socket类772
26.6.7 WebSocket775
26.7 小结779
第27章 Windows服务780
27.1 Windows服务780
27.2 Windows服务的体系结构781
27.2.1 服务程序782
27.2.2 服务控制程序783
27.2.3 服务配置程序783
27.2.4 Windows服务的类783
27.3 创建Windows服务程序783
27.3.1 创建服务的核心功能784
27.3.2 QuoteClient示例787
27.3.3 Windows服务程序791
27.3.4 线程化和服务795
27.3.5 服务的安装795
27.3.6 安装程序795
27.4 Windows服务的监控和控制799
27.4.1 MMC管理单元800
27.4.2 net.exe实用程序801
27.4.3 sc.exe实用程序801
27.4.4 Visual Studio Server Explorer801
27.4.5 编写自定义ServiceController类801
27.5 故障排除和事件日志809
27.6 小结810
第28章 本地化811
28.1 全球市场811
28.2 System.Globalization名称空间812
28.2.1 Unicode问题812
28.2.2 区域性和区域813
28.2.3 使用区域性817
28.2.4 排序823
28.3 资源824
28.3.1 创建资源文件824
28.3.2 资源文件生成器825
28.3.3 ResourceWriter825
28.3.4 使用资源文件826
28.3.5 System.Resources名称空间830
28.4 使用Visual Studio的Windows Forms本地化831
28.4.1 通过编程方式修改区域性836
28.4.2 使用自定义资源消息837
28.4.3 资源的自动回退838
28.4.4 外包翻译838
28.5 ASP.NET Web Forms的本地化839
28.6 用WPF本地化841
28.6.1 用于WPF的.NET资源842
28.6.2 XAML资源字典843
28.7 自定义资源读取器846
28.7.1 创建DatabaseResource- Reader类847
28.7.2 创建DatabaseResource-Set类848
28.7.3 创建DatabaseResource-Manager类849
28.7.4 DatabaseResourceReader的客户端应用程序850
28.8 创建自定义区域性850
28.9 用Windows Store应用程序进行本地化852
28.9.1 使用资源852
28.9.2 使用多语言应用程序工具集进行本地化853
28.10 小结854
第29章 核心XAML855
29.1 XAML的作用855
29.2 概述855
29.2.1 元素如何映射到.NET对象上856
29.2.2 使用自定义.NET类857
29.2.3 把属性用作特性859
29.2.4 把属性用作元素859
29.2.5 基本的.NET类型860
29.2.6 使用集合和XAML860
29.2.7 用XAML代码调用构造函数861
29.3 依赖属性861
29.3.1 创建依赖属性862
29.3.2 强制值回调863
29.3.3 值变更回调和事件864
29.3.4 事件的冒泡和隧道864
29.4 附加属性867
29.5 标记扩展870
29.6 创建自定义标记扩展870
29.7 XAML定义的标记扩展872
29.8 读写XAML872
29.9 小结873
第30章 Managed Extensibility Framework874
30.1 概述874
30.2 MEF的体系结构875
30.2.1 使用属性的MEF876
30.2.2 基于约定的部件注册881
30.3 定义协定883
30.4 导出部件884
30.4.1 创建部件884
30.4.2 导出属性和方法889
30.4.3 导出元数据891
30.4.4 使用元数据进行惰性加载893
30.5 导入部件894
30.5.1 导入连接896
30.5.2 部件的惰性加载898
30.5.3 用惰性实例化的部件读取元数据898
30.6 容器和出口提供程序901
30.7 类别903
30.8 小结905
第31章 Windows运行库 906
31.1 概述906
31.1.1 .NET与Windows运行库的比较907
31.1.2 名称空间907
31.1.3 元数据909
31.1.4 语言投射910
31.1.5 Windows运行库中的类型912
31.2 Windows运行库组件913
31.2.1 集合913
31.2.2 流914
31.2.3 委托与事件915
31.2.4 异步操作915
31.3 Windows 8应用程序916
31.4 Windows 8应用程序的生命周期918
31.4.1 Windows 8应用程序的执行状态919
31.4.2 SuspensionManager920
31.4.3 导航状态921
31.4.4 测试暂停922
31.4.5 页面状态922
31.5 Windows 8应用程序的设置924
31.6 摄像头功能926
31.7 小结928
第Ⅳ部分 数 据
第32章 核心ADO.NET930
32.1 ADO.NET概述930
32.1.1 名称空间931
32.1.2 共享类932
32.1.3 数据库专用类932
32.2 使用数据库连接933
32.2.1 管理连接字符串934
32.2.2 高效地使用连接935
32.2.3 事务937
32.3 命令938
32.3.1 执行命令939
32.3.2 调用存储过程942
32.4 快速数据访问:数据读取器944
32.5 异步数据访问:使用Task和await947
32.6 管理数据和关系:DataSet类949
32.6.1 数据表949
32.6.2 数据列950
32.6.3 数据关系955
32.6.4 数据约束956
32.7 XML架构:用XSD生成代码959
32.8 填充DataSet类965
32.8.1 用数据适配器填充DataSet965
32.8.2 从XML中填充DataSet类967
32.9 持久化DataSet类的修改967
32.9.1 通过数据适配器进行更新967
32.9.2 写入XML输出结果969
32.10 使用ADO.NET971
32.10.1 分层开发971
32.10.2 生成SQL Server的键972
32.10.3 命名约定974
32.11 小结976
第33章 ADO.NET Entity Framework977
33.1 用Entity Framework编程977
33.2 Entity Framework映射979
33.2.1 逻辑层979
33.2.2 概念层981
33.2.3 映射层983
33.2.4 连接字符串983
33.3 实体984
33.4 对象上下文988
33.5 关系990
33.5.1 一个层次结构一个表990
33.5.2 一种类型一个表992
33.5.3 懒惰加载、延迟加载和预先加载993
33.6 查询数据994
33.6.1 Entity SQL994
33.6.2 对象查询995
33.6.3 LINQ to Entities998
33.7 把数据写入数据库999
33.7.1 对象跟踪999
33.7.2 改变信息1000
33.7.3 附加和分离实体1001
33.7.4 存储实体的变化1002
33.8 使用POCO对象1003
33.8.1 定义实体类型1003
33.8.2 创建数据上下文1004
33.8.3 查询和更新1004
33.9 使用Code First编程模型1005
33.9.1 定义实体类型1005
33.9.2 创建数据上下文1006
33.9.3 创建数据库,存储实体1006
33.9.4 数据库1007
33.9.5 查询数据1007
33.9.6 定制数据库的生成1008
33.10 小结1009
第34章 处理XML1010
34.1 XML1010
34.2 .NET支持的XML标准1011
34.3 System.Xml名称空间1011
34.4 使用System.Xml类1012
34.5 读写流格式的XML1013
34.5.1 使用 XmlReader类1013
34.5.2 使用XmlReader类进行验证1017
34.5.3 使用XmlWriter类1019
34.6 在.NET中使用DOM1020
34.7 使用XPathNavigator类1025
34.7.1 System.Xml.XPath名称空间1025
34.7.2 System.Xml.Xsl名称空间1030
34.7.3 调试XSLT1034
34.8 XML和ADO.NET1036
34.8.1 将ADO.NET数据转换为XML文档1036
34.8.2 把XML文档转换为ADO.NET数据1042
34.9 在XML中序列化对象1044
34.10 LINQ to XML和.NET1053
34.11 使用不同的XML对象1053
34.11.1 XDocument对象1053
34.11.2 XElement对象1054
34.11.3 XNamespace对象1055
34.11.4 XComment对象1057
34.11.5 XAttribute对象1058
34.12 使用LINQ查询XML文档1059
34.12.1 查询静态的XML文档1059
34.12.2 查询动态的XML文档1060
34.13 XML文档的更多查询技术1062
34.13.1 读取XML文档1062
34.13.2 写入XML文档1063
34.14 小结1065
第Ⅴ部分 显 示
第35章 核心WPF1068
35.1 理解WPF1069
35.1.1 名称空间1069
35.1.2 类层次结构1070
35.2 形状1072
35.3 几何图形1073
35.4 变换1075
35.5 画笔1077
35.5.1 SolidColorBrush1077
35.5.2 LinearGradientBrush1077
35.5.3 RadialGradientBrush1078
35.5.4 DrawingBrush1078
35.5.5 ImageBrush1079
35.5.6 VisualBrush1079
35.6 控件1081
35.6.1 简单控件1081
35.6.2 内容控件1081
35.6.3 带标题的内容控件1083
35.6.4 项控件1084
35.6.5 带标题的项控件1084
35.6.6 修饰1085
35.7 布局1086
35.7.1 StackPanel1086
35.7.2 WrapPanel1086
35.7.3 Canvas1087
35.7.4 DockPanel1088
35.7.5 Grid1089
35.8 样式和资源1090
35.8.1 样式1090
35.8.2 资源1092
35.8.3 系统资源1093
35.8.4 从代码中访问资源1093
35.8.5 动态资源1094
35.8.6 资源字典1095
35.9 触发器1096
35.9.1 属性触发器1096
35.9.2 多触发器1098
35.9.3 数据触发器1098
35.10 模板1100
35.10.1 控件模板1100
35.10.2 数据模板1103
35.10.3 样式化列表框1105
35.10.4 ItemTemplate1106
35.10.5 列表框元素的控件模板1107
35.11 动画1108
35.11.1 时间轴1109
35.11.2 非线性动画1112
35.11.3 事件触发器1112
35.11.4 关键帧动画1115
35.12 可见状态管理器1116
35.12.1 可见的状态1117
35.12.2 变换1118
35.13 3-D1119
35.13.1 模型1120
35.13.2 照相机1121
35.13.3 光线1122
35.13.4 旋转1122
35.14 小结1123
第36章 用WPF编写业务
应用程序1124
36.1 概述1124
36.2 菜单和功能区控件1125
36.2.1 菜单控件1125
36.2.2 功能区控件1126
36.3 Commanding1128
36.3.1 定义命令1129
36.3.2 定义命令源1130
36.3.3 命令绑定1130
36.4 数据绑定1131
36.4.1 BooksDemo应用程序内容1132
36.4.2 用XAML绑定1133
36.4.3 简单对象的绑定1135
36.4.4 更改通知1137
36.4.5 对象数据提供程序1140
36.4.6 列表绑定1142
36.4.7 主从绑定1145
36.4.8 多绑定1145
36.4.9 优先绑定1147
36.4.10 值的转换1149
36.4.11 动态添加列表项1150
36.4.12 动态添加选项卡中的项1151
36.4.13 数据模板选择器1152
36.4.14 绑定到XML上1154
36.4.15 绑定的验证1156
36.5 TreeView1164
36.6 DataGrid1168
36.6.1 自定义列1170
36.6.2 行的细节1171
36.6.3 用DataGrid进行分组1171
36.6.4 实时成型1174
36.7 小结1180
第37章 用WPF创建文档1181
37.1 简介1181
37.2 文本元素1182
37.2.1 字体1182
37.2.2 TextEffect1183
37.2.3 内联1184
37.2.4 块1186
37.2.5 列表1188
37.2.6 表1188
37.2.7 块的锚定1189
37.3 流文档1191
37.4 固定文档1195
37.5 XPS文档1199
37.6 打印1200
37.6.1 用PrintDialog打印1201
37.6.2 打印可见元素1201
37.7 小结1203
第38章 Windows 8应用程序1204
38.1 概述1204
38.2 Windows 8的现代UI设计1204
38.2.1 内容,不是chrome设计1205
38.2.2 快速流畅1206
38.2.3 可读性1206
38.3 示例应用程序的核心功能1206
38.3.1 文件和目录1207
38.3.2 应用程序数据1208
38.3.3 应用程序页面1213
38.4 应用程序工具栏1218
38.5 启动与导航1219
38.6 布局的变化1222
38.7 存储1225
38.7.1 定义数据协定1226
38.7.2 写入移动数据1227
38.7.3 读取数据1229
38.7.4 写入图像1230
38.7.5 读取图像1232
38.8 选择器1233
38.9 共享协定1234
38.9.1 共享源1234
38.9.2 共享目标1237
38.10 Tile1239
38.11 小结1241
第39章 核心ASP.NET1242
39.1 用于Web应用程序的.NET Framework1242
39.1.1 ASP.NET Web Forms1243
39.1.2 ASP.NET Web Pages1243
39.1.3 ASP.NET MVC1244
39.2 Web技术1244
39.2.1 HTML1244
39.2.2 CSS1245
39.2.3 JavaScript和jQuery1245
39.3 托管和配置1246
39.4 处理程序和模块1248
39.4.1 创建自定义处理程序1249
39.4.2 ASP.NET处理程序1250
39.4.3 创建自定义模块1251
39.4.4 通用模块1253
39.5 全局的应用程序类1254
39.6 请求和响应1254
39.6.1 使用HttpRequest对象1255
39.6.2 使用HttpResponse对象1256
39.7 状态管理1256
39.7.1 视图状态1257
39.7.2 cookie1258
39.7.3 会话1259
39.7.4 应用程序状态1261
39.7.5 缓存1262
39.7.6 配置文件1263
39.8 成员和角色1267
39.8.1 配置成员1267
39.8.2 使用成员API1269
39.8.3 启用角色API1270
39.9 小结1270
第40章 ASP.NET Web Forms1271
40.1 概述1271
40.2 ASPX页面模型1272
40.2.1 添加控件1272
40.2.2 使用事件1273
40.2.3 使用回送1274
40.2.4 使用自动回送1275
40.2.5 回送到其他页面1275
40.2.6 定义强类型化的跨页面回送1276
40.2.7 使用页面事件1277
40.2.8 ASPX代码1278
40.2.9 服务器端控件1280
40.3 母版页1281
40.3.1 创建母版页1281
40.3.2 使用母版页1283
40.3.3 在内容页中定义母版页内容1284
40.4 导航1285
40.4.1 站点地图1286
40.4.2 Menu控件1286
40.4.3 菜单路径1287
40.5 验证用户输入1287
40.5.1 使用验证控件1287
40.5.2 使用验证摘要1289
40.5.3 验证组1289
40.6 访问数据1290
40.6.1 使用Entity Framework1291
40.6.2 使用Entity Data Source1291
40.6.3 排序和编辑1293
40.6.4 定制列1294
40.6.5 在网格中使用模板1295
40.6.6 定制对象上下文的创建过程1297
40.6.7 对象数据源1298
40.7 安全性1299
40.7.1 启用表单身份验证1299
40.7.2 登录控件1300
40.8 Ajax1301
40.8.1 ASP.NET AJAX的概念1302
40.8.2 ASP.NET AJAX网站示例1305
40.8.3 支持ASP.NET AJAX的网站配置1308
40.8.4 添加ASP.NET AJAX功能1308
40.9 小结1315
第41章 ASP.NET MVC1316
41.1 ASP.NET MVC概述1316
41.2 定义路由1318
41.2.1 添加路由1319
41.2.2 路由约束1319
41.3 创建控制器1320
41.3.1 动作方法1321
41.3.2 参数1321
41.3.3 返回数据1322
41.4 创建视图1323
41.4.1 向视图传递数据1325
41.4.2 Razor语法1325
41.4.3 强类型视图1326
41.4.4 布局1327
41.4.5 部分视图1330
41.5 从客户端提交数据1334
41.5.1 模型绑定器1335
41.5.2 注释和验证1337
41.6 HTML Helper1338
41.6.1 简单的Helper1338
41.6.2 使用模型数据1339
41.6.3 定义HTML特性1340
41.6.4 创建列表1340
41.6.5 强类型化的Helper1341
41.6.6 编辑器扩展1342
41.6.7 创建自定义Helper1342
41.6.8 模板1343
41.7 创建数据驱动的应用程序1344
41.7.1 定义模型1344
41.7.2 创建控制器和视图1345
41.8 动作过滤器1350
41.9 身份验证和授权1352
41.9.1 登录模型1352
41.9.2 登录控制器1352
41.9.3 登录视图1354
41.10 ASP.NET Web API1355
41.10.1 使用Entity Framework Code-First进行数据访问1355
41.10.2 为ASP.NET Web API定义路由1357
41.10.3 控制器实现1357
41.10.4 使用jQuery的客户端应用程序1358
41.11 小结1360
第42章 ASP.NET动态数据1361
42.1 概述1361
42.2 创建动态数据Web应用程序1362
42.2.1 配置Scaffolding1363
42.2.2 查看结果1364
42.3 定制动态数据网站1366
42.3.1 控制框架1367
42.3.2 定制模板1368
42.3.3 配置路由1373
42.4 小结1374
第Ⅵ部分 通 信
第43章 WCF1376
43.1 WCF概述1376
43.1.1 SOAP1378
43.1.2 WSDL1378
43.1.3 REST1379
43.1.4 JSON1379
43.2 创建简单的服务和客户端1379
43.2.1 定义服务和数据协定1380
43.2.2 数据访问1382
43.2.3 服务的实现1383
43.2.4 WCF服务宿主和WCF测试客户端1384
43.2.5 自定义服务宿主1386
43.2.6 WCF客户端1388
43.2.7 诊断1390
43.2.8 与客户端共享协定程序集1392
43.3 协定1393
43.3.1 数据协定1394
43.3.2 版本问题1394
43.3.3 服务协定1395
43.3.4 消息协定1396
43.3.5 错误协定1396
43.4 服务的行为1398
43.5 绑定1401
43.5.1 标准的绑定1401
43.5.2 标准绑定的特性1402
43.5.3 Web套接字1404
43.6 宿主1407
43.6.1 自定义宿主1407
43.6.2 WAS宿主1408
43.6.3 预配置的宿主类1408
43.7 客户端1410
43.7.1 使用元数据1410
43.7.2 共享类型1411
43.8 双工通信1411
43.8.1 双工通信的协定1412
43.8.2 双工通信的服务1412
43.8.3 双工通信的客户端应用程序1413
43.9 路由1414
43.9.1 示例应用程序1415
43.9.2 路由接口1416
43.9.3 WCF路由服务1416
43.9.4 为失败使用路由器1417
43.9.5 改变协定的桥梁1418
43.9.6 过滤器的类型1419
43.10 小结1419
第44章 WCF数据服务1420
44.1 概述1420
44.2 包含CLR对象的自定义宿主1421
44.2.1 CLR对象1422
44.2.2 数据模型1424
44.2.3 数据服务1424
44.2.4 驻留服务1425
44.2.5 其他服务操作1426
44.3 HTTP客户端应用程序1426
44.4 使用WCF数据服务和ADO.NET Entity Framework1431
44.4.1 ASP.NET宿主和EDM1432
44.4.2 使用WCF数据服务客户库1433
44.5 小结1441
第45章 Windows WF 41442
45.1 工作流概述1442
45.2 Hello World示例1443
45.3 活动1444
45.3.1 If活动1445
45.3.2 InvokeMethod活动1446
45.3.3 Parallel活动1446
45.3.4 Delay活动1447
45.3.5 Pick活动1447
45.4 自定义活动1448
45.4.1 活动的验证1449
45.4.2 设计器1450
45.4.3 自定义复合活动1452
45.5 工作流1454
45.5.1 实参和变量1455
45.5.2 WorkflowApplication1455
45.5.3 存放WCF工作流1459
45.5.4 工作流的版本1463
45.5.5 驻留设计器1464
45.6 小结1468
第46章 对等网络1469
46.1 P2P网络概述1469
46.1.1 客户端-服务器体系结构1469
46.1.2 P2P体系结构1470
46.1.3 P2P体系结构的挑战1471
46.1.4 P2P术语1472
46.1.5 P2P解决方案1472
46.2 PNRP1472
46.3 构建P2P应用程序1475
46.4 小结1481
第47章 消息队列1482
47.1 概述1482
47.1.1 使用消息队列的场合1483
47.1.2 消息队列功能1484
47.2 Message Queuing产品1485
47.3 消息队列体系结构1486
47.3.1 消息1486
47.3.2 消息队列1486
47.4 Message Queuing管理工具1487
47.4.1 创建消息队列1487
47.4.2 消息队列属性1488
47.5 消息队列的编程实现1489
47.5.1 创建消息队列1489
47.5.2 查找队列1490
47.5.3 打开已知队列1490
47.5.4 发送消息1492
47.5.5 接收消息1494
47.6 课程订单应用程序1496
47.6.1 课程订单类库1496
47.6.2 课程订单消息发送程序1499
47.6.3 发送优先级和可恢复的消息1501
47.6.4 课程订单消息接收应用程序1502
47.7 接收结果1508
47.7.1 确认队列1508
47.7.2 响应队列1509
47.8 事务队列1509
47.9 消息队列和WCF1510
47.9.1 带数据协定的实体类1511
47.9.2 WCF服务协定1512
47.9.3 WCF消息接收应用程序1513
47.9.4 WCF消息发送应用程序1515
47.10 消息队列的安装1517
47.11 小结1517
目 录
第Ⅰ部分 C# 语 言
第1章 .NET体系结构2
1.1 C#与.NET的关系2
1.2 公共语言运行库3
1.2.1 平台无关性3
1.2.2 提高性能3
1.2.3 语言的互操作性4
1.3 中间语言5
1.3.1 面向对象和接口的支持6
1.3.2 不同的值类型和引用类型6
1.3.3 强数据类型化7
1.3.4 通过异常处理错误11
1.3.5 特性的使用12
1.4 程序集12
1.4.1 私有程序集13
1.4.2 共享程序集13
1.4.3 反射14
1.4.4 并行编程14
1.4.5 异步编程14
1.5 .NET Framework类14
1.6 名称空间15
1.7 用C#创建.NET应用程序16
1.7.1 创建ASP.NET应用程序16
1.7.2 使用WPF18
1.7.3 Windows 8应用程序18
1.7.4 Windows服务18
1.7.5 WCF19
1.7.6 Windows WF19
1.8 C#在.NET企业体系结构中的作用19
1.9 小结20
第2章 核心C#22
2.1 C#基础23
2.2 第一个C#程序23
2.2.1 代码23
2.2.2 编译并运行程序23
2.2.3 详细介绍24
2.3 变量26
2.3.1 变量的初始化26
2.3.2 类型推断27
2.3.3 变量的作用域28
2.3.4 常量30
2.4 预定义数据类型31
2.4.1 值类型和引用类型31
2.4.2 CTS类型32
2.4.3 预定义的值类型33
2.4.4 预定义的引用类型35
2.5 流控制37
2.5.1 条件语句37
2.5.2 循环41
2.5.3 跳转语句44
2.6 枚举45
2.7 名称空间46
2.7.1 using语句47
2.7.2 名称空间的别名48
2.8 Main方法49
2.8.1 多个Main方法49
2.8.2 给Main方法传递参数50
2.9 有关编译C#文件的更多内容51
2.10 控制台IO53
2.11 使用注释54
2.11.1 源文件中的内部注释54
2.11.2 XML文档55
2.12 C#预处理器指令57
2.12.1 #define和 #undef57
2.12.2 #if、#elif、#else和#endif58
2.12.3 #warning和 # error59
2.12.4 #region和#endregion59
2.12.5 #line60
2.12.6 #pragma60
2.13 C#编程规则60
2.13.1 关于标识符的规则60
2.13.2 用法约定61
2.14 小结67
第3章 对象和类型68
3.1 创建及使用类68
3.2 类和结构69
3.3 类69
3.3.1 数据成员70
3.3.2 函数成员70
3.3.3 只读字段82
3.4 匿名类型83
3.5 结构84
3.5.1 结构是值类型85
3.5.2 结构和继承86
3.5.3 结构的构造函数86
3.6 弱引用86
3.7 部分类88
3.8 静态类89
3.9 Object类89
3.9.1 System.Object方法90
3.9.2 ToString方法91
3.10 扩展方法92
3.11 小结93
第4章 继承94
4.1 继承94
4.2 继承的类型94
4.2.1 实现继承和接口继承94
4.2.2 多重继承95
4.2.3 结构和类95
4.3 实现继承95
4.3.1 虚方法96
4.3.2 隐藏方法97
4.3.3 调用函数的基类版本98
4.3.4 抽象类和抽象函数99
4.3.5 密封类和密封方法99
4.3.6 派生类的构造函数100
4.4 修饰符105
4.4.1 可见性修饰符105
4.4.2 其他修饰符106
4.5 接口106
4.5.1 定义和实现接口107
4.5.2 派生的接口110
4.6 小结112
第5章 泛型113
5.1 泛型概述113
5.1.1 性能114
5.1.2 类型安全115
5.1.3 二进制代码的重用115
5.1.4 代码的扩展116
5.1.5 命名约定116
5.2 创建泛型类116
5.3 泛型类的功能120
5.3.1 默认值121
5.3.2 约束122
5.3.3 继承124
5.3.4 静态成员125
5.4 泛型接口125
5.4.1 协变和抗变126
5.4.2 泛型接口的协变127
5.4.3 泛型接口的抗变128
5.5 泛型结构129
5.6 泛型方法132
5.6.1 泛型方法示例132
5.6.2 带约束的泛型方法133
5.6.3 带委托的泛型方法134
5.6.4 泛型方法规范135
5.7 小结136
第6章 数组137
6.1 同一类型和不同类型的多个对象137
6.2 简单数组138
6.2.1 数组的声明138
6.2.2 数组的初始化138
6.2.3 访问数组元素139
6.2.4 使用引用类型140
6.3 多维数组141
6.4 锯齿数组142
6.5 Array类143
6.5.1 创建数组143
6.5.2 复制数组144
6.5.3 排序145
6.6 数组作为参数148
6.6.1 数组协变149
6.6.2 ArraySegment149
6.7 枚举150
6.7.1 IEnumerator接口150
6.7.2 foreach语句151
6.7.3 yield语句151
6.8 元组156
6.9 结构比较157
6.10 小结160
第7章 运算符和类型强制转换161
7.1 运算符和类型转换161
7.2 运算符161
7.2.1 运算符的简化操作163
7.2.2 运算符的优先级167
7.3 类型的安全性168
7.3.1 类型转换168
7.3.2 装箱和拆箱172
7.4 比较对象的相等性172
7.4.1 比较引用类型的相等性172
7.4.2 比较值类型的相等性173
7.5 运算符重载174
7.5.1 运算符的工作方式175
7.5.2 运算符重载的示例:Vector结构176
7.6 用户定义的类型强制转换182
7.6.1 实现用户定义的类型强制转换184
7.6.2 多重类型强制转换189
7.7 小结193
第8章 委托、Lambda表达式
和事件194
8.1 引用方法194
8.2 委托195
8.2.1 声明委托195
8.2.2 使用委托196
8.2.3 简单的委托示例199
8.2.4 Action和Func委托201
8.2.5 BubbleSorter示例202
8.2.6 多播委托204
8.2.7 匿名方法208
8.3 Lambda表达式209
8.3.1 参数209
8.3.2 多行代码210
8.3.3 闭包210
8.3.4 使用foreach语句的闭包211
8.4 事件212
8.4.1 事件发布程序212
8.4.2 事件侦听器214
8.4.3 弱事件215
8.5 小结219
第9章 字符串和正则表达式220
9.1 System.String类221
9.1.1 创建字符串222
9.1.2 StringBuilder成员225
9.1.3 格式字符串226
9.2 正则表达式231
9.2.1 正则表达式概述231
9.2.2 RegularExpressionsPlayaround示例232
9.2.3 显示结果235
9.2.4 匹配、组合和捕获236
9.3 小结238
第10章 集合239
10.1 概述239
10.2 集合接口和类型240
10.3 列表241
10.3.1 创建列表242
10.3.2 只读集合251
10.4 队列251
10.5 栈255
10.6 链表256
10.7 有序列表262
10.8 字典263
10.8.1 键的类型264
10.8.2 字典示例265
10.8.3 Lookup类269
10.8.4 有序字典270
10.9 集270
10.10 可观察的集合272
10.11 位数组273
10.11.1 BitArray类274
10.11.2 BitVector32结构276
10.12 并发集合278
10.12.1 创建管道279
10.12.2 使用Blocking-Collection282
10.12.3 使用Concurrent-Dictionary283
10.12.4 完成管道285
10.13 性能286
10.14 小结288
第11章 LINQ289
11.1 LINQ概述289
11.1.1 列表和实体289
11.1.2 LINQ查询293
11.1.3 扩展方法294
11.1.4 推迟查询的执行295
11.2 标准的查询操作符297
11.2.1 筛选299
11.2.2 用索引筛选299
11.2.3 类型筛选300
11.2.4 复合的from子句300
11.2.5 排序301
11.2.6 分组302
11.2.7 对嵌套的对象分组303
11.2.8 内连接304
11.2.9 左外连接305
11.2.10 组连接306
11.2.11 集合操作309
11.2.12 合并310
11.2.13 分区311
11.2.14 聚合操作符312
11.2.15 转换操作符314
11.2.16 生成操作符315
11.3 并行LINQ316
11.3.1 并行查询316
11.3.2 分区器317
11.3.3 取消317
11.4 表达式树318
11.5 LINQ提供程序320
11.6 小结321
第12章 动态语言扩展322
12.1 DLR322
12.2 dynamic类型323
12.3 包含DLR ScriptRuntime327
12.4 DynamicObject和ExpandoObject330
12.4.1 DynamicObject330
12.4.2 ExpandoObject332
12.5 小结333
第13章 异步编程334
13.1 异步编程的重要性334
13.2 异步模式335
13.2.1 同步调用342
13.2.2 异步模式343
13.2.3 基于事件的异步模式344
13.2.4 基于任务的异步模式345
13.3 异步编程的基础347
13.3.1 创建任务347
13.3.2 调用异步方法348
13.3.3 延续任务348
13.3.4 同步上下文349
13.3.5 使用多个异步方法349
13.3.6 转换异步模式350
13.4 错误处理351
13.4.1 异步方法的异常处理352
13.4.2 多个异步方法的异常处理352
13.4.3 AggregateException类353
13.5 取消353
13.5.1 开始取消任务354
13.5.2 使用框架特性取消任务354
13.5.3 取消自定义任务355
13.6 小结355
第14章 内存管理和指针356
14.1 内存管理356
14.2 后台内存管理356
14.2.1 值数据类型357
14.2.2 引用数据类型358
14.2.3 垃圾回收359
14.3 释放非托管的资源361
14.3.1 析构函数361
14.3.2 IDisposable接口362
14.3.3 实现IDisposable接口和析构函数363
14.4 不安全的代码365
14.4.1 用指针直接访问内存365
14.4.2 指针示例:PointerPlayground374
14.4.3 使用指针优化性能378
14.5 小结381
第15章 反射382
15.1 在运行期间处理和检查代码382
15.2 自定义特性383
15.2.1 编写自定义特性383
15.2.2 自定义特性示例:WhatsNewAttributes386
15.3 反射389
15.3.1 System.Type类389
15.3.2 TypeView示例392
15.3.3 Assembly类393
15.3.4 完成WhatsNewAttributes示例395
15.4 小结398
第16章 错误和异常399
16.1 简介399
16.2 异常类400
16.3 捕获异常401
16.3.1 实现多个catch块403
16.3.2 在其他代码中捕获异常407
16.3.3 System.Exception属性407
16.3.4 没有处理异常时所发生的情况408
16.3.5 嵌套的 try块408
16.4 用户定义的异常类410
16.4.1 捕获用户定义的异常411
16.4.2 抛出用户定义的异常412
16.4.3 定义用户定义的异常类415
16.5 调用者信息417
16.6 小结418
第Ⅱ部分 Visual Studio
第17章 Visual Studio 2012420
17.1 用Visual Studio 2012进行工作420
17.1.1 项目文件的改进423
17.1.2 Visual Studio的版本423
17.1.3 Visual Studio设置424
17.2 创建项目424
17.2.1 面向多个版本的.NET Framework425
17.2.2 选择项目类型427
17.3 浏览并编写项目430
17.3.1 Solution Explorer430
17.3.2 用代码编辑器进行工作436
17.3.3 学习和理解其他窗口438
17.3.4 排列窗口442
17.4 构建项目442
17.4.1 构建、编译和生成442
17.4.2 调试版本和发布版本443
17.4.3 选择配置445
17.4.4 编辑配置445
17.5 调试代码446
17.5.1 设置断点446
17.5.2 使用数据提示和调试器可视化工具447
17.5.3 监视和修改变量448
17.5.4 异常449
17.5.5 多线程450
17.5.6 IntelliTrace451
17.6 重构工具451
17.7 体系结构工具453
17.7.1 依赖项关系图453
17.7.2 层关系图454
17.8 分析应用程序456
17.8.1 序列图456
17.8.2 探查器457
17.8.3 Concurrency Visualizer459
17.8.4 Code Analysis459
17.8.5 Code Metrics460
17.9 单元测试461
17.9.1 创建单元测试461
17.9.2 运行单元测试462
17.9.3 预期异常463
17.9.4 测试全部代码路径463
17.9.5 外部依赖464
17.9.6 Fakes Framework467
17.10 Windows 8、WCF、WF等468
17.10.1 使用Visual Studio 2012生成WCF应用程序468
17.10.2 使用Visual Studio 2012生成WF应用程序470
17.10.3 使用Visual Studio 2012生成Windows
Store应用程序470
17.11 小结472
第18章 部署473
18.1 部署是应用程序生命周期的一部分473
18.2 部署的规划473
18.2.1 部署选项474
18.2.2 部署要求474
18.2.3 部署.NET运行库475
18.3 传统的部署选项475
18.3.1 xcopy部署476
18.3.2 xcopy和Web应用程序476
18.3.3 Windows Installer476
18.4 ClickOnce477
18.4.1 ClickOnce操作477
18.4.2 发布ClickOnce
內容試閱 :
对于开发人员,把C#语言及其相关联的.NET
Framework环境描述为最重要的新技术一点都不夸张。.NET提供了一种环境。在这个环境中,可以开发在Windows上运行的几乎所有应用程序,而C#是专门用于.NET
Framework的编程语言。例如,使用C#可以编写动态Web页面、Windows Presentation
Foundation应用程序、XML
Web服务、分布式应用程序的组件、数据库访问组件、传统的Windows桌面应用程序,甚或可以联机脱机运行的新型智能客户端应用程序。本书介绍.NET
Framework 4.5。如果读者使用以前的版本编码,本书的一些章节就不适用。本书将标注出专用于.NET Framework
4.5的新增内容。
不要被这个架构名称中的.NET所迷惑,认为这是一个只关注Internet的架构。这个名称中的.NET仅强调Microsoft相信分布式应用程序是未来的趋势,即处理过程分布在客户端和服务器上。理解C#不仅仅是编写Internet或与网络能识别的应用程序的一种语言也很重要。它还提供了一种编写Windows平台上几乎任何类型的软件或组件的方式。另外,C#和.NET都对开发人员编写程序的方式进行了革新,更易于实现在Windows上的编程。
那么,.NET和C#有什么优点?
.NET和C#的重要性
为了理解.NET的重要性,了解一下过去18年来出现的许多Windows技术的本质会有一定的帮助。尽管所有Windows操作系统在表面上看来完全不同,但从Windows
3.11992年引入到Windows 8和Windows Server 2012,在内核上都有相同的Windows
API用于Windows桌面和服务器应用程序。在我们转而使用Windows的新版本时,虽然API中增加了非常多的新功能,但这是一个演化和扩展API的过程,并非替换它。
开发Windows软件所使用的许多技术和架构也是这样。例如,组件对象模型Component Object
Model,COM源自对象链接和嵌入Object Linking and
Embedding,OLE。最初,因为它在很大程度上仅把不同类型的Office文档链接在一起,所以利用它,例如,可以把一个小型Excel电子表格放在Word文档中。之后,它逐步演化为COM、DCOMDistributed
COM,分布式组件对象模型和最终的COM+。COM+是一种复杂的技术,它是几乎所有组件通信方式的基础,实现了事务处理、消息传输服务和对象池。
Microsoft选择这种软件革新方法的原因非常明显:它关注后向兼容性。在过去的这些年中,人们编写了大量Windows第三方软件,如果Microsoft每次都引入一项不遵循现有基本代码的新技术,Windows就不会获得今天的成功。
后向兼容性是Windows技术的极其重要的功能,也是Windows平台的一个长处。但它有一个很大的缺点:每次某项技术更新换代,增加了新功能后,它都会比以前更复杂。
很明显,对此必须进行改进。Microsoft不可能一直扩展相同的开发工具和语言,总是使它们越来越复杂,既要保证能跟上最新硬件的发展步伐,又要与20世纪90年代初开始流行的Windows产品向后兼容。如果要得到一系列简单而专业的语言、环境和开发工具,让开发人员轻松地编写一流的软件,就需要一个新的开端。
这就是C#和.NET的作用。粗略地说,.NET是一种在Windows平台上编程的架构——
一种API。C#是一种从头开始设计的用于.NET的语言,它可以利用.NET
Framework及其开发环境中的所有新增功能,以及在最近25年来出现的面向对象的编程方法。
在继续介绍前,必须先说明,后向兼容性并没有在这个演化进程中丧失。现有的程序仍可以使用,.NET也兼容现有的软件。现在,在Windows上软件组件之间的通信几乎都使用COM实现。因此,.NET能够提供现有COM组件的包装器wrapper,以便.NET组件与之通信。
我们不需要学习了C#才能给.NET编写代码,因为Microsoft已经扩展了C++,还对Visual
Baisc进行了很多改进,把它转变成了功能更强大的语言,并允许把用这些语言编写的代码用于.NET环境。但其他这些语言都因有多年演化的遗留痕迹,并非一开始就用现在的技术来编写,导致它们不能用于.NET环境。
本书将介绍C#编程技术,同时提供.NET体系结构工作原理的必要背景知识。我们不仅会介绍C#语言的基础,还会给出使用各种相关技术的应用程序对应的示例,包括数据库访问、动态的Web页面、高级的图形和目录访问等。
Windows API自从1993年发布的Windows NT以来一直在演化和扩展,但自从2002年以来,.NET
Framework对程序编写方式进行了重大的修改,2012年又进行了一次很大的改动。每10年就会发生这种改变吗?Windows
8现在提供了一种新的API:用于Windows
Store应用程序的Windows运行库WinRT。这个运行库是一个本机API类似于Windows
API,它没有把.NET运行库作为其核心,但提供了基于.NET理念的非常好的新功能。Windows
8包含这个API的第一个版本,可用于现代模式的应用程序。尽管它不基于.NET,但仍可以将.NET的一个子集应用于Windows
Store应用程序,用C#编写该应用程序。这个新的运行库在未来的几年中会演化,随Windows的未来版本一起发布。本书也讨论了如何使用C#和WinRT编写Windows
Store应用程序。
.NET的优点
前面阐述了.NET的优点,但并没有说它会使开发人员的工作更易完成。本节将简要讨论.NET的改进功能。
● 面向对象编程:.NET Framework和C#从一开始就完全基于面向对象的原则。
● 优秀的设计:一个基类库,它以一种非常直观的方式设计出来。
● 语言无关性:在.NET中,Visual
Baisc、C#和托管C++等语言都可以编译为通用的中间语言Intermediate
Language。这说明,语言可以用以前没有的方式交互操作。
●
对动态Web页面更好的支持:虽然经典ASP具有很大的灵活性,但效率不是很高,这是因为它使用了解释性的脚本语言,且缺乏面向对象的设计,从而导致ASP代码比较混乱。.NET使用ASP.NET,为Web页面提供了一种集成支持。使用ASP.NET,可以编译页面中的代码,这些代码还可以使用.NET能识别的高级语言来编写,如C#或Visual
Basic 2010。.NET现在还添加了对最新Web技术的重要支持,如Ajax和jQuery。
●
高效的数据访问:一组.NET组件,统称为ADO.NET,提供了对关系数据库和各种数据源的高效访问。这些组件也可用于访问文件系统和目录。尤其是,.NET内置了XML支持,可以处理从非Windows平台导入或导出的数据。
●
代码共享:.NET引入了程序集的概念,替代了传统的DLL,可以完美无暇地改进代码在应用程序之间的共享方式。程序集是解决版本冲突的正式设备,程序集的不同版本可以并存。
●
增强的安全性:每个程序集还可以包含内置的安全信息,这些信息可以准确地指出谁或哪种类型的用户或进程可以调用什么类的哪些方法。这样就可以非常准确地控制用户部署的程序集的使用方式。
●
对安装没有任何影响:有两种类型的程序集,分别是共享程序集和私有程序集。共享程序集是可用于所有软件的公共库,而私有程序集只用于特殊软件。由于私有程序集完全自包含,所以安装过程非常简单。没有注册表项,只需要把相应的文件放在文件系统的相应文件夹中即可。
● Web服务的支持:.NET完全集成了对开发Web服务的支持,用户可以轻松地开发任何类型的应用程序。
● Visual Studio 2012:.NET附带了一个Visual Studio
2012开发环境,它同样可以很好地利用C++、C#、Visual Basic 2012和ASP.NET或XML进行编码。Visual
Studio 2012集成了这个IDE所有以前版本中的各种语言专用环境中的所有最佳功能。
● C#:是使用.NET的一种面向对象的强大且流行的语言。
第1章将详细讨论.NET体系结构的优点。
.NET Framework 4.5中的新增特性
.NET Framework的第1版1.0版在2002年发布,赢得了许多人的喝彩。.NET Framework
2.0在2005年发布,是该架构的一个主要版本。2.0版本的主要新特性是C#和运行库中对泛型的支持为泛型修改了IL代码、新类和接口。.NET
3.0以2.0运行库为基础,引入了创建UI的新方式WPF和XAML,基于矢量的图形替代了基于像素的图形和一个新的通信技术WCF。.NET
3.5和C# 3.0引入了LINQ,这是可用于所有数据源的查询语法。.NET Framework
4是该产品的另一个重要的版本,也引入了运行库的一个新版本4.0和C#的新版本4.0,提供了动态语言集成和大量用于并行编程的新库。.NET
Framework 4.5基于4.0运行库的更新版本,包含了许多重要的新功能。
对于.NET
Framework的每个版本,Microsoft总是试图确保对已开发出的代码进行尽可能少的不兼容的更改。到目前为止,Microsoft在这方面做得很成功。
下面将详细描述C# 2012和.NET Framework 4.5中的一些新变化。
异步编程
阻塞UI对用户并不友好,如果UI不响应,用户就会不耐烦。也许读者在Visual Studio中也有这种经历。而Visual
Studio在这方面好了许多,在许多情形下响应得更快。
.NET Framework总是提供方法的异步调用。但是,使用同步方法比调用其异步变体容易得多。这在C#
5.0版本中有了改变。异步编程与编写同步程序一样容易。新的C#关键字基于自从.NET
4.0以来就有的.NET并行库,现在该语言提供了高效功能。
Windows Store应用程序和Windows运行库
Windows Store应用程序可以使用C#、Windows运行库和.NET
Framework的一个子集编写,Windows运行库是一个新的本机API,提供了类似于.NET的类、方法、属性和事件。使用语言投射功能,改善了.NET运行库。在.NET
4.5中,.NET 4.0运行库进行了就地更新。
数据访问的改善
ADO.NET Entity Framework提供了重要的新功能。其版本从.NET 4.0的4.0改为.NET
4.5的5.0。.NET 4.0发布后,Entity
Framework已经在4.1、4.2和4.3中接受了更新。现在新功能,例如Code
First、空间类型、使用枚举、表值功能等,都可以使用了。
WPF的改善
WPF进行了改进,以编写Windows桌面应用程序。现在可以在非UI线程中填充集合,功能区控件现在是架构的一部分,通过事件的弱引用也更容易实现,数据验证可以用INotifyDataErrorInfo接口异步完成;实时绘图功能可以方便地动态排序、分组修改了的数据。
ASP.NET MVC
Visual Studio 2010包含ASP.NET MVC 2.0。Visual Studio
2012发布后,就可以使用ASP.NET MVC 4.0了。ASP.NET
MVC提供了许多开发人员期待的、使用模型-视图-控制器来创建ASP.NET应用程序的方式。ASP.NET
MVC在开发人员构建的应用程序中提供了可测试性、灵活性和可维护性。ASP.NET MVC不是ASP.NET
Web窗体的替代品,而只是构建应用程序的另一种方式。
C#的优点
C#在某种程度上可以看作是.NET面向Windows环境的一种编程语言。在过去的15年中,Microsoft给Windows和
Windows API添加了许多功能,Visual Baisc 2010和C++也进行了许多扩展。虽然Visual
Baisc和C++最终已成为非常强大的语言,但这两种语言也存在问题,因为它们保留了原来的一些遗留内容。
对于Visual Basic
6及其早期版本,它的主要优点是很容易理解,许多编程工作都很容易完成,从很大程度上对开发人员隐藏了Windows
API和COM组件结构的详细信息。其缺点是因为Visual
Basic从来没有实现真正意义上的面向对象,所以大型应用程序很难分解和维护。另外,因为Visual
Basic的语法继承自BASIC的早期版本BASIC主要是为了让刚入门的程序员更容易理解,而不是为了编写大型商业应用程序,所以不能真正成为结构良好或面向对象的编程语言。
另一方面,C++基于ANSI
C++语言定义。它与ANSI不完全兼容,因为Microsoft在ANSI定义标准化之前编写其C++编译器,但它已经相当接近。但是,这导致了两个问题。首先,ANSI
C++是在十几年前的技术条件下开发的,因此它不支持现在的概念如Unicode字符串和生成XML文档,某些古老的语法结构是为以前的编译器设计的如成员函数的声明和定义是分开的。其次,Microsoft同时还试图把C++演变为一种用于在Windows上执行高性能任务的语言,为此不得不在语言中添加大量Microsoft专用的关键字和各种库。其结果是在Windows上,该语言非常杂乱。让C++开发人员描述字符串有多少种定义就可以证明这一点:char*、LPTSTR、string、CStringMFC版本、CStringWTL版本、wchar_t*、OLECHAR*等。
现在进入.NET时代——
一种全新的环境,它对这两种语言都进行了新的扩展。Microsoft给C++添加了许多Microsoft专用的关键字,并把Visual
Baisc演变为Visual Baisc 2012,保留了一些基本的Visual Baisc语法,但在设计上完全不同于原始Visual
Basic,从实际应用的角度来看,Visual Baisc 2012是一种新语言。
在这里,Microsoft决定给开发人员提供另一个选择——
专门用于.NET、具有新起点的一种语言,即C#。Microsoft在正式场合把C#描述为一种简单、现代、面向对象、类型非常安全、派生自C和C++的编程语言。大多数独立的评论员对C#的描述改为“派生自C、C++和Java”。这种描述在技术上非常准确,但没有表达出该语言的真正优点。从语法上看,C#非常类似于C++和Java,许多关键字都相同,C#也使用类似于C++和Java的块结构,并用花括号{}来标记代码块,用分号分隔各行语句。对C#代码的第一印象是它非常类似于C++或Java代码。但在这些表面的类似性后面,C#学习起来要比C++容易得多,但比Java难一些。其设计比其他语言更适合现代开发工具,它同时具有Visual
Basic的易用性,以及C++的高性能、低级内存访问。C#包括以下一些功能:
● 完全支持类和面向对象编程,包括接口和实现继承、虚函数和运算符重载。
● 一致且定义完善的基本类型集。
● 对自动生成XML文档的内置支持。
● 自动清理动态分配的内存。
●
可以用用户定义的属性来标记类或方法。这可以用于文档,对编译有一定的影响例如,把方法标记为只在调试版本中编译。
● 可以完全访问.NET基类库,并易于访问Windows API如果实际需要它,这就不常见。
● 可以使用指针和直接访问内存,但C#语言可以在没有它们的条件下访问内存。
● 以Visual Basic的风格支持属性和事件。
●
改变编译器选项,可以把程序编译为可执行文件或.NET组件库,该组件库可以用与ActiveX控件COM组件相同的方式由其他代码调用。
● C#可以用于编写ASP.NET动态Web页面和XML Web服务。
应该指出,对于上述大多数功能,Visual Basic 2012和Managed
C++也具备。事实上,虽然C#从一开始就使用.NET,但对.NET功能的支持不仅更完整,而且在比其他语言更合适的语法环境中提供了这些功能。C#语言本身非常类似于Java,但其中有一些改进,尤其是,Java并不应用于.NET环境。
在结束这个主题前,还要指出C#的两个局限性。一方面是该语言不适用于编写时间急迫或性能非常高的代码,例如一个要占用1000或1050个机器周期的循环,并在不需要这些资源时,立即清理它们。在这方面,C++可能仍是所有低级语言中的佼佼者。另一方面是C#缺乏性能极高的应用程序所需要的关键功能,包括能够指定那些保证在代码的特定地方运行的内联函数和析构函数。但这类应用程序非常少。
编写和运行C#代码的环境
.NET Framework 4.5运行在Windows Vista78和服务器操作系统Windows Server 2008、
2008 R2和2012上。要使用.NET编写代码,需要安装.NET 4.5 SDK。
此外,除非要使用文本编辑器或其他第三方开发环境来编写C#代码,否则用户几乎肯定也希望使用Visual Studio
2012。运行托管代码不需要安装完整的SDK,但需要.NET运行库。需要把.NET运行库和代码分布到还没有安装它的客户端上。
本书内容
本书首先在第1章介绍.NET的整体体系结构,给出编写托管代码所需要的背景知识,此后本书分几部分介绍C#语言及其在各个领域中的应用。
第Ⅰ部分—— C#语言
本部分给出C#语言的背景知识。尽管这一部分假定读者是有经验的编程人员,但它没有假设读者拥有任何特殊语言的知识。首先介绍
C#的基本语法和数据类型,再介绍C#的面向对象功能,之后是C#中的一些高级编程主题。
第Ⅱ部分—— Visual Studio
本部分介绍全世界C#开发人员都使用的主要IDE:Visual Studio 2012。本部分的两章探讨使用工具构建基于.NET
Framework 4.5的应用程序的最佳方式,另外,本部分还讨论项目的部署。
第Ⅲ部分—— 基础
本部分介绍在.NET环境中编程的规则。特别是安全性、线程、本地化、事务、构建Windows服务的方式,以及将自己的库生成为程序集的方式等主题。其中一部分介绍如何使用平台调用和COM交互操作功能,与本地代码和程序集进行交互操作。本部分还讨论了Windows运行库与.NET的区别,以及如何编写Windows
8模式的程序。
第Ⅳ部分—— 数据
本部分介绍如何使用ADO.NET访问数据库,学习ADO.NET Entity
Framework。我们可以使用核心ADO.NET获得最佳性能,而使用ADO.NET Entity
Framework可以方便地把对象映射到关系上。还讨论了现在可以使用的Model First、Database First和Code
First编程模型。我们还详细说明.NET对XML的支持,以及如何使用LINQ查询XML数据源。
第Ⅴ部分—— 显示
本部分首先阐述如何编写基于Windows Presentation
Foundation的应用程序,介绍不同的控件类型、样式、资源和数据绑定,以及如何创建固定的和流畅的文档并打印出来。本部分还会介绍如何创建Windows
Store应用程序,使用图片生成更漂亮的UI、网格,以及与其他应用程序交互操作的协定。最后讨论ASP.NET提供的许多新功能,用ASP.NET
Web窗体创建Web站点、ASP.NET MVC和动态数据。
第Ⅵ部分——通信
这一部分介绍通信,主要论述独立于平台使用Windows Communication
FoundationWCF进行通信的服务,以及使用WCF数据服务访问数据。通过消息队列,揭示了断开连接的异步通信。本部分还介绍如何利用Windows
Workflow FoundationWF和对等网络。
如何下载本书的示例代码
在读者学习本书中的示例时,可以手工输入所有的代码,也可以使用本书附带的源代码文件。本书使用的所有源代码都可以从本书合作站点上下载。登录到站点上,使用Search工具或书名列表就可以找到本书。接着单击本书细目页面上的Download
Code链接,就可以获得所有的源代码。
注释:
许多图书的书名都很相似,所以通过ISBN查找本书是最简单的,本书的ISBN是978-1-118-31442-5。
在下载了代码后,只需用自己喜欢的解压缩软件对它进行解压缩即可。另外,查看本书和其他Wrox图书的所有代码。
勘误表
尽管我们已经尽了各种努力来保证文章或代码中不出现错误,但是错误总是难免的,如果你在本书中找到了错误,例如拼写错误或代码错误,请告诉我们,我们将非常感激。通过勘误表,可以让其他读者避免受挫,当然,这还有助于提供更高质量的信息。
要在网站上找到本书的勘误表,通过Search工具或书名列表查找本书,然后在本书的细目页面上,单击Book
Errata链接。在这个页面上可以查看Wrox编辑已提交和粘贴的所有勘误项。完整的图书列表还包括每本书的勘误表,。
如果在Book
Errata页面上没有看到你找出的错误,,填写表单,发电子邮件,我们就会检查你的信息,如果是正确的,就在本书的勘误表中粘贴一个消息,我们将在本书的后续版本中采用。
p2p.wrox.com
P2P邮件列表是为作者和读者之间的讨论而建立的。读者可以在p2p.wrox.com上加入P2P论坛。该论坛是一个基于Web的系统,用于传送与Wrox图书相关的信息和相关技术,与其他读者和技术用户交流。该论坛提供了订阅功能,当论坛上有新帖子时,会给你发送你选择的主题。Wrox作者、编辑和其他业界专家和读者都会在这个论坛上进行讨论。
在上有许多不同的论坛,帮助读者阅读本书,在读者开发自己的应用程序时,也可以从这个论坛中获益。要加入这个论坛,必须执行下面的步骤:
1 进入p2p.wrox.com,单击Register链接。
2 阅读其内容,单击Agree按钮。
3 提供加入论坛所需的信息及愿意提供的可选信息,单击Submit按钮。
4 然后就可以收到一封电子邮件,其中的信息描述了如何验证账户,完成加入过程。
提示:
不加入P2P也可以阅读论坛上的信息,但只有加入论坛后,才能发送自己的信息。
加入论坛后,就可以发送新信息,回应其他用户的帖子。可以随时在Web上阅读信息。如果希望某个论坛给自己发送新信息,可以在论坛列表中单击该论坛对应的Subscribe
to this Forum图标。
对于如何使用Wrox P2P的更多信息,可阅读P2P
FAQ,了解论坛软件的工作原理,以及许多针对P2P和Wrox图书的常见问题解答。要阅读FAQ,可以单击任意P2P页面上的FAQ链接。