第Ⅰ部分 C# 語 言
第1章 .NET應用程序體系結(jié)構(gòu) 2
1.1 選擇技術(shù) 2
1.2 回顧.NET歷史 3
1.2.1
C# 1.0 ——
一種新語言 3
1.2.2
帶有泛型的C# 2和.NET 2 5
1.2.3
.NET 3.0—— Windows
Presentation Foundation 5
1.2.4
C# 3和.NET 3.5—— LINQ 5
1.2.5
C# 4和.NET 4.0—— dynamic
和TPL 6
1.2.6
C# 5和異步編程 6
1.2.7
C# 6和.NET Core 7
1.2.8
選擇技術(shù),繼續(xù)前進 8
1.3
.NET 2015 8
1.3.1
.NET Framework 4.6 9
1.3.2
.NET Core 1.0 10
1.3.3
程序集 11
1.3.4
NuGet 包 12
1.3.5
公共語言運行庫 13
1.3.6
.NET Native 14
1.3.7
Windows 運行庫 14
1.4
Hello, World 15
1.5 用.NET 4.6編譯 16
1.6 用.NET Core
CLI編譯 17
1.6.1
設(shè)置環(huán)境 18
1.6.2
構(gòu)建應用程序 18
1.6.3
打包和發(fā)布應用程序 21
1.7 應用程序類型和技術(shù) 22
1.7.1
數(shù)據(jù)訪問 22
1.7.2
Windows桌面應用程序 23
1.7.3
UWP 24
1.7.4
SOAP服務和WCF 24
1.7.5
Web服務和ASP.NET Web
API 24
1.7.6
WebHooks和SignalR 25
1.7.7
Windows服務 25
1.7.8
Web應用程序 25
1.7.9
Microsoft Azure 26
1.8 開發(fā)工具 27
1.8.1
Visual Studio Community 27
1.8.2
Visual Studio Professional with
MSDN 27
1.8.3
Visual Studio Enterprise with
MSDN 27
1.8.4
Visual Studio Code 28
1.9 小結(jié) 28
第2章 核心C# 29
2.1
C#基礎(chǔ) 30
2.2 用Visual
Studio創(chuàng)建Hello,
World! 30
2.2.1
創(chuàng)建解決方案 30
2.2.2
創(chuàng)建新項目 31
2.2.3
編譯和運行程序 33
2.2.4
代碼的詳細介紹 35
2.3 變量 36
2.3.1
初始化變量 37
2.3.2
類型推斷 38
2.3.3
變量的作用域 39
2.3.4
常量 41
2.4 預定義數(shù)據(jù)類型 41
2.4.1
值類型和引用類型 42
2.4.2
.NET類型 43
2.4.3
預定義的值類型 43
2.4.4
預定義的引用類型 46
2.5 程序流控制 48
2.5.1
條件語句 48
2.5.2
循環(huán) 51
2.5.3
跳轉(zhuǎn)語句 55
2.6 枚舉 55
2.7 名稱空間 57
2.7.1
using語句 58
2.7.2
名稱空間的別名 59
2.8
Main()方法 60
2.9 使用注釋 61
2.9.1
源文件中的內(nèi)部注釋 61
2.9.2
XML文檔 62
2.10
C#預處理器指令 63
2.10.1
#define和#undef 63
2.10.2
#if、#elif、#else和#endif 64
2.10.3
#warning和 # error 65
2.10.4
#region和#endregion 65
2.10.5
#line 65
2.10.6
#pragma 65
2.11
C#編程準則 66
2.11.1
關(guān)于標識符的規(guī)則 66
2.11.2
用法約定 67
2.12
小結(jié) 70
第3章 對象和類型 71
3.1 創(chuàng)建及使用類 72
3.2 類和結(jié)構(gòu) 72
3.3 類 73
3.3.1
字段 73
3.3.2
屬性 74
3.3.3
方法 76
3.3.4
構(gòu)造函數(shù) 81
3.3.5
只讀成員 85
3.3.6
只讀字段 85
3.4 匿名類型 88
3.5 結(jié)構(gòu) 89
3.5.1
結(jié)構(gòu)是值類型 90
3.5.2
結(jié)構(gòu)和繼承 91
3.5.3
結(jié)構(gòu)的構(gòu)造函數(shù) 91
3.6 按值和按引用傳遞參數(shù) 91
3.6.1
ref參數(shù) 92
3.6.2
out參數(shù) 93
3.7 可空類型 94
3.8 枚舉 95
3.9 部分類 97
3.10
擴展方法 99
3.11
Object類 100
3.12
小結(jié) 101
第4章 繼承 102
4.1 繼承 102
4.2 繼承的類型 102
4.2.1
多重繼承 103
4.2.2
結(jié)構(gòu)和類 103
4.3 實現(xiàn)繼承 103
4.3.1
虛方法 104
4.3.2
多態(tài)性 106
4.3.3
隱藏方法 107
4.3.4
調(diào)用方法的基類版本 108
4.3.5
抽象類和抽象方法 109
4.3.6
密封類和密封方法 110
4.3.7
派生類的構(gòu)造函數(shù) 110
4.4 修飾符 112
4.4.1
訪問修飾符 113
4.4.2
其他修飾符 113
4.5 接口 114
4.5.1
定義和實現(xiàn)接口 115
4.5.2
派生的接口 118
4.6
is和as運算符 120
4.7 小結(jié) 121
第5章 托管和非托管的資源 122
5.1 資源 122
5.2 后臺內(nèi)存管理 123
5.2.1
值數(shù)據(jù)類型 123
5.2.2
引用數(shù)據(jù)類型 125
5.2.3
垃圾回收 127
5.3 強引用和弱引用 129
5.4 處理非托管的資源 130
5.4.1
析構(gòu)函數(shù)或終結(jié)器 130
5.4.2
IDisposable接口 131
5.4.3
using語句 132
5.4.4
實現(xiàn)IDisposable接口和
析構(gòu)函數(shù) 133
5.4.5
IDisposable和終結(jié)器的
規(guī)則 134
5.5 不安全的代碼 135
5.5.1
用指針直接訪問內(nèi)存 135
5.5.2
指針示例:
PointerPlayground 143
5.5.3
使用指針優(yōu)化性能 147
5.6 平臺調(diào)用 150
5.7 小結(jié) 154
第6章 泛型 155
6.1 泛型概述 155
6.1.1
性能 156
6.1.2
類型安全 157
6.1.3
二進制代碼的重用 157
6.1.4
代碼的擴展 158
6.1.5
命名約定 158
6.2 創(chuàng)建泛型類 158
6.3 泛型類的功能 162
6.3.1
默認值 163
6.3.2
約束 163
6.3.3
繼承 166
6.3.4
靜態(tài)成員 167
6.4 泛型接口 167
6.4.1
協(xié)變和抗變 168
6.4.2
泛型接口的協(xié)變 169
6.4.3
泛型接口的抗變 170
6.5 泛型結(jié)構(gòu) 171
6.6 泛型方法 173
6.6.1
泛型方法示例 174
6.6.2
帶約束的泛型方法 175
6.6.3
帶委托的泛型方法 176
6.6.4
泛型方法規(guī)范 176
6.7 小結(jié) 178
第7章 數(shù)組和元組 179
7.1 同一類型和不同類型的多個
對象 179
7.2 簡單數(shù)組 180
7.2.1
數(shù)組的聲明 180
7.2.2
數(shù)組的初始化 180
7.2.3
訪問數(shù)組元素 181
7.2.4
使用引用類型 182
7.3 多維數(shù)組 183
7.4 鋸齒數(shù)組 184
7.5
Array類 185
7.5.1
創(chuàng)建數(shù)組 185
7.5.2
復制數(shù)組 186
7.5.3
排序 187
7.6 數(shù)組作為參數(shù) 190
7.6.1
數(shù)組協(xié)變 190
7.6.2
ArraySegment 191
7.7 枚舉 191
7.7.1
IEnumerator接口 192
7.7.2
foreach語句 192
7.7.3
yield語句 193
7.8 元組 197
7.9 結(jié)構(gòu)比較 198
7.10
小結(jié) 201
第8章 運算符和類型強制轉(zhuǎn)換
202
8.1 運算符和類型轉(zhuǎn)換 202
8.2 運算符 203
8.2.1
運算符的簡化操作 204
8.2.2
運算符的優(yōu)先級和關(guān)聯(lián)性 212
8.3 類型的安全性 213
8.3.1
類型轉(zhuǎn)換 213
8.3.2
裝箱和拆箱 217
8.4 比較對象的相等性 218
8.4.1
比較引用類型的相等性 218
8.4.2
比較值類型的相等性 219
8.5 運算符重載 219
8.5.1
運算符的工作方式 220
8.5.2
運算符重載的示例:Vector
結(jié)構(gòu) 221
8.5.3
比較運算符的重載 225
8.5.4
可以重載的運算符 227
8.6 實現(xiàn)自定義的索引運算符
228
8.7 實現(xiàn)用戶定義的類型強制
轉(zhuǎn)換 230
8.7.1
實現(xiàn)用戶定義的類型強制
轉(zhuǎn)換 231
8.7.2
多重類型強制轉(zhuǎn)換 237
8.8 小結(jié) 240
第9章 委托、lambda表達式和
事件 241
9.1 引用方法 241
9.2 委托 242
9.2.1
聲明委托 242
9.2.2
使用委托 243
9.2.3
簡單的委托示例 246
9.2.4
Action和Func
委托 248
9.2.5
BubbleSorter示例 248
9.2.6
多播委托 251
9.2.7
匿名方法 254
9.3
lambda表達式 255
9.3.1
參數(shù) 256
9.3.2
多行代碼 256
9.3.3
閉包 257
9.4 事件 258
9.4.1
事件發(fā)布程序 258
9.4.2
事件偵聽器 260
9.4.3
弱事件 261
9.5 小結(jié) 263
第10章 字符串和正則表達式 264
10.1
System.String類 265
10.1.1
構(gòu)建字符串 266
10.1.2
StringBuilder成員 269
10.2
字符串格式 270
10.2.1
字符串插值 270
10.2.2
日期時間和數(shù)字的格式 272
10.2.3
自定義字符串格式 274
10.3
正則表達式 275
10.3.1
正則表達式概述 275
10.3.2
RegularExpressionsPlayaround
示例 276
10.3.3
顯示結(jié)果 279
10.3.4
匹配、組和捕獲 280
10.4
小結(jié) 283
第11章 集合 284
11.1
概述 284
11.2
集合接口和類型 285
11.3
列表 285
11.3.1
創(chuàng)建列表 287
11.3.2
只讀集合 294
11.4
隊列 294
11.5
棧 298
11.6
鏈表 300
11.7
有序列表 305
11.8
字典 306
11.8.1
字典初始化器 307
11.8.2
鍵的類型 307
11.8.3
字典示例 308
11.8.4
Lookup類 312
11.8.5
有序字典 313
11.9
集 313
11.10
性能 315
11.11
小結(jié) 316
第12章 特殊的集合 317
12.1
概述 317
12.2
處理位 317
12.2.1
BitArray類 318
12.2.2
BitVector32結(jié)構(gòu) 320
12.3
可觀察的集合 323
12.4
不變的集合 324
12.4.1
使用構(gòu)建器和不變的
集合 327
12.4.2
不變集合類型和接口 327
12.4.3
使用LINQ和不變的
數(shù)組 328
12.5
并發(fā)集合 328
12.5.1
創(chuàng)建管道 329
12.5.2
使用BlockingCollection 332
12.5.3
使用Concurrent-
Dictionary 333
12.5.4
完成管道 334
12.6
小結(jié) 335
第13章 LINQ 337
13.1
LINQ概述 337
13.1.1
列表和實體 338
13.1.2
LINQ查詢 341
13.1.3
擴展方法 342
13.1.4
推遲查詢的執(zhí)行 343
13.2
標準的查詢操作符 345
13.2.1
篩選 347
13.2.2
用索引篩選 347
13.2.3
類型篩選 348
13.2.4
復合的from子句 348
13.2.5
排序 349
13.2.6
分組 350
13.2.7
LINQ 查詢中的變量 351
13.2.8
對嵌套的對象分組 352
13.2.9
內(nèi)連接 353
13.2.10
左外連接 355
13.2.11
組連接 355
13.2.12
集合操作 358
13.2.13
合并 360
13.2.14
分區(qū) 360
13.2.15
聚合操作符 362
13.2.16
轉(zhuǎn)換操作符 363
13.2.17
生成操作符 365
13.3
并行LINQ 365
13.3.1
并行查詢 365
13.3.2
分區(qū)器 366
13.3.3
取消 367
13.4
表達式樹 367
13.5
LINQ提供程序 370
13.6
小結(jié) 371
第14章 錯誤和異常 372
14.1
簡介 372
14.2
異常類 373
14.3
捕獲異常 374
14.3.1
實現(xiàn)多個catch塊 377
14.3.2
在其他代碼中捕獲異常 380
14.3.3
System.Exception屬性 380
14.3.4
異常過濾器 381
14.3.5
重新拋出異常 382
14.3.6
沒有處理異常時發(fā)生的
情況 386
14.4
用戶定義的異常類 386
14.4.1
捕獲用戶定義的異常 387
14.4.2
拋出用戶定義的異常 389
14.4.3
定義用戶定義的異常類 392
14.5
調(diào)用者信息 394
14.6
小結(jié) 396
第15章 異步編程 397
15.1
異步編程的重要性 397
15.2
異步模式 398
15.2.1
同步調(diào)用 405
15.2.2
異步模式 406
15.2.3
基于事件的異步模式 407
15.2.4
基于任務的異步模式 408
15.3
異步編程的基礎(chǔ) 410
15.3.1
創(chuàng)建任務 410
15.3.2
調(diào)用異步方法 411
15.3.3
延續(xù)任務 411
15.3.4
同步上下文 412
15.3.5
使用多個異步方法 412
15.3.6
轉(zhuǎn)換異步模式 413
15.4
錯誤處理 414
15.4.1
異步方法的異常處理 415
15.4.2
多個異步方法的異常
處理 415
15.4.3
使用AggregateException
信息 416
15.5
取消 417
15.5.1
開始取消任務 417
15.5.2
使用框架特性取消任務 417
15.5.3
取消自定義任務 418
15.6
小結(jié) 419
第16章 反射、元數(shù)據(jù)和動態(tài)編程
420
16.1
在運行期間檢查代碼和
動態(tài)編程 420
16.2
自定義特性 421
16.2.1
編寫自定義特性 422
16.2.2
自定義特性示例:
WhatsNewAttributes 425
16.3
反射 428
16.3.1
System.Type類 428
16.3.2
TypeView示例 430
16.3.3
Assembly類 433
16.3.4
完成WhatsNewAttributes
示例 434
16.4
為反射使用動態(tài)語言擴展 438
16.4.1
創(chuàng)建Calculator庫 438
16.4.2
動態(tài)實例化類型 440
16.4.3
用反射API調(diào)用成員 442
16.4.4
使用動態(tài)類型調(diào)用成員 442
16.5
dynamic類型 443
16.6
DLR 448
16.7
包含DLR ScriptRuntime 449
16.8
DynamicObject和
ExpandoObject 451
16.8.1
DynamicObject 451
16.8.2
ExpandoObject 453
16.9
小結(jié) 455
第Ⅱ部分 .NET Core與Windows
Runtime
第17章 Visual Studio 2015 458
17.1
使用Visual Studio 2015 458
17.1.1
Visual Studio的版本 461
17.1.2
Visual Studio設(shè)置 461
17.2
創(chuàng)建項目 462
17.2.1
面向多個版本的.NET
Framework 463
17.2.2
選擇項目類型 464
17.3
瀏覽并編寫項目 469
17.3.1
構(gòu)建環(huán)境:CLI和
MSBuild 469
17.3.2
Solution Explorer 470
17.3.3
使用代碼編輯器 477
17.3.4
學習和理解其他窗口 481
17.3.5
排列窗口 485
17.4
構(gòu)建項目 485
17.4.1
構(gòu)建、編譯和生成代碼 486
17.4.2
調(diào)試版本和發(fā)布版本 486
17.4.3
選擇配置 488
17.4.4
編輯配置 488
17.5
調(diào)試代碼 490
17.5.1
設(shè)置斷點 490
17.5.2
使用數(shù)據(jù)提示和調(diào)試器可
視化工具 491
17.5.3
Live Visual Tree 492
17.5.4
監(jiān)視和修改變量 493
17.5.5
異常 494
17.5.6
多線程 495
17.6
重構(gòu)工具 495
17.7
體系結(jié)構(gòu)工具 497
17.7.1
代碼地圖 498
17.7.2
層關(guān)系圖 499
17.8
分析應用程序 500
17.8.1
診斷工具 500
17.8.2
Concurrency Visualizer 504
17.8.3
代碼分析器 505
17.8.4
Code Metrics 506
17.9
小結(jié) 506
第18章 .NET編譯器平臺 507
18.1
簡介 507
18.2
編譯器管道 509
18.3
語法分析 509
18.3.1
使用查詢節(jié)點 515
18.3.2
遍歷節(jié)點 517
18.4
語義分析 519
18.4.1
編譯 520
18.4.2
語義模型 521
18.5
代碼轉(zhuǎn)換 522
18.5.1
創(chuàng)建新樹 522
18.5.2
使用語法重寫器 524
18.6
Visual Studio Code重構(gòu) 529
18.6.1
VSIX包 529
18.6.2
代碼重構(gòu)提供程序 532
18.7
小結(jié) 537
第19章 測試 538
19.1
概述 538
19.2
使用MSTest進行單元測試 539
19.2.1
使用MSTest創(chuàng)建單元
測試 539
19.2.2
運行單元測試 541
19.2.3
使用MSTest預期異常 543
19.2.4
測試全部代碼路徑 544
19.2.5
外部依賴 544
19.2.6
Fakes Framework 547
19.2.7
IntelliTest 549
19.3
使用xUnit進行單元測試 549
19.3.1
使用xUnit和.NET Core 550
19.3.2
創(chuàng)建Fact屬性 550
19.3.3
創(chuàng)建Theory屬性 551
19.3.4
用dotnet工具運行單元
測試 552
19.3.5
使用Mocking庫 552
19.4
UI 測試 556
19.5
Web測試 559
19.5.1
創(chuàng)建Web測試 560
19.5.2
運行Web測試 562
19.5.3
Web 負載測試 563
19.6
小結(jié) 565
第20章 診斷和Application
Insights 566
20.1
診斷概述 566
20.2
使用EventSource跟蹤 567
20.2.1
EventSource的簡單用法 568
20.2.2
跟蹤工具 570
20.2.3
派生自EventSource 572
20.2.4
使用注釋和EventSource 574
20.2.5
創(chuàng)建事件清單模式 576
20.2.6
使用活動ID 578
20.3
創(chuàng)建自定義偵聽器 581
20.4
使用Application Insights 582
20.4.1
創(chuàng)建通用Windows應用
程序 583
20.4.2
創(chuàng)建Application Insights
資源 583
20.4.3
配置Windows應用程序 584
20.4.4
使用收集器 586
20.4.5
編寫自定義事件 587
20.5
小結(jié) 588
第21章 任務和并行編程 590
21.1
概述 590
21.2
Parallel類 591
21.2.1
使用Parallel.For()方法
循環(huán) 591
21.2.2
提前停止Parallel.For 594
21.2.3
Parallel.For()的初始化 595
21.2.4
使用Parallel.ForEach()
方法循環(huán) 596
21.2.5
通過Parallel.Invoke()方法
調(diào)用多個方法 597
21.3
任務 597
21.3.1
啟動任務 597
21.3.2
Future——任務的結(jié)果 600
21.3.3
連續(xù)的任務 601
21.3.4
任務層次結(jié)構(gòu) 602
21.3.5
從方法中返回任務 603
21.3.6
等待任務 603
21.4
取消架構(gòu) 604
21.4.1
Parallel.For()方法的取消 604
21.4.2
任務的取消 605
21.5
數(shù)據(jù)流 607
21.5.1
使用動作塊 607
21.5.2
源和目標數(shù)據(jù)塊 608
21.5.3
連接塊 609
21.6
小結(jié) 611
第22章 任務同步 612
22.1
概述 613
22.2
線程問題 613
22.2.1
爭用條件 614
22.2.2
死鎖 616
22.3
lock語句和線程安全 618
22.4
Interlocked類 623
22.5
Monitor類 624
22.6
SpinLock結(jié)構(gòu) 625
22.7
WaitHandle基類 626
22.8
Mutex類 627
22.9
Semaphore類 628
22.10
Events類 630
22.11
Barrier類 633
22.12
ReaderWriterLockSlim類 636
22.13
Timer類 639
22.14
小結(jié) 641
第23章 文件和流 643
23.1
概述 644
23.2
管理文件系統(tǒng) 644
23.2.1
檢查驅(qū)動器信息 645
23.2.2
使用Path類 646
23.2.3
創(chuàng)建文件和文件夾 647
23.2.4
訪問和修改文件的屬性 648
23.2.5
創(chuàng)建簡單的編輯器 649
23.2.6
使用File執(zhí)行讀寫操作 651
23.3
枚舉文件 653
23.4
使用流處理文件 654
23.4.1
使用文件流 655
23.4.2
讀取流 659
23.4.3
寫入流 659
23.4.4
復制流 660
23.4.5
隨機訪問流 661
23.4.6
使用緩存的流 663
23.5
使用讀取器和寫入器 663
23.5.1
StreamReader類 663
23.5.2
StreamWriter類 664
23.5.3
讀寫二進制文件 665
23.6
壓縮文件 666
23.6.1
使用壓縮流 667
23.6.2
壓縮文件 668
23.7
觀察文件的更改 668
23.8
使用內(nèi)存映射的文件 670
23.8.1
使用訪問器創(chuàng)建內(nèi)存映射
文件 671
23.8.2
使用流創(chuàng)建內(nèi)存映射
文件 673
23.9
使用管道通信 675
23.9.1
創(chuàng)建命名管道服務器 675
23.9.2
創(chuàng)建命名管道客戶端 677
23.9.3
創(chuàng)建匿名管道 677
23.10
通過Windows運行庫
使用文件和流 679
23.10.1
Windows應用程序
編輯器 679
23.10.2
把Windows Runtime類
型映射為.NET類型 682
23.11
小結(jié) 684
第24章 安全性 685
24.1
概述 685
24.2
驗證用戶信息 686
24.2.1
使用Windows標識 686
24.2.2
Windows Principal 687
24.2.3
使用聲稱 688
24.3
加密數(shù)據(jù) 690
24.3.1
創(chuàng)建和驗證簽名 692
24.3.2
實現(xiàn)安全的數(shù)據(jù)交換 694
24.3.3
使用RSA簽名和散列 697
24.3.4
實現(xiàn)數(shù)據(jù)的保護 700
24.4
資源的訪問控制 703
24.5
使用證書發(fā)布代碼 706
24.6
小結(jié) 707
第25章 網(wǎng)絡(luò) 708
25.1
網(wǎng)絡(luò) 708
25.2
HttpClient類 709
25.2.1
發(fā)出異步的Get請求 709
25.2.2
拋出異常 710
25.2.3
傳遞標題 711
25.2.4
訪問內(nèi)容 713
25.2.5
用HttpMessageHandler
自定義請求 713
25.2.6
使用SendAsync創(chuàng)建
HttpRequestMessage 714
25.2.7
使用HttpClient和Windows
Runtime 715
25.3
使用WebListener類 717
25.4
使用實用工具類 720
25.4.1
URI 721
25.4.2
IPAddress 722
25.4.3
IPHostEntry 723
25.4.4
Dns 724
25.5
使用TCP 725
25.5.1
使用TCP創(chuàng)建HTTP客戶
程序 726
25.5.2
創(chuàng)建TCP偵聽器 728
25.5.3
創(chuàng)建TCP客戶端 736
25.5.4
TCP和UDP 740
25.6
使用UDP 740
25.6.1
建立UDP接收器 741
25.6.2
創(chuàng)建UDP發(fā)送器 742
25.6.3
使用多播 745
25.7
使用套接字 745
25.7.1
使用套接字創(chuàng)建偵聽器 746
25.7.2
使用NetworkStream和
套接字 749
25.7.3
通過套接字使用讀取器和
寫入器 749
25.7.4
使用套接字實現(xiàn)接收器 751
25.8
小結(jié) 753
第26章 Composition 754
26.1
概述 754
26.2
Composition庫的體系結(jié)構(gòu) 756
26.2.1
使用特性的Composition 757
26.2.2
基于約定的部件注冊 763
26.3
定義協(xié)定 766
26.4
導出部件 770
26.4.1
創(chuàng)建部件 770
26.4.2
使用部件的部件 776
26.4.3
導出元數(shù)據(jù) 776
26.4.4
使用元數(shù)據(jù)進行惰性
加載 778
26.5
導入部件 779
26.5.1
導入連接 782
26.5.2
部件的惰性加載 784
26.5.3
讀取元數(shù)據(jù) 784
26.6
小結(jié) 786
第27章 XML和JSON 787
27.1
數(shù)據(jù)格式 787
27.1.1
XML 788
27.1.2
.NET支持的XML標準 789
27.1.3
在框架中使用XML 790
27.1.4
JSON 790
27.2
讀寫流格式的XML 792
27.2.1
使用XmlReader類
讀取XML 793
27.2.2
使用XmlWriter類 797
27.3
在.NET中使用DOM 798
27.3.1
使用XmlDocument類
讀取 799
27.3.2
遍歷層次結(jié)構(gòu) 799
27.3.3
使用XmlDocument插入
節(jié)點 800
27.4
使用XPathNavigator類 802
27.4.1
XPathDocument類 802
27.4.2
XPathNavigator類 803
27.4.3
XPathNodeIterator類 803
27.4.4
使用XPath導航XML 803
27.4.5
使用XPath評估 804
27.4.6
用XPath修改XML 805
27.5
在XML中序列化對象 806
27.5.1
序列化簡單對象 807
27.5.2
序列化一個對象樹 809
27.5.3
沒有特性的序列化 811
27.6
LINQ to XML 814
27.6.1
XDocument對象 815
27.6.2
XElement對象 816
27.6.3
XNamespace對象 817
27.6.4
XComment對象 818
27.6.5
XAttribute對象 819
27.6.6
使用LINQ查詢XML
文檔 820
27.6.7
查詢動態(tài)的XML文檔 821
27.6.8
轉(zhuǎn)換為對象 822
27.6.9
轉(zhuǎn)換為XML 823
27.7
JSON 824
27.7.1
創(chuàng)建JSON 825
27.7.2
轉(zhuǎn)換對象 825
27.7.3
序列化對象 827
27.8
小結(jié) 828
第28章 本地化 829
28.1
全球市場 830
28.2
System.Globalization名稱
空間 830
28.2.1
Unicode問題 830
28.2.2
區(qū)域性和區(qū)域 831
28.2.3
使用區(qū)域性 835
28.2.4
排序 841
28.3
資源 843
28.3.1
資源讀取器和寫入器 843
28.3.2
使用資源文件生成器 844
28.3.3
通過ResourceManager
使用資源文件 845
28.3.4
System.Resources名稱
空間 846
28.4
使用WPF本地化 846
28.5
使用ASP.NET Core本地化 848
28.5.1
注冊本地化服務 848
28.5.2
注入本地化服務 849
28.5.3
區(qū)域性提供程序 850
28.5.4
在ASP.NET Core中使用
資源 851
28.6
本地化通用Windows平臺 852
28.6.1
給UWP使用資源 853
28.6.2
使用多語言應用程序
工具集進行本地化 854
28.7
創(chuàng)建自定義區(qū)域性 856
28.8
小結(jié) 857
第Ⅲ部分 Windows應用程序
第29章 核心XAML 860
29.1
XAML的作用 860
29.2
XAML概述 861
29.2.1
使用WPF把元素映射到
類上 862
29.2.2
通過通用Windows應用
程序把元素映射到類上 863
29.2.3
使用自定義.NET類 864
29.2.4
把屬性用作特性 865
29.2.5
把屬性用作元素 866
29.2.6
使用集合和XAML 867
29.3
依賴屬性 867
29.3.1
創(chuàng)建依賴屬性 868
29.3.2
值變更回調(diào)和事件 869
29.3.3
強制值回調(diào)和WPF 870
29.4
路由事件 871
29.4.1
用于Windows 應用程序
的路由事件 871
29.4.2
WPF的冒泡和隧道 873
29.4.3
用WPF實現(xiàn)自定義路由
事件 875
29.5
附加屬性 876
29.6
標記擴展 879
29.6.1
創(chuàng)建自定義標記擴展 880
29.6.2
XAML定義的標記
擴展 882
29.7
小結(jié) 882
第30章 樣式化XAML應用程序 883
30.1
樣式設(shè)置 883
30.2
形狀 884
30.3
幾何圖形 887
30.3.1
使用段的幾何圖形 887
30.3.2
使用PML的幾何圖形 888
30.3.3
合并的幾何圖形(WPF) 889
30.4
變換 889
30.4.1
縮放 890
30.4.2
平移 890
30.4.3
旋轉(zhuǎn) 891
30.4.4
傾斜 891
30.4.5
組合變換和復合變換 891
30.4.6
使用矩陣的變換 891
30.4.7
變換布局
892
30.5
畫筆 893
30.5.1
SolidColorBrush 893
30.5.2
LinearGradientBrush 894
30.5.3
ImageBrush 894
30.5.4
WebViewBrush 894
30.5.5
只用于WPF的畫筆 895
30.6
樣式和資源 898
30.6.1
樣式 898
30.6.2
資源 900
30.6.3
從代碼中訪問資源 901
30.6.4
動態(tài)資源(WPF) 902
30.6.5
資源字典 903
30.6.6
主題資源(UWP) 905
30.7
模板 906
30.7.1
控件模板 907
30.7.2
數(shù)據(jù)模板 912
30.7.3
樣式化ListView 913
30.7.4
ListView項的數(shù)據(jù)模板 915
30.7.5
項容器的樣式 915
30.7.6
項面板 916
30.7.7
列表視圖的控件模板 917
30.8
動畫 918
30.8.1
時間軸 919
30.8.2
緩動函數(shù) 921
30.8.3
關(guān)鍵幀動畫 927
30.8.4
過渡(UWP應用程序) 928
30.9
可視化狀態(tài)管理器 931
30.9.1
用控件模板預定義狀態(tài) 932
30.9.2
定義自定義狀態(tài) 933
30.9.3
設(shè)置自定義的狀態(tài) 934
30.10
小結(jié) 934
第31章 模式和XAML應用程序 935
31.1
使用 MVVM的原因 935
31.2
定義 MVVM模式 936
31.3
共享代碼 938
31.3.1
使用API 協(xié)定和通用
Windows平臺 938
31.3.2
使用共享項目 939
31.3.3
使用移動庫 941
31.4
示例解決方案 942
31.5
模型 942
31.5.1
實現(xiàn)變更通知 943
31.5.2
使用Repository模式 944
31.6
視圖模型 946
31.6.1
命令 948
31.6.2
服務和依賴注入 949
31.7
視圖 952
31.7.1
注入視圖模型 953
31.7.2
用于WPF的數(shù)據(jù)綁定 953
31.7.3
用于UWP的已編譯數(shù)據(jù)
綁定 955
31.8
使用事件傳遞消息 957
31.9
IoC容器 959
31.10
使用框架 961
31.11
小結(jié) 961
第32章 Windows應用程序:
用戶界面 962
32.1
概述 962
32.2
導航 963
32.2.1
導航回*初的頁面 963
32.2.2
重寫Page類的導航 965
32.2.3
在頁面之間導航 965
32.2.4
后退按鈕 967
32.2.5
Hub 969
32.2.6
Pivot 971
32.2.7
應用程序shell 972
32.2.8
漢堡按鈕 976
32.2.9
分隔視圖 977
32.2.10
給SplitView窗格添加
內(nèi)容 979
32.3
布局 981
32.3.1
VariableSizedWrapGrid 981
32.3.2
RelativePanel 983
32.3.3
自適應觸發(fā)器 984
32.3.4
XAML視圖 988
32.3.5
延遲加載 988
32.4
命令 989
32.5
已編譯的數(shù)據(jù)綁定 992
32.5.1
已編譯綁定的生命周期 992
32.5.2
給已編譯的數(shù)據(jù)模板使用
資源 994
32.6
控件 995
32.6.1
TextBox 控件 995
32.6.2
AutoSuggest 996
32.6.3
Inking 998
32.6.4
讀寫筆觸的選擇器 1001
32.7
小結(jié) 1002
第33章 高級Windows應用程序 1003
33.1
概述 1003
33.2
應用程序的生命周期 1004
33.3
應用程序的執(zhí)行狀態(tài) 1004
33.4
導航狀態(tài) 1007
33.4.1
暫停應用程序 1008
33.4.2
激活暫停的應用程序 1009
33.4.3
測試暫停 1010
33.4.4
頁面狀態(tài) 1011
33.5
共享數(shù)據(jù) 1013
33.5.1
共享源 1014
33.5.2
共享目標 1017
33.6
應用程序服務 1023
33.6.1
創(chuàng)建模型 1024
33.6.2
為應用程序服務連接創(chuàng)建
后臺任務 1025
33.6.3
注冊應用程序服務 1026
33.6.4
調(diào)用應用程序服務 1027
33.7
相機 1029
33.8
Geolocation和Mapcontrol 1031
33.8.1
使用MapControl 1031
33.8.2
使用Geolocator定位
信息 1034
33.8.3
街景地圖 1036
33.8.4
繼續(xù)請求位置信息 1037
33.9
傳感器 1037
33.9.1
光線 1038
33.9.2
羅盤 1040
33.9.3
加速計 1041
33.9.4
傾斜計 1042
33.9.5
陀螺儀 1042
33.9.6
方向 1043
33.9.7
Rolling Marble示例 1044
33.10
小結(jié) 1046
第34章 帶WPF的Windows桌面
應用程序 1047
34.1
概述 1048
34.2
控件 1048
34.2.1
簡單控件 1048
34.2.2
內(nèi)容控件 1049
34.2.3
帶標題的內(nèi)容控件 1050
34.2.4
項控件 1052
34.2.5
帶標題的項控件 1052
34.2.6
修飾 1052
34.3
布局 1053
34.3.1
StackPanel 1054
34.3.2
WrapPanel 1054
34.3.3
Canvas 1055
34.3.4
DockPanel 1056
34.3.5
Grid 1056
34.4
觸發(fā)器 1058
34.4.1
屬性觸發(fā)器 1058
34.4.2
多觸發(fā)器 1059
34.4.3
數(shù)據(jù)觸發(fā)器 1060
34.5
菜單和功能區(qū)控件 1062
34.5.1
菜單控件 1062
34.5.2
功能區(qū)控件 1063
34.6
Commanding 1065
34.6.1
定義命令 1066
34.6.2
定義命令源 1067
34.6.3
命令綁定 1067
34.7
數(shù)據(jù)綁定 1068
34.7.1
BooksDemo應用程序
內(nèi)容 1069
34.7.2
用XAML綁定 1070
34.7.3
簡單對象的綁定 1073
34.7.4
更改通知 1075
34.7.5
對象數(shù)據(jù)提供程序 1077
34.7.6
列表綁定 1079
34.7.7
主從綁定 1082
34.7.8
多綁定 1082
34.7.9
優(yōu)先綁定 1084
34.7.10
值的轉(zhuǎn)換 1086
34.7.11
動態(tài)添加列表項 1087
34.7.12
動態(tài)添加選項卡中
的項 1088
34.7.13
數(shù)據(jù)模板選擇器 1089
34.7.14
綁定到XML上 1091
34.7.15
綁定的驗證和錯誤
處理 1093
34.8
TreeView 1101
34.9
DataGrid 1106
34.9.1
自定義列 1108
34.9.2
行的細節(jié) 1109
34.9.3
用DataGrid進行分組 1109
34.9.4
實時成型 1112
34.10
小結(jié) 1118
第35章 用WPF創(chuàng)建文檔 1119
35.1
簡介 1119
35.2
文本元素 1120
35.2.1
字體 1120
35.2.2 TextEffect 1121
35.2.3
內(nèi)聯(lián) 1123
35.2.4
塊 1124
35.2.5
列表 1126
35.2.6
表 1126
35.2.7
塊的錨定 1128
35.3
流文檔 1130
35.4
固定文檔 1134
35.5
XPS文檔 1137
35.6
打印 1139
35.6.1
用PrintDialog打印 1139
35.6.2
打印可見元素 1140
35.7
小結(jié) 1142
第36章 部署Windows應用程序 1143
36.1
部署是應用程序生命周期的
一部分 1143
36.2
部署的規(guī)劃 1144
36.2.1
部署選項 1144
36.2.2
部署要求 1144
36.2.3
部署.NET運行庫 1145
36.3
傳統(tǒng)的部署選項 1145
36.3.1
xcopy部署 1146
36.3.2
Windows Installer 1146
36.4
ClickOnce 1147
36.4.1
ClickOnce操作 1147
36.4.2
發(fā)布ClickOnce應用
程序 1147
36.4.3
ClickOnce設(shè)置 1149
36.4.4
ClickOnce文件的應用
程序緩存 1151
36.4.5
應用程序的安裝 1151
36.4.6
ClickOnce部署API 1152
36.5
UWP應用程序 1153
36.5.1
創(chuàng)建應用程序包 1153
36.5.2
Windows App Certification
Kit 1155
36.5.3
旁加載 1156
36.6
小結(jié) 1156
第Ⅳ部分 Web應用程序和服務
第37章 ADO.NET 1158
37.1
ADO.NET概述 1158
37.1.1
示例數(shù)據(jù)庫 1159
37.1.2
NuGet 包和名稱空間 1160
37.2
使用數(shù)據(jù)庫連接 1160
37.2.1
管理連接字符串 1161
37.2.2
連接池 1162
37.2.3
連接信息 1162
37.3
命令 1162
37.3.1
ExecuteNonQuery()
方法 1164
37.3.2
ExecuteScalar()方法 1165
37.3.3
ExecuteReader()方法 1165
37.3.4
調(diào)用存儲過程 1167
37.4
異步數(shù)據(jù)訪問 1168
37.5
事務 1169
37.6
小結(jié) 1173
第38章 Entity Framework Core 1174
38.1
Entity Framework簡史 1174
38.2
Entity Framework簡介 1176
38.2.1
創(chuàng)建模型 1176
38.2.2
創(chuàng)建上下文 1177
38.2.3
寫入數(shù)據(jù)庫 1178
38.2.4
讀取數(shù)據(jù)庫 1179
38.2.5
更新記錄 1180
38.2.6
刪除記錄 1180
38.3
使用依賴注入 1181
38.4
創(chuàng)建模型 1184
38.4.1
創(chuàng)建關(guān)系 1184
38.4.2
用.NET CLI遷移 1185
38.4.3
用MSBuild遷移 1187
38.4.4
創(chuàng)建數(shù)據(jù)庫 1188
38.4.5
數(shù)據(jù)注釋 1189
38.4.6
流利API 1190
38.4.7
在數(shù)據(jù)庫中搭建模型 1191
38.5
使用對象狀態(tài) 1191
38.5.1
用關(guān)系添加對象 1192
38.5.2
對象的跟蹤 1193
38.5.3
更新對象 1194
38.5.4
更新未跟蹤的對象 1195
38.6
沖突的處理 1196
38.6.1
*后一個更改獲勝 1196
38.6.2
**個更改獲勝 1198
38.7
使用事務 1202
38.7.1
使用隱式的事務 1202
38.7.2
創(chuàng)建顯式的事務 1204
38.8
小結(jié) 1206
第39章 Windows服務 1207
39.1
Windows服務 1207
39.2
Windows服務的體系結(jié)構(gòu) 1209
39.2.1
服務程序 1209
39.2.2
服務控制程序 1210
39.2.3
服務配置程序 1210
39.2.4
Windows服務的類 1211
39.3
創(chuàng)建Windows服務程序 1211
39.3.1
創(chuàng)建服務的核心功能 1211
39.3.2
QuoteClient示例 1214
39.3.3
Windows服務程序 1218
39.3.4
線程化和服務 1221
39.3.5
服務的安裝 1222
39.3.6
安裝程序 1222
39.4
Windows服務的監(jiān)控和
控制 1226
39.4.1
MMC管理單元 1226
39.4.2
net.exe實用程序 1227
39.4.3
sc.exe實用程序 1227
39.4.4
Visual Studio Server
Explorer 1227
39.4.5
編寫自定義
ServiceController類 1228
39.5
故障排除和事件日志 1236
39.6
小結(jié) 1237
第40章 ASP.NET Core 1238
40.1
ASP.NET Core 1.0 1238
40.2
Web技術(shù) 1239
40.2.1
HTML 1239
40.2.2
CSS 1240
40.2.3
JavaScript和
TypeScript 1240
40.2.4
腳本庫 1240
40.3
ASP.NET Web項目 1241
40.4
啟動 1245
40.5
添加靜態(tài)內(nèi)容 1248
40.5.1
使用JavaScript包管理器:
npm 1249
40.5.2
用gulp構(gòu)建 1250
40.5.3
通過Bower使用
客戶端庫 1252
40.6
請求和響應 1254
40.6.1
請求標題 1256
40.6.2
查詢字符串 1258
40.6.3
編碼 1259
40.6.4
表單數(shù)據(jù) 1260
40.6.5
cookie 1261
40.6.6
發(fā)送JSON 1262
40.7
依賴注入 1262
40.7.1
定義服務 1263
40.7.2
注冊服務 1263
40.7.3
注入服務 1264
40.7.4
調(diào)用控制器 1264
40.8
使用映射的路由 1265
40.9
使用中間件 1266
40.10
會話狀態(tài) 1268
40.11
配置ASP.NET 1270
40.11.1
讀取配置 1271
40.11.2
基于環(huán)境的不同配置 1271
40.11.3
用戶密鑰 1272
40.12
小結(jié) 1273
第41章 ASP.NET MVC 1274
41.1
為ASP.NET MVC 6建立
服務 1274
41.2
定義路由 1276
41.2.1
添加路由 1277
41.2.2
使用路由約束 1278
41.3
創(chuàng)建控制器 1278
41.3.1
理解動作方法 1278
41.3.2
使用參數(shù) 1279
41.3.3
返回數(shù)據(jù) 1280
41.3.4
使用Controller基類和
POCO控制器 1281
41.4
創(chuàng)建視圖 1283
41.4.1
向視圖傳遞數(shù)據(jù) 1283
41.4.2
Razor語法 1284
41.4.3
創(chuàng)建強類型視圖 1285
41.4.4
定義布局 1286
41.4.5
用部分視圖定義內(nèi)容 1290
41.4.6
使用視圖組件 1294
41.4.7
在視圖中使用依賴
注入 1296
41.4.8
為多個視圖導入名稱
空間 1296
41.5
從客戶端提交數(shù)據(jù) 1296
41.5.1
模型綁定器 1298
41.5.2
注解和驗證 1299
41.6
使用HTML Helper 1300
41.6.1
簡單的Helper 1300
41.6.2
使用模型數(shù)據(jù) 1301
41.6.3
定義HTML特性 1302
41.6.4
創(chuàng)建列表 1302
41.6.5
強類型化的Helper 1303
41.6.6
編輯器擴展 1304
41.6.7
實現(xiàn)模板 1304
41.7
標記輔助程序 1305
41.7.1
激活標記輔助程序 1306
41.7.2
使用錨定標記輔助
程序 1306
41.7.3
使用標簽標記輔助
程序 1307
41.7.4
使用輸入標記輔助
程序 1308
41.7.5
使用表單進行驗證 1309
41.7.6
創(chuàng)建自定義標記輔助
程序 1310
41.8
實現(xiàn)動作過濾器 1313
41.9
創(chuàng)建數(shù)據(jù)驅(qū)動的應用程序 1315
41.9.1
定義模型 1315
41.9.2
創(chuàng)建數(shù)據(jù)庫 1317
41.9.3
創(chuàng)建服務 1319
41.9.4
創(chuàng)建控制器 1321
41.9.5
創(chuàng)建視圖 1324
41.10
實現(xiàn)身份驗證和授權(quán) 1327
41.10.1
存儲和檢索用戶
信息 1327
41.10.2
啟動身份系統(tǒng) 1328
41.10.3
執(zhí)行用戶注冊 1329
41.10.4
設(shè)置用戶登錄 1331
41.10.5
驗證用戶的身份 1332
41.11
小結(jié) 1333
第42章 ASP.NET Web API 1334
42.1
概述 1334
42.2
創(chuàng)建服務 1335
42.2.1
定義模型 1336
42.2.2
創(chuàng)建存儲庫 1336
42.2.3
創(chuàng)建控制器 1338
42.2.4
修改響應格式 1341
42.2.5
REST 結(jié)果和狀態(tài)碼 1341
42.3
創(chuàng)建異步服務 1342
42.4
創(chuàng)建.NET客戶端 1345
42.4.1
發(fā)送GET請求 1345
42.4.2
從服務中接收XML 1349
42.4.3
發(fā)送POST請求 1350
42.4.4
發(fā)送PUT請求 1351
42.4.5
發(fā)送DELETE請求 1352
42.5
寫入數(shù)據(jù)庫 1353
42.5.1
定義數(shù)據(jù)庫 1353
42.5.2
創(chuàng)建存儲庫 1354
42.6
創(chuàng)建元數(shù)據(jù) 1356
42.7
創(chuàng)建和使用OData服務 1358
42.7.1
創(chuàng)建數(shù)據(jù)模型 1358
42.7.2
創(chuàng)建服務 1359
42.7.3
OData查詢 1360
42.8
小結(jié) 1361
第43章 WebHooks和SignalR 1362
43.1
概述 1362
43.2
SignalR的體系結(jié)構(gòu) 1363
43.3
使用SignalR的簡單聊天
程序 1364
43.3.1
創(chuàng)建集線器 1364
43.3.2
用HTML和JavaScript
創(chuàng)建客戶端 1365
43.3.3
創(chuàng)建SignalR .NET
客戶端 1367
43.4
分組連接 1370
43.4.1
用分組擴展集線器 1371
43.4.2
用分組擴展WPF
客戶端 1372
43.5
WebHooks的體系結(jié)構(gòu) 1375
43.6
創(chuàng)建Dropbox和GitHub
接收器 1376
43.6.1
創(chuàng)建Web應用程序 1376
43.6.2
為Dropbox和GitHub
配置WebHooks 1377
43.6.3
實現(xiàn)處理程序 1377
43.6.4
用Dropbox和GitHub
配置應用程序 1379
43.6.5
運行應用程序 1380
43.7
小結(jié) 1382
第44章 WCF 1383
44.1
WCF概述 1383
44.1.1
SOAP 1385
44.1.2
WSDL 1385
44.2
創(chuàng)建簡單的服務和客戶端 1386
44.2.1
定義服務和數(shù)據(jù)協(xié)定 1386
44.2.2
數(shù)據(jù)訪問 1389
44.2.3
服務的實現(xiàn) 1390
44.2.4
WCF服務宿主和WCF
測試客戶端 1391
44.2.5
自定義服務宿主 1393
44.2.6
WCF客戶端 1395
44.2.7
診斷 1397
44.2.8
與客戶端共享協(xié)定
程序集 1399
44.3
協(xié)定 1400
44.3.1
數(shù)據(jù)協(xié)定 1400
44.3.2
版本問題 1401
44.3.3
服務協(xié)定和操作協(xié)定 1401
44.3.4
消息協(xié)定 1402
44.3.5
錯誤協(xié)定 1403
44.4
服務的行為 1404
44.5
綁定 1408
44.5.1
標準綁定 1408
44.5.2
標準綁定的功能 1409
44.5.3
WebSocket 1410
44.6
宿主 1414
44.6.1
自定義宿主 1414
44.6.2
WAS宿主 1415
44.6.3
預配置的宿主類 1415
44.7
客戶端 1416
44.7.1
使用元數(shù)據(jù) 1417
44.7.2
共享類型 1418
44.8
雙工通信 1418
44.8.1
雙工通信的協(xié)定 1418
44.8.2
用于雙工通信的服務 1419
44.8.3
用于雙工通信的客戶
應用程序 1420
44.9
路由 1421
44.9.1
路由示例應用程序 1422
44.9.2
路由接口 1423
44.9.3
WCF路由服務 1423
44.9.4
為故障切換使用
路由器 1424
44.9.5
改變協(xié)定的橋梁 1425
44.9.6
過濾器的類型 1426
44.10
小結(jié) 1426
第45章 部署網(wǎng)站和服務 1427
45.1
部署Web應用程序 1427
45.2
部署前的準備 1428
45.2.1
創(chuàng)建ASP.NET 4.6 Web
應用程序 1428
45.2.2
創(chuàng)建ASP.NET Core 1.0
Web應用程序 1429
45.2.3
ASP.NET 4.6的配置
文件 1430
45.2.4
ASP.NET Core 1.0的
配置文件 1431
45.3
部署到IIS 1433
45.3.1
使用 IIS Manager準備
Web應用程序 1433
45.3.2
Web部署到IIS 1437
45.4
部署到Microsoft Azure 1440
45.4.1
創(chuàng)建SQL數(shù)據(jù)庫 1440
45.4.2
用SQL Azure測試本地
網(wǎng)站 1440
45.4.3
部署到Microsoft Azure
Web應用 1441
45.5
部署到Docker 1441
45.6
小結(jié) 1442