TA是誰?
Wrox精品紅皮書,
引領無數程式員進入程式開發殿堂,
C#專家級指南,
是經驗豐富的程式員提高效率的更快捷方式,
連續暢銷20年,累計銷量超30萬冊。
TA出生名門:
TA戰績輝煌:
2019新的徵程:
第11次全新升級,更新至C#7 和 .NET Core 2.0
C# 7內幕指南,
釋出為NuGet包的每個.NET Core部分都進行了更新,
展示如何將.NET引入非微軟平臺,如何操作工具。
TA的行業贊譽:
目錄(上下滑動顯示更多內容)
第 I 部分 C# 語 言
第1 章 .NET 應用程式和工具 3
1.1 選擇技術 3
1.2 回顧.NET 歷史 4
1.2.1 C# 1.0——一種新語言 4
1.2.2 帶有泛型的C# 2 和.NET 2 6
1.2.3 .NET 3.0——Windows Presentation Foundation 6
1.2.4 C# 3 和.NET 3.5——LINQ 6
1.2.5 C# 4 和.NET 4.0——dynamic 和TPL 7
1.2.6 C# 5 和非同步程式設計 7
1.2.7 C# 6 和.NET Core 1.0 8
1.2.8 C# 7 和.NET Core 2.0 8
1.2.9 選擇技術,繼續前進 9
1.3 .NET 術語 10
1.3.1 .NET Framework 11
1.3.2 .NET Core 11
1.3.3 .NET Standard 11
1.3.4 NuGet 包 12
1.3.5 名稱空間 12
1.3.6 公共語言執行庫 13
1.3.7 Windows 執行庫 13
1.4 用.NET Core CLI 編譯 14
1.4.1 設定環境 14
1.4.2 建立應用程式 15
1.4.3 構建應用程式 16
1.4.4 執行應用程式 16
1.4.5 建立Web 應用程式 17
1.4.6 釋出應用程式 17
1.5 使用Visual Studio 2017 19
1.6 應用程式型別和技術 24
1.6.1 資料訪問 24
1.6.2 Windows 應用程式 24
1.6.3 Xamarin 24
1.6.4 Web 應用程式 25
1.6.5 Web API 25
1.6.6 WebHooks 和SignalR 25
1.6.7 Microsoft Azure 25
1.7 開發工具 26
1.7.1 Visual Studio Community 27
1.7.2 Visual Studio Professional 27
1.7.3 Visual Studio Enterprise 27
1.7.4 Visual Studio for Mac 27
1.7.5 Visual Studio Code 27
1.8 小結 27
第2 章 核心C# 29
2.1 C#基礎 29
2.2 變數 31
2.2.1 初始化變數 31
2.2.2 型別推斷 32
2.2.3 變數的作用域 33
2.2.4 常量 34
2.3 預定義資料型別 35
2.3.1 值型別和取用型別 35
2.3.2 .NET 型別 36
2.3.3 預定義的值型別 36
2.3.4 預定義的取用型別 40
2.4 程式流控制 42
2.4.1 條件陳述句 42
2.4.2 迴圈 44
2.4.3 跳轉陳述句 47
2.5 名稱空間 47
2.5.1 using 陳述句 48
2.5.2 名稱空間的別名 49
2.6 Main()方法 49
2.7 使用註釋 50
2.7.1 源檔案中的內部註釋 50
2.7.2 XML 檔案 51
2.8 C#前處理器指令 52
2.8.1 #define 和#undef 52
2.8.2 #if、#elif、#else 和#endif 52
2.8.3 #warning 和 # error 53
2.8.4 #region 和#endregion 53
2.8.5 #line 53
2.8.6 #pragma 54
2.9 C#程式設計準則 54
2.9.1 關於識別符號的規則 54
2.9.2 用法約定 55
2.10 小結 58
第3 章 物件和型別 59
3.1 建立及使用類 60
3.2 類和結構 60
3.3 類 61
3.3.1 欄位 61
3.3.2 只讀欄位 61
3.3.3 屬性 62
3.3.4 匿名型別 65
3.3.5 方法 66
3.3.6 建構式 69
3.4 結構 73
3.4.1 結構是值型別 74
3.4.2 只讀結構 75
3.4.3 結構和繼承 75
3.4.4 結構的建構式 75
3.4.5 ref 結構 76
3.5 按值和按取用傳遞引數 76
3.5.1 ref 引數 77
3.5.2 out 引數 77
3.5.3 in 引數 78
3.6 可空型別 79
3.7 列舉型別 79
3.8 部分類 81
3.9 擴充套件方法 83
3.10 Object 類 83
3.11 小結 84
第4 章 繼承 85
4.1 面向物件 85
4.2 繼承的型別 85
4.2.1 多重繼承 86
4.2.2 結構和類 86
4.3 實現繼承 86
4.3.1 虛方法 87
4.3.2 多型性 88
4.3.3 隱藏方法 89
4.3.4 呼叫方法的基類版本 90
4.3.5 抽象類和抽象方法 90
4.3.6 密封類和密封方法 91
4.3.7 派生類的建構式 91
4.4 修飾符 93
4.4.1 訪問修飾符 93
4.4.2 其他修飾符 94
4.5 介面 94
4.5.1 定義和實現介面 95
4.5.2 派生的介面 97
4.6 is 和as 運運算元 98
4.7 小結 99
第5 章 泛型 100
5.1 泛型概述 100
5.1.1 效能 101
5.1.2 型別安全 102
5.1.3 二進位制程式碼的重用 102
5.1.4 程式碼的擴充套件 102
5.1.5 命名約定 102
5.2 建立泛型類 103
5.3 泛型類的功能 105
5.3.1 預設值 106
5.3.2 約束 106
5.3.3 繼承 108
5.3.4 靜態成員 108
5.4 泛型介面 109
5.4.1 協變和抗變 109
5.4.2 泛型介面的協變 110
5.4.3 泛型介面的抗變 111
5.5 泛型結構 111
5.6 泛型方法 113
5.6.1 泛型方法示例 113
5.6.2 帶約束的泛型方法 114
5.6.3 帶委託的泛型方法 115
5.6.4 泛型方法規範 115
5.7 小結 116
第6 章 運運算元和型別強制轉換 117
6.1 運運算元和型別轉換 117
6.2 運運算元 118
6.2.1 運運算元的簡化操作 119
6.2.2 運運算元的優先順序和關聯性 125
6.3 使用二進位制運運算元 126
6.3.1 位的移動 128
6.3.2 有符號數和無符號數 128
6.4 型別的安全性 129
6.4.1 型別轉換 130
6.4.2 裝箱和拆箱 132
6.5 比較物件的相等性 133
6.5.1 比較取用型別的相等性 133
6.5.2 比較值型別的相等性 134
6.6 運運算元多載 135
6.6.1 運運算元的工作方式 135
6.6.2 運運算元多載的示例:Vector 結構 136
6.6.3 比較運運算元的多載 139
6.6.4 可以多載的運運算元 140
6.7 實現自定義的索引運運算元 141
6.8 使用者定義的型別強制轉換 142
6.8.1 實現使用者定義的型別強制轉換 143
6.8.2 多重型別強制轉換 147
6.9 小結 150
第7 章 陣列 151
7.1 相同型別的多個物件 151
7.2 簡單陣列 152
7.2.1 陣列的宣告 152
7.2.2 陣列的初始化 152
7.2.3 訪問陣列元素 153
7.2.4 使用取用型別 153
7.3 多維陣列 154
7.4 鋸齒陣列 155
7.5 Array 類 156
7.5.1 建立陣列 156
7.5.2 複製陣列 156
7.5.3 排序 157
7.6 陣列作為引數 159
7.7 陣列協變 159
7.8 列舉 160
7.8.1 IEnumerator 介面 160
7.8.2 foreach 陳述句 160
7.8.3 yield 陳述句 161
7.9 結構比較 164
7.10 Span 165
7.10.1 建立切片 166
7.10.2 使用Span 改變值 166
7.10.3 只讀的Span 167
7.11 陣列池 167
7.11.1 建立陣列池 168
7.11.2 從池中租用記憶體 168
7.11.3 將記憶體傳回給池 168
7.12 小結 169
第8 章 委託、lambda 運算式和事件 170
8.1 取用方法 170
8.2 委託 170
8.2.1 宣告委託 171
8.2.2 使用委託 172
8.2.3 簡單的委託示例 174
8.2.4 Action和Func委託 175
8.2.5 BubbleSorter 示例 176
8.2.6 多播委託 177
8.2.7 匿名方法 180
8.3 lambda 運算式 181
8.3.1 引數 181
8.3.2 多行程式碼 181
8.3.3 閉包 182
8.4 事件 182
8.4.1 事件釋出程式 182
8.4.2 事件偵聽器 184
8.5 小結 185
第9 章 字串和正則運算式 186
9.1 System.String 類 187
9.1.1 構建字串 188
9.1.2 StringBuilder 成員 190
9.2 字串格式 190
9.2.1 字串插值 191
9.2.2 日期時間和數字的格式 192
9.2.3 自定義字串格式 193
9.3 正則運算式 194
9.3.1 正則運算式概述 194
9.3.2 RegularExpressionsPlayground 示例 195
9.3.3 顯示結果 197
9.3.4 匹配、組和捕獲 198
9.4 字串和Span 200
9.5 小結 201
第10 章 集合 202
10.1 概述 202
10.2 集合介面和型別 203
10.3 串列 203
10.3.1 建立串列 204
10.3.2 只讀集合 210
10.4 佇列 210
10.5 棧 213
10.6 連結串列 214
10.7 有序串列 217
10.8 字典 219
10.8.1 字典初始化器 219
10.8.2 鍵的型別 219
10.8.3 字典示例 220
10.8.4 Lookup 類 223
10.8.5 有序字典 223
10.9 集 224
10.10 效能 225
10.11 小結 227
第11 章 特殊的集合 228
11.1 概述 228
11.2 處理位 228
11.2.1 BitArray 類 229
11.2.2 BitVector32 結構 230
11.3 可觀察的集合 232
11.4 不變的集合 233
11.4.1 使用構建器和不變的集合 235
11.4.2 不變集合型別和介面 235
11.4.3 使用LINQ 和不變的陣列 236
11.5 併發集合 236
11.5.1 建立管道 237
11.5.2 使用BlockingCollection 239
11.5.3 使用ConcurrentDictionary 240
11.5.4 完成管道 241
11.6 小結 242
第12 章 LINQ 243
12.1 LINQ 概述 243
12.1.1 串列和物體 244
12.1.2 LINQ 查詢 246
12.1.3 擴充套件方法 246
12.1.4 推遲查詢的執行 248
12.2 標準的查詢運運算元 249
12.2.1 篩選 250
12.2.2 用索引篩選 251
12.2.3 型別篩選 252
12.2.4 複合的from 子句 252
12.2.5 排序 253
12.2.6 分組 254
12.2.7 LINQ 查詢中的變數 255
12.2.8 對巢狀的物件分組 255
12.2.9 內連線 256
12.2.10 左外連線 258
12.2.11 組連線 260
12.2.12 集合操作 262
12.2.13 合併 263
12.2.14 分割槽 264
12.2.15 聚合運運算元 264
12.2.16 轉換運運算元 266
12.2.17 生成運運算元 267
12.3 並行LINQ 267
12.3.1 並行查詢 268
12.3.2 分割槽器 268
12.3.3 取消 269
12.4 運算式樹 269
12.5 LINQ 提供程式 271
12.6 小結 272
第13 章 C#函式式程式設計 273
13.1 概述 273
13.1.1 避免狀態突變 274
13.1.2 函式作為第一個類 275
13.2 運算式體的成員 275
13.3 擴充套件方法 276
13.4 using static 宣告 277
13.5 本地函式 278
13.5.1 本地函式與yield 陳述句 279
13.5.2 遞迴本地函式 281
13.6 元組 282
13.6.1 元組的宣告和初始化 282
13.6.2 元組解構 283
13.6.3 元組的傳回 283
13.6.4 幕後的原理 284
13.6.5 ValueTuple 與元組的相容性 285
13.6.6 推斷出元組名稱 285
13.6.7 元組與連結串列 286
13.6.8 元組和LINQ 286
13.6.9 解構 287
13.6.10 解構與擴充套件方法 288
13.7 樣式匹配 288
13.7.1 樣式匹配與is 運運算元 288
13.7.2 樣式匹配與switch 陳述句 290
13.7.3 樣式匹配與泛型 291
13.8 小結 291
第14 章 錯誤和異常 292
14.1 簡介 292
14.2 異常類 293
14.3 捕獲異常 294
14.3.1 異常和效能 296
14.3.2 實現多個catch 塊 296
14.3.3 在其他程式碼中捕獲異常 299
14.3.4 System.Exception 屬性 299
14.3.5 異常過濾器 299
14.3.6 重新丟擲異常 300
14.3.7 沒有處理異常時發生的情況 303
14.4 使用者定義的異常類 303
14.4.1 捕獲使用者定義的異常 304
14.4.2 丟擲使用者定義的異常 305
14.4.3 定義使用者定義的異常類 307
14.5 呼叫者資訊 309
14.6 小結 310
第15 章 非同步程式設計 311
15.1 非同步程式設計的重要性 311
15.2 非同步程式設計的.NET 歷史 312
15.2.1 同步呼叫 312
15.2.2 非同步樣式 313
15.2.3 基於事件的非同步樣式 314
15.2.4 基於任務的非同步樣式 314
15.2.5 非同步Main()方法 315
15.3 非同步程式設計的基礎 315
15.3.1 建立任務 316
15.3.2 呼叫非同步方法 316
15.3.3 使用Awaiter 317
15.3.4 延續任務 317
15.3.5 同步背景關係 318
15.3.6 使用多個非同步方法 318
15.3.7 使用ValueTasks 319
15.3.8 轉換非同步樣式 320
15.4 錯誤處理 320
15.4.1 非同步方法的異常處理 321
15.4.2 多個非同步方法的異常處理 321
15.4.3 使用AggregateException 資訊 322
15.5 非同步與Windows 應用程式 322
15.5.1 配置await 323
15.5.2 切換到UI 執行緒 324
15.5.3 使用IAsyncOperation 325
15.5.4 避免阻塞情況 325
15.6 小結 325
第16 章 反射、元資料和動態程式設計 326
16.1 在執行期間檢查程式碼和動態程式設計 326
16.2 自定義特性 327
16.2.1 編寫自定義特性 327
16.2.2 自定義特性示例:WhatsNewAttributes 330
16.3 反射 331
16.3.1 System.Type 類 332
16.3.2 TypeView 示例 333
16.3.3 Assembly 類 335
16.3.4 完成WhatsNewAttributes 示例 336
16.4 為反射使用動態語言擴充套件 339
16.4.1 建立Calculator 庫 339
16.4.2 動態實體化型別 339
16.4.3 用Reflection API 呼叫成員 340
16.4.4 使用動態型別呼叫成員 340
16.5 dynamic 型別 341
16.6 DynamicObject 和ExpandoObject概述 344
16.6.1 DynamicObject 344
16.6.2 ExpandoObject 345
16.7 小結 347
第17 章 託管和非託管記憶體 348
17.1 記憶體 348
17.2 後臺記憶體管理 349
17.2.1 值資料型別 349
17.2.2 取用資料型別 350
17.2.3 垃圾收集 352
17.3 強取用和弱取用 354
17.4 處理非託管的資源 354
17.4.1 解構式或終結器 355
17.4.2 IDisposable 介面 356
17.4.3 using 陳述句 356
17.4.4 實現IDisposable 介面和解構式 357
17.4.5 IDisposable 和終結器的規則 358
17.5 不安全的程式碼 358
17.5.1 用指標直接訪問記憶體 358
17.5.2 指標示例:PointerPlayground 364
17.5.3 使用指標最佳化效能 367
17.6 取用的語意 369
17.6.1 傳遞ref 和傳回ref 371
17.6.2 ref 和陣列 371
17.7 Span 373
17.7.1 Span 取用託管堆 373
17.7.2 Span 取用棧 373
17.7.3 Span 取用本機堆 374
17.7.4 Span 擴充套件方法 374
17.8 平臺呼叫 375
17.9 小結 378
第18 章 Visual Studio 2017 379
18.1 使用Visual Studio 2017 379
18.1.1 Visual Studio 的版本 382
18.1.2 Visual Studio 設定 382
18.2 建立專案 383
18.2.1 面向多個版本的.NET 384
18.2.2 選擇專案型別 385
18.3 瀏覽並編寫專案 388
18.3.1 Solution Explorer 388
18.3.2 使用程式碼編輯器 394
18.3.3 學習和理解其他視窗 399
18.3.4 排列視窗 402
18.4 構建專案 402
18.4.1 構建、編譯和生成程式碼 403
18.4.2 除錯版本和釋出版本 403
18.4.3 選擇配置 404
18.4.4 編輯配置 404
18.5 除錯程式碼 406
18.5.1 設定斷點 407
18.5.2 使用資料提示和除錯器視覺化工具 407
18.5.3 Live Visual Tree 408
18.5.4 監視和修改變數 409
18.5.5 異常 409
18.5.6 多執行緒 410
18.6 重構工具 411
18.7 診斷工具 412
18.8 透過Docker 建立和使用容器 415
18.8.1 Docker 簡介 416
18.8.2 在Docker 容器中執行ASP .NET Core 416
18.8.3 建立Dockerfile 417
18.8.4 使用Visual Studio 418
18.9 小結 420
第II 部分 .NET Core 與Windows Runtime
第19 章 庫、程式集、包和NuGet 423
19.1 庫的地獄 423
19.2 程式集 425
19.3 建立庫 426
19.3.1 .NET 標準 427
19.3.2 建立.NET 標準庫 428
19.3.3 解決方案檔案 428
19.3.4 取用專案 429
19.3.5 取用NuGet 包 429
19.3.6 NuGet 的來源 430
19.3.7 使用.NET Framework 庫 431
19.4 使用共享專案 433
19.5 建立NuGet 包 435
19.5.1 NuGet 包和命令列 435
19.5.2 支援多個平臺 435
19.5.3 NuGet 包與Visual Studio 436
19.6 小結 438
第20 章 依賴註入 439
20.1 依賴註入的概念 439
20.1.1 使用沒有依賴註入的服務 440
20.1.2 使用依賴註入 441
20.2 使用.NET Core DI 容器 442
20.3 服務的生命週期 443
20.3.1 使用單例和臨時服務 445
20.3.2 使用Scoped 服務 446
20.3.3 使用自定義工廠 448
20.4 使用選項初始化服務 449
20.5 使用配置檔案 450
20.6 建立平臺獨立性 452
20.6.1 .NET 標準庫 452
20.6.2 WPF 應用程式 453
20.6.3 UWP 應用程式 454
20.6.4 Xamarin 應用程式 455
20.7 使用其他DI 容器 456
20.8 小結 457
第21 章 任務和並行程式設計 458
21.1 概述 459
21.2 Parallel 類 460
21.2.1 使用Parallel.For()方法迴圈 460
21.2.2 提前中斷Parallel.For 462
21.2.3 Parallel.For()方法的初始化 462
21.2.4 使用Parallel.ForEach()方法迴圈 463
21.2.5 透過Parallel.Invoke()方法呼叫多個方法 464
21.3 任務 464
21.3.1 啟動任務 464
21.3.2 Future——任務的結果 466
21.3.3 連續的任務 467
21.3.4 任務層次結構 468
21.3.5 從方法中傳回任務 468
21.3.6 等待任務 468
21.4 取消架構 470
21.4.1 Parallel.For()方法的取消 470
21.4.2 任務的取消 471
21.5 資料流 472
21.5.1 使用動作塊 472
21.5.2 源和標的資料塊 473
21.5.3 連線塊 474
21.6 Timer 類 475
21.7 執行緒問題 477
21.7.1 爭用條件 477
21.7.2 死鎖 479
21.8 lock 陳述句和執行緒安全 480
21.9 Interlocked 類 483
21.10 Monitor 類 484
21.11 SpinLock 結構 485
21.12 WaitHandle 基類 485
21.13 Mutex 類 485
21.14 Semaphore 類 486
21.15 Events 類 487
21.16 Barrier 類 490
21.17 ReaderWriterLockSlim 類 492
21.18 Lock 和await 494
21.19 小結 496
第22 章 檔案和流 497
22.1 概述 498
22.2 管理檔案系統 498
22.2.1 檢查驅動器資訊 499
22.2.2 使用Path 類 500
22.2.3 建立檔案和檔案夾 500
22.2.4 訪問和修改檔案屬性 501
22.2.5 使用File 執行讀寫操作 502
22.3 列舉檔案 503
22.4 使用流 504
22.4.1 使用檔案流 505
22.4.2 讀取流 508
22.4.3 寫入流 508
22.4.4 複製流 509
22.4.5 隨機訪問流 509
22.4.6 使用快取的流 510
22.5 使用讀取器和寫入器 511
22.5.1 StreamReader 類 511
22.5.2 StreamWriter 類 512
22.5.3 讀寫二進位制檔案 512
22.6 壓縮檔案 513
22.6.1 使用壓縮流 514
22.6.2 使用Brotli 514
22.6.3 壓縮檔案 515
22.7 觀察檔案的更改 515
22.8 使用記憶體對映的檔案 516
22.8.1 使用訪問器建立記憶體對映檔案 517
22.8.2 使用流建立記憶體對映檔案 518
22.9 使用管道通訊 520
22.9.1 建立命名管道伺服器 520
22.9.2 建立命名管道客戶端 521
22.9.3 建立匿名管道 522
22.10 透過Windows 執行庫使用檔案和流 523
22.10.1 Windows App 編輯器 523
22.10.2 把Windows Runtime 型別對映為.NET 型別 525
22.11 小結 526
第23 章 網路 527
23.1 概述 527
23.2 HttpClient 類 528
23.2.1 發出非同步的Get 請求 528
23.2.2 丟擲異常 529
23.2.3 傳遞標題 529
23.2.4 訪問內容 531
23.2.5 用HttpMessageHandler 自定義請求 531
23.2.6 使用SendAsync 建立HttpRequestMessage 532
23.2.7 使用HttpClient和Windows Runtime 532
23.3 使用WebListener 類 534
23.4 使用實用工具類 536
23.4.1 URI 537
23.4.2 IPAddress 538
23.4.3 IPHostEntry 538
23.4.4 Dns 539
23.5 使用TCP 540
23.5.1 使用TCP 建立HTTP 客戶程式 540
23.5.2 建立TCP 偵聽器 541
23.5.3 建立TCP 客戶端 547
23.5.4 TCP 和UDP 550
23.6 使用UDP 550
23.6.1 建立UDP 接收器 550
23.6.2 建立UDP 傳送器 551
23.6.3 使用多播 553
23.7 使用套接字 554
23.7.1 使用套接字建立偵聽器 554
23.7.2 使用NetworkStream 和套接字 556
23.7.3 透過套接字使用讀取器和寫入器 557
23.7.4 使用套接字實現接收器 557
23.8 小結 559
第24 章 安全性 560
24.1 概述 560
24.2 驗證使用者資訊 561
24.2.1 使用Windows 標識 561
24.2.2 Windows Principal 562
24.2.3 使用聲稱 562
24.3 加密資料 564
24.3.1 建立和驗證簽名 565
24.3.2 實現安全的資料交換 567
24.3.3 使用RSA 簽名和雜湊 569
24.4 保護資料 571
24.4.1 實現資料保護 571
24.4.2 使用者機密 573
24.5 資源的訪問控制 575
24.6 Web 安全性 577
24.6.1 編碼 577
24.6.2 SQL 註入 579
24.6.3 跨站點請求偽造 580
24.7 小結 581
第25 章 ADO.NET 和事務 582
25.1 ADO.NET 概述 582
25.1.1 示例資料庫 583
25.1.2 NuGet 包和名稱空間 583
25.2 使用資料庫連線 584
25.2.1 管理連線字串 585
25.2.2 連線池 585
25.2.3 連線資訊 585
25.3 命令 587
25.3.1 ExecuteNonQuery()方法 587
25.3.2 ExecuteScalar()方法 588
25.3.3 ExecuteReader()方法 589
25.3.4 呼叫儲存過程 590
25.4 非同步資料訪問 591
25.5 事務 592
25.6 事務和System.Transaction 595
25.6.1 可提交的事務 597
25.6.2 依賴事務 598
25.6.3 環境事務 599
25.6.4 巢狀作用域和環境事務 601
25.7 小結 602
第26 章 Entity Framework Core 604
26.1 Entity Framework 簡史 605
26.2 EF Core 簡介 606
26.2.1 建立模型 607
26.2.2 約定、註釋和流利API 607
26.2.3 建立背景關係 608
26.2.4 建立資料庫 608
26.2.5 刪除資料庫 609
26.2.6 寫入資料庫 609
26.2.7 讀取資料庫 610
26.2.8 更新記錄 610
26.2.9 刪除記錄 611
26.2.10 日誌記錄 611
26.3 使用依賴註入 612
26.4 建立模型 614
26.4.1 建立關係 614
26.4.2 資料註釋 614
26.4.3 流利API 615
26.4.4 自包含型別的配置 616
26.4.5 在資料庫中搭建模型 617
26.4.6 對映到欄位 618
26.4.7 陰影屬性 619
26.5 查詢 621
26.5.1 基本查詢 621
26.5.2 客戶端和伺服器求值 622
26.5.3 原始SQL 查詢 623
26.5.4 已編譯查詢 624
26.5.5 全域性查詢過濾器 624
26.5.6 EF.Functions 625
26.6 關係 625
26.6.1 使用約定的關係 625
26.6.2 顯式載入相關資料 627
26.6.3 即時載入相關資料 628
26.6.4 使用註釋的關係 628
26.6.5 使用流利API 的關係 629
26.6.6 根據約定的每個層次結構的表 630
26.6.7 使用流利API 的每個層次結構中的表 632
26.6.8 表的拆分 633
26.6.9 擁有的物體 634
26.7 儲存資料 636
26.7.1 用關係新增物件 636
26.7.2 物件的跟蹤 637
26.7.3 更新物件 638
26.7.4 更新未跟蹤的物件 638
26.7.5 批處理 639
26.8 衝突的處理 640
26.8.1 最後一個更改獲勝 640
26.8.2 第一個更改獲勝 641
26.9 背景關係池 644
26.10 使用事務 644
26.10.1 使用隱式的事務 644
26.10.2 建立顯式的事務 646
26.11 遷移 647
26.11.1 準備專案檔案 647
26.11.2 利用ASP.NET Core MVC 託管應用程式 648
26.11.3 託管.NET Core 控制檯應用程式 648
26.11.4 建立遷移 649
26.11.5 以程式設計方式應用遷移 651
26.11.6 應用遷移的其他方法 652
26.12 小結 652
第27 章 本地化 653
27.1 全球市場 653
27.2 System.Globalization 名稱空間 654
27.2.1 Unicode 問題 654
27.2.2 區域性和區域 655
27.2.3 使用區域性 658
27.2.4 排序 663
27.3 資源 664
27.3.1 資源讀取器和寫入器 664
27.3.2 使用資源檔案生成器 665
27.3.3 透過ResourceManager 使用資源檔案 666
27.3.4 System.Resources 名稱空間 666
27.4 使用ASP.NET Core 本地化 667
27.4.1 註冊本地化服務 667
27.4.2 註入本地化服務 668
27.4.3 區域性提供程式 668
27.4.4 在ASP.NET Core 中使用資源 669
27.4.5 使用控制器和檢視進行本地化 670
27.5 本地化UWP 674
27.5.1 給UWP 使用資源 674
27.5.2 使用多語言應用程式工具集進行本地化 675
27.6 小結 677
第28 章 測試 678
28.1 概述 678
28.2 使用MSTest 進行單元測試 679
28.2.1 使用MSTest 建立單元測試 679
28.2.2 執行單元測試 681
28.2.3 使用MSTest 預期異常 682
28.2.4 測試全部程式碼路徑 683
28.2.5 外部依賴 683
28.3 使用xUnit 進行單元測試 685
28.3.1 使用xUnit 和.NET Core 686
28.3.2 建立Fact 屬性 686
28.3.3 建立Theory 特性 687
28.3.4 使用Mocking 庫 688
28.4 實時單元測試 690
28.5 使用EF Core 進行單元測試 692
28.6 使用Windows 應用程式進行UI測試 693
28.7 Web 整合、負載和效能測試 697
28.7.1 ASP.NET Core 整合測試 697
28.7.2 建立Web 測試 698
28.7.3 執行Web 測試 700
28.8 小結 702
第29 章 跟蹤、日誌和分析 703
29.1 診斷概述 703
29.2 使用EventSource 跟蹤 704
29.2.1 EventSource 的簡單用法 705
29.2.2 跟蹤工具 706
29.2.3 派生自EventSource 707
29.2.4 使用註釋和EventSource 709
29.2.5 建立事件清單樣式 710
29.2.6 使用活動ID 712
29.3 建立自定義偵聽器 714
29.4 使用ILogger 介面編寫日誌 715
29.4.1 配置提供程式 716
29.4.2 使用作用域 717
29.4.3 過濾 718
29.4.4 配置日誌記錄 718
29.4.5 使用沒有依賴註入的ILogger 719
29.5 使用Visual Studio App Center進行分析 720
29.6 小結 722
第III 部分 Web 應用程式和服務
第30 章 ASP.NET Core 727
30.1 概述 727
30.2 Web 技術 728
30.2.1 HTML 728
30.2.2 CSS 729
30.2.3 JavaScript 和TypeScript 729
30.2.4 指令碼庫 729
30.3 ASP.NET Web 專案 730
30.3.1 啟動 733
30.3.2 示例應用程式 735
30.4 新增客戶端內容 736
30.4.1 為客戶端內容使用工具 737
30.4.2 透過Bower 使用客戶端庫 738
30.4.3 使用JavaScript 包管理器npm 739
30.4.4 捆綁 739
30.4.5 用webpack 打包 740
30.5 請求和響應 741
30.5.1 請求標題 742
30.5.2 查詢字串 744
30.5.3 編碼 745
30.5.4 表單資料 745
30.5.5 cookie 746
30.5.6 傳送JSON 747
30.6 依賴註入 747
30.6.1 定義服務 748
30.6.2 註冊服務 748
30.6.3 註入服務 748
30.6.4 呼叫控制器 749
30.7 簡單的路由 749
30.8 建立自定義的中介軟體 750
30.9 會話狀態 751
30.10 用ASP.NET Core 配置 752
30.10.1 讀取配置 753
30.10.2 修改配置提供程式 755
30.10.3 基於環境的不同配置 756
30.11 小結 757
第31 章 ASP.NET Core MVC 758
31.1 為ASP.NET Core MVC 建立服務 758
31.2 定義路由 760
31.2.1 新增路由 760
31.2.2 使用路由約束 761
31.3 建立控制器 761
31.3.1 理解動作方法 762
31.3.2 使用引數 762
31.3.3 傳回資料 762
31.3.4 使用Controller 基類和POCO控制器 763
31.4 建立檢視 765
31.4.1 向檢視傳遞資料 765
31.4.2 Razor 語法 766
31.4.3 建立強型別檢視 766
31.4.4 定義佈局 767
31.4.5 用部分檢視定義內容 770
31.4.6 使用檢視元件 773
31.4.7 在檢視中使用依賴註入 774
31.4.8 為多個檢視匯入名稱空間 775
31.5 從客戶端提交資料 775
31.5.1 模型系結器 777
31.5.2 註解和驗證 778
31.6 使用HTML Helper 779
31.6.1 簡單的Helper 779
31.6.2 使用模型資料 779
31.6.3 定義HTML 特性 780
31.6.4 建立串列 780
31.6.5 強型別化的Helper 781
31.6.6 編輯器擴充套件 782
31.6.7 實現模板 782
31.7 Tag Helper 783
31.7.1 啟用Tag Helper 783
31.7.2 使用錨定Tag Helper 783
31.7.3 使用Label Tag Helper 784
31.7.4 使用Input Tag Helper 785
31.7.5 使用表單進行驗證 786
31.7.6 environment Tag Helper 787
31.7.7 建立自定義Tag Helper 788
31.7.8 用Tag Helper 建立元素 790
31.8 實現動作過濾器 792
31.9 建立資料驅動的應用程式 793
31.9.1 定義模型 794
31.9.2 建立資料庫 795
31.9.3 建立服務 796
31.9.4 建立控制器 798
31.9.5 建立檢視 800
31.10 實現身份驗證和授權 803
31.10.1 儲存和檢索使用者資訊 803
31.10.2 啟動身份系統 804
31.10.3 執行使用者註冊 804
31.10.4 設定使用者登入 806
31.10.5 驗證使用者的身份 807
31.10.6 使用Azure Active Directory 對使用者進行身份驗證 807
31.11 Razor 頁面 812
31.11.1 建立一個Razor 頁面專案 812
31.11.2 實現資料訪問 813
31.11.3 使用行內程式碼 814
31.11.4 使用行內程式碼和頁面模型 816
31.11.5 使用程式碼隱藏檔案 817
31.11.6 頁面引數 817
31.12 小結 818
第32 章 Web API 819
32.1 概述 819
32.2 建立服務 820
32.2.1 定義模型 821
32.2.2 建立服務 821
32.2.3 建立控制器 823
32.2.4 修改響應格式 824
32.2.5 REST 結果和狀態碼 825
32.3 建立非同步服務 826
32.4 建立.NET 客戶端 827
32.4.1 傳送GET 請求 828
32.4.2 從服務中接收XML 832
32.4.3 傳送POST 請求 833
32.4.4 傳送PUT 請求 833
32.4.5 傳送DELETE 請求 834
32.5 寫入資料庫 835
32.5.1 使用EF Core 835
32.5.2 建立資料訪問服務 836
32.6 用OpenAPI 或Swagger 建立元資料 837
32.7 建立和使用OData服務 841
32.7.1 建立資料模型 842
32.7.2 建立資料庫 843
32.7.3 OData 啟動程式碼 844
32.7.4 建立OData 控制器 844
32.7.5 OData 查詢 845
32.8 使用Azure Function 847
32.8.1 建立Azure Function 847
32.8.2 使用依賴註入容器 848
32.8.3 實現GET、POST 和PUT 請求 849
32.8.4 執行Azure Function 851
32.9 小結 852
第IV 部分 應用程式
第33 章 Windows 應用程式 855
33.1 Windows 應用程式簡介 855
33.1.1 Windows 執行庫 856
33.1.2 Hello, Windows 856
33.1.3 應用程式清單檔案 857
33.1.4 應用程式啟動 859
33.1.5 主頁 859
33.2 XAML 861
33.2.1 XAML 標準 861
33.2.2 將元素對映到類 861
33.2.3 透過XAML 使用定製的.NET 類 862
33.2.4 將屬性用作特性 863
33.2.5 將屬性用作元素 863
33.2.6 依賴屬性 864
33.2.7 建立依賴屬性 864
33.2.8 值變更回呼和事件 865
33.2.9 路由事件 866
33.2.10 附加屬性 867
33.2.11 標記擴充套件 868
33.2.12 自定義標記擴充套件 869
33.2.13 條件XAML 870
33.3 控制元件 871
33.3.1 框架派生的UI 元素 872
33.3.2 控制元件派生的控制元件 875
33.3.3 範圍控制元件 881
33.3.4 內容控制元件 882
33.3.5 按鈕 883
33.3.6 項控制元件 884
33.3.7 Flyout 控制元件 884
33.4 資料系結 884
33.4.1 用INotifyPropertyChanged 更改通知 885
33.4.2 建立圖書串列 886
33.4.3 串列系結 887
33.4.4 把事件系結到方法 887
33.4.5 使用資料模板和資料模板選擇器 888
33.4.6 系結簡單物件 890
33.4.7 值的轉換 891
33.5 導航 892
33.5.1 導航回最初的頁面 892
33.5.2 重寫Page 類的導航 893
33.5.3 在頁面之間導航 894
33.5.4 後退按鈕 895
33.5.5 Hub 896
33.5.6 Pivot 898
33.5.7 NavigationView 899
33.6 佈局 902
33.6.1 StackPanel 902
33.6.2 Canvas 903
33.6.3 Grid 903
33.6.4 VariableSizedWrapGrid 904
33.6.5 RelativePanel 906
33.6.6 自適應觸發器 906
33.6.7 XAML 檢視 909
33.6.8 延遲載入 909
33.7 小結 910
第34 章 樣式和XAML 應用程式 911
34.1 使用 MVVM 的原因 911
34.2 定義 MVVM 樣式 912
34.3 共享程式碼 913
34.3.1 使用API 協定和通用Windows平臺 913
34.3.2 使用共享專案 915
34.3.3 使用.NET 標準庫 916
34.4 示例解決方案 917
34.5 模型 918
34.5.1 實現變更通知 918
34.5.2 使用Repository 樣式 919
34.6 服務 920
34.7 檢視模型 921
34.7.1 使用IEditableObject 923
34.7.2 檢視模型的具體實現 924
34.7.3 命令 925
34.7.4 服務、ViewModel 和依賴註入 926
34.8 檢視 927
34.8.1 從檢視模型中開啟對話方塊 930
34.8.2 頁面之間的導航 931
34.8.3 自適應使用者介面 933
34.8.4 顯示進度資訊 935
34.8.5 使用串列項中的操作 936
34.9 使用事件傳遞訊息 938
34.10 使用框架 939
34.11 小結 940
第35 章 樣式化Windows 應用程式 941
35.1 樣式設定 941
35.2 形狀 942
35.3 幾何圖形 944
35.3.1 使用段的幾何圖形 944
35.3.2 使用PathMarkup 的幾何圖形 945
35.4 變換 945
35.4.1 縮放 945
35.4.2 平移 946
35.4.3 旋轉 946
35.4.4 傾斜 946
35.4.5 組合變換和複合變換 946
35.4.6 使用矩陣的變換 947
35.5 畫筆 947
35.5.1 SolidColorBrush 947
35.5.2 LinearGradientBrush 947
35.5.3 ImageBrush 948
35.5.4 AcrylicBrush 948
35.5.5 RevealBrush 949
35.6 樣式和資源 949
35.6.1 樣式 949
35.6.2 資源 951
35.6.3 從程式碼中訪問資源 952
35.6.4 資源字典 952
35.6.5 主題資源 953
35.7 模板 954
35.7.1 控制元件模板 955
35.7.2 資料模板 958
35.7.3 樣式化ListView 959
35.7.4 ListView 項的資料模板 960
35.7.5 項容器的樣式 960
35.7.6 項面板 961
35.7.7 串列檢視的控制元件模板 961
35.8 動畫 962
35.8.1 時間軸 962
35.8.2 緩動函式 964
35.8.3 關鍵幀動畫 968
35.8.4 過渡 969
35.9 視覺化狀態管理器 971
35.9.1 用控制元件模板預定義狀態 972
35.9.2 定義自定義狀態 973
35.9.3 設定自定義的狀態 973
35.10 小結 974
第36 章 高階Windows 應用程式 975
36.1 概述 975
36.2 應用程式的生命週期 976
36.2.1 應用程式的執行狀態 976
36.2.2 在頁面之間導航 976
36.3 導航狀態 978
36.3.1 暫停應用程式 979
36.3.2 啟用暫停的應用程式 980
36.3.3 測試暫停 980
36.3.4 頁面狀態 981
36.4 共享資料 983
36.4.1 共享源 983
36.4.2 共享標的 986
36.5 應用程式服務 991
36.5.1 建立模型 991
36.5.2 為應用程式服務連線建立後臺任務 992
36.5.3 註冊應用程式服務 993
36.5.4 呼叫應用程式服務 994
36.6 高階的編譯系結 996
36.6.1 已編譯資料系結的生命週期 996
36.6.2 系結到方法上 997
36.6.3 用x:Bind 分階段 998
36.7 使用文字 1002
36.7.1 使用字型 1002
36.7.2 行內和塊元素 1004
36.7.3 使用上限溢位區域 1005
36.8 上墨 1008
36.9 自動建議 1011
36.10 小結 1013
第37 章 Xamarin.Forms 1015
37.1 Xamarin 開發入門 1015
37.1.1 用Android 架構Xamarin 1016
37.1.2 用iOS 架構Xamarin 1016
37.1.3 Xamarin.Forms 1017
37.2 Xamarin 開發工具 1018
37.2.1 Android 1018
37.2.2 iOS 1019
37.2.3 Visual Studio 2017 1019
37.2.4 Visual Studio for Mac 1019
37.2.5 Visual Studio App Center 1020
37.3 Android 基礎 1020
37.3.1 活動 1021
37.3.2 資源 1022
37.3.3 顯示串列 1022
37.3.4 顯示訊息 1024
37.4 iOS 基礎 1025
37.4.1 iOS 應用程式結構 1025
37.4.2 故事板 1026
37.4.3 控制器 1028
37.4.4 顯示訊息 1028
37.5 Xamarin. Forms 應用程式 1029
37.5.1 託管Xamarin 的Windows應用程式 1029
37.5.2 託管Xamarin 的Android 1030
37.5.3 託管Xamarin 的iOS 1031
37.5.4 共享的專案 1031
37.6 使用公共庫 1032
37.7 控制元件層次結構 1032
37.8 頁面 1033
37.9 導航 1034
37.10 佈局 1035
37.11 檢視 1037
37.12 資料系結 1037
37.13 命令 1038
37.14 ListView 和ViewCell 1038
37.15 小結 1039
附贈章節電子版(請掃描封底二維碼獲取)
第1 章 Composition 1
BC1.1 概述 1
BC1.2 Composition 庫的體系結構 2
BC1.2.1 使用特性的Composition 3
BC1.2.2 基於約定的部件註冊 8
BC1.3 定義協定 10
BC1.4 匯出部件 13
BC1.4.1 建立部件 13
BC1.4.2 使用部件的部件 17
BC1.4.3 匯出元資料 17
BC1.4.4 使用元資料進行惰性載入 19
BC1.5 匯入部件 19
BC1.5.1 匯入連線 22
BC1.5.2 部件的惰性載入 23
BC1.5.3 讀取元資料 23
BC1.6 小結 25
第2 章 XML 和JSON 26
BC2.1 資料格式 26
BC2.1.1 XML 27
BC2.1.2 .NET 支援的XML 標準 28
BC2.1.3 在框架中使用XML 28
BC2.1.4 JSON 29
BC2.2 讀寫流格式的XML 30
BC2.2.1 使用XmlReader 類讀取XML 31
BC2.2.2 使用XmlWriter 類 33
BC2.3 在.NET 中使用DOM 34
BC2.3.1 使用XmlDocument 類讀取 35
BC2.3.2 遍歷層次結構 35
BC2.3.3 使用XmlDocument 插入節點 36
BC2.4 使用XPathNavigator 類 37
BC2.4.1 XPathDocument 類 37
BC2.4.2 XPathNavigator 類 37
BC2.4.3 XPathNodeIterator 類 38
BC2.4.4 使用XPath 導航XML 38
BC2.4.5 使用XPath 評估 39
BC2.4.6 用XPath 修改XML 39
BC2.5 在XML 中序列化物件 40
BC2.5.1 序列化簡單物件 40
BC2.5.2 序列化一個物件樹 42
BC2.5.3 沒有特性的序列化 44
BC2.6 LINQ to XML 46
BC2.6.1 XDocument 物件 46
BC2.6.2 XElement 物件 47
BC2.6.3 XNamespace 物件 47
BC2.6.4 XComment 物件 49
BC2.6.5 XAttribute 物件 49
BC2.6.6 使用LINQ 查詢XML 檔案 50
BC2.6.7 查詢動態的XML 檔案 50
BC2.6.8 轉換為物件 52
BC2.6.9 轉換為XML 52
BC2.7 JSON 53
BC2.7.1 建立JSON 53
BC2.7.2 轉換物件 54
BC2.7.3 序列化物件 55
BC2.7.4 遍歷JSON 節點 55
BC2.8 小結 56
第3 章 WebHooks 和SignalR 57
BC3.1 概述 57
BC3.2 WebSockets 58
BC3.2.1 WebSockets 伺服器 58
BC3.2.2 WebSockets 客戶端 60
BC3.3 使用SignalR 的簡單聊天程式 62
BC3.3.1 建立集線器 62
BC3.3.2 用HTML 和JavaScript 建立客戶端 63
BC3.3.3 建立SignalR .NET 客戶端 65
BC3.4 分組連線 68
BC3.4.1 用分組擴充套件集線器 68
BC3.4.2 用分組擴充套件Windows 客戶端 69
BC3.5 WebHooks 的體系結構 71
BC3.6 建立Dropbox 和GitHub 接收器 72
BC3.6.1 建立Web 應用程式 73
BC3.6.2 為Dropbox 和GitHub 配置WebHooks 73
BC3.6.3 實現處理程式 73
BC3.6.4 用Dropbox 和GitHub 配置應用程式 76
BC3.6.5 執行應用程式 77
BC3.7 小結 77
第4 章 機器人和認知服務 79
BC4.1 機器人的定義 79
BC4.2 建立對話方塊機器人 80
BC4.2.1 配置狀態服務 81
BC4.2.2 接收機器人訊息 .82
BC4.2.3 定義對話方塊 83
BC4.2.4 使用PromptDialog 85
BC4.3 為對話方塊使用Form Flow 88
BC4.4 建立英雄卡 89
BC4.5 機器人和LUIS 91
BC4.5.1 定義意圖和話語 92
BC4.5.2 訪問LUIS 中的建議 95
BC4.5.3 使用帶有活動檢查的Form Flow 96
BC4.6 小結 96
第5 章 Windows 應用程式的更多特性 97
BC5.1 概述 97
BC5.2 相機 98
BC5.3 Geolocation 和MapControl 99
BC5.3.1 使用MapControl 99
BC5.3.2 使用Geolocator 定位資訊 102
BC5.3.3 街景地圖 103
BC5.3.4 繼續請求位置資訊 104
BC5.4 感測器 105
BC5.4.1 光線 106
BC5.4.2 羅盤 107
BC5.4.3 加速計 107
BC5.4.4 傾斜計 108
BC5.4.5 陀螺儀 109
BC5.4.6 方向 109
BC5.4.7 Rolling Marble 示例 110
BC5.5 小結 112
已傳送
朋友將在看一看看到
寫下你的想法…
朋友會在“發現-看一看”看到你“在看”的內容