內容簡介
C# 7內幕指南,包括高級新特性 目前Visual Studio 2017提供了C# 7。發布為NuGet包的每個.NET Core部分都進行了更新。閱讀這本專家級指南是經驗豐富的程式設計師提高效率的更捷徑。C# 7以更快的速度完成更多工作,沒有人比Christian Nagel更適合傳播在現實世界中極有價值的權威信息。本書論述清晰,內容完整詳盡,為開發人員展示了如何將.NET引入非微軟平台,如何操作這些平台上的工具,例如Docker、Gulp和NPM。 ★為需要新工具的高級開發人員介紹了C# 7和.NET Core 2.0的擴展新特性 ★揭示了Visual Studio 2017的新技巧和切合實際的提示,包括新的用戶界面、新增的模板、編輯器的改進等 ★論述了計畫工作流的全新方式,使編碼更快,診斷和調試更精確,測試更頻繁,發布更自信 ★為開發在And...(展開全部) C# 7內幕指南,包括高級新特性 目前Visual Studio 2017提供了C# 7。發布為NuGet包的每個.NET Core部分都進行了更新。閱讀這本專家級指南是經驗豐富的程式設計師提高效率的更捷徑。C# 7以更快的速度完成更多工作,沒有人比Christian Nagel更適合傳播在現實世界中極有價值的權威信息。本書論述清晰,內容完整詳盡,為開發人員展示了如何將.NET引入非微軟平台,如何操作這些平台上的工具,例如Docker、Gulp和NPM。 ★為需要新工具的高級開發人員介紹了C# 7和.NET Core 2.0的擴展新特性 ★揭示了Visual Studio 2017的新技巧和切合實際的提示,包括新的用戶界面、新增的模板、編輯器的改進等 ★論述了計畫工作流的全新方式,使編碼更快,診斷和調試更精確,測試更頻繁,發布更自信 ★為開發在Android、iOS、Windows、Linux、網路和雲上運行的應用程式提供了循序漸進的指南 ★掌握Visual Studio的高效率特性,以加速AI革新 Christian Nagel是Visual Studio和開發技術方向的Microsoft MVP、軟體架構師、資深開發人員,自2000年開始就使用.NET技術建立解決方案。他編著過多本暢銷的.NET圖書,經常在Ignite和Tech Days等國際會議上發言,是.NET用戶組的主要支持者。他擁有微軟認證培訓師(MCT)稱號,是通用Windows應用程式、ASP.NET Core和Microsoft Azure的專業開發人員。
Christian Nagel是Visual Studio和開發技術方向的Microsoft MVP、軟體架構師、資深開發人員,自2000年開始就使用.NET技術建立解決方案。他編著過多本暢銷的.NET圖書,經常在Ignite和Tech Days等國際會議上發言,是.NET用戶組的主要支持者。他擁有微軟認證培訓師(MCT)稱號,是通用Windows應用程式、ASP.NET Core和Microsoft Azure的專業開發人員。
目錄
第 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
· · · · · · (收起)