C# 10 和 .NET 6 入門與跨平臺開發, 6/e C# 10 and .NET 6 – Modern Cross-Platform Development: Build apps, websites, and services with ASP.NET Core 6, Blazor, and EF Core 6 using Visual Studio 2022 and Visual Studio Code
Mark J. Price 譯 葉偉民
- 出版商: 清華大學
- 出版日期: 2022-09-01
- 定價: $1,008
- 售價: 8.5 折 $857
- 語言: 簡體中文
- ISBN: 7302612722
- ISBN-13: 9787302612728
-
相關分類:
.NET、C#
- 此書翻譯自: C# 10 and .NET 6 – Modern Cross-Platform Development: Build apps, websites, and services with ASP.NET Core 6, Blazor, and EF Core 6 using Visual Studio 2022 and Visual Studio Code (Paperback)
-
其他版本:
C# 11 和.NET 7 入門與跨平臺開發, 7/e
買這商品的人也買了...
-
$560$437 -
$550$429 -
$414$393 -
$1,000$780 -
$600$468 -
$594$564 -
$880$695 -
$620$484 -
$714$678 -
$520$410 -
$505從零開始學 Node.js
-
$509Kotlin 移動和服務器端應用開發
-
$1,034C# 高級編程, 12/e
-
$500$390 -
$768$730 -
$607SQL 數據分析實戰, 2/e
-
$1,014$963 -
$680$530 -
$650$514 -
$860$679 -
$620$484 -
$880$695 -
$714$678 -
$640$480 -
$1,930$1,834
商品描述
這個新版本對上一版做了全面修訂,涵蓋 C# 10和.NET 6的所有新功能。 本書討論面向對象編程、編寫函數、測試函數、調試函數、實現接口以及繼承類等主題;介紹.NET API,這些API可執行多種任務,如管理和查詢數據,監視和改進性能,以及使用文件系統、異步流、序列化和加密。你可用ASP.NET Core來構建和部署本書列舉的跨平臺示例應用程序,如網站和服務。 在學習C#語言和許多.NET庫的過程中,為確保不會因不必要的應用代碼而分心,第1~12章構建的是控制台應用程序;打下堅實基礎後,第13~17章再使用ASP.NET Core、MVC模式以及Blazor構建實際的應用程序和服務。 第18章講述如何使用Web API、OData、gRPC、GraphQL、SignalR和Azure Functions等技術構建服務;第19章討論如何使用.NET MAUI構建跨平臺應用程序。
目錄大綱
目 錄
第1章 C#與.NET入門 1
1.1 設置開發環境 2
1.1.1 選擇適合學習的工具和應用程序類型 2
1.1.2 跨平臺部署 4
1.1.3 下載並安裝Visual Studio 2022 for Windows 5
1.1.4 下載並安裝 Visual Studio Code 6
1.2 理解.NET 8
1.2.1 理解.NET Framework 8
1.2.2 理解Mono、Xamarin和Unity項目 8
1.2.3 理解.NET Core 8
1.2.4 瞭解.NET的未來版本 9
1.2.5 瞭解.NET支持 10
1.2.6 現代.NET的區別 11
1.2.7 現代.NET的主題 12
1.2.8 瞭解.NET Standard 12
1.2.9 本書使用的.NET平臺和工具 13
1.2.10 理解中間語言 13
1.2.11 比較.NET技術 14
1.3 使用Visual Studio 2022構建控制台應用程序 14
1.3.1 使用Visual Studio 2022管理多個項目 14
1.3.2 使用Visual Studio 2022編寫代碼 14
1.3.3 使用Visual Studio編譯和運行代碼 15
1.3.4 編寫頂級程序 16
1.3.5 使用Visual Studio 2022添加第二個項目 17
1.4 使用Visual Studio Code構建控制台應用程序 19
1.4.1 使用Visual Studio Code管理多個項目 19
1.4.2 使用Visual Studio Code編寫代碼 19
1.4.3 使用dotnet命令行編譯和運行代碼 21
1.4.4 使用Visual Studio Code添加第二個項目 22
1.4.5 使用Visual Studio Code管理多個文件 23
1.5 使用.NET Interactive Notebooks探索代碼 23
1.5.1 創建一個Notebook 23
1.5.2 在Notebook上編寫和運行代碼 24
1.5.3 保存Notebook 25
1.5.4 給Notebook添加Markdown和特殊命令 25
1.5.5 在多個單元中執行代碼 26
1.5.6 為本書中的代碼使用.NET Interactive Notebooks 27
1.6 檢查項目的文件夾和文件 27
1.6.1 瞭解常見的文件夾和文件 28
1.6.2 理解GitHub中的解決方案代碼 28
1.7 充分利用本書的GitHub存儲庫 28
1.7.1 對本書提出問題 29
1.7.2 反饋 29
1.7.3 從GitHub存儲庫下載解決方案代碼 29
1.7.4 使用Git、Visual Studio Code和命令行 30
1.8 尋求幫助 30
1.8.1 閱讀微軟文檔 30
1.8.2 獲取關於dotnet工具的幫助 30
1.8.3 獲取類型及其成員的定義 31
1.8.4 在Stack Overflow上尋找答案 33
1.8.5 使用谷歌搜索答案 33
1.8.6 訂閱官方的.NET博客 33
1.8.7 觀看Scott Hanselman的視頻 34
1.9 實踐和探索 34
1.9.1 練習1.1:測試你掌握的知識 34
1.9.2 練習1.2:在任何地方練習C# 34
1.9.3 練習1.3:探索主題 34
1.10 本章小結 35
第2章 C#編程基礎 36
2.1 介紹C# 36
2.1.1 理解語言版本和特性 36
2.1.2 瞭解C#標準 39
2.1.3 發現C#編譯器版本 40
2.2 理解C#語法和詞匯 41
2.2.1 顯示編譯器版本 42
2.2.2 瞭解C#語法 43
2.2.3 語句 43
2.2.4 註釋 43
2.2.5 塊 44
2.2.6 語句和塊的示例 44
2.2.7 瞭解C#詞匯表 44
2.2.8 將編程語言與人類語言進行比較 44
2.2.9 改變C#語法的配色方案 45
2.2.10 如何編寫正確的代碼 45
2.2.11 導入名稱空間 46
2.2.12 動詞表示方法 48
2.2.13 名詞表示類型、變量、字段和屬性 49
2.2.14 揭示C#詞匯表的範圍 49
2.3 使用變量 51
2.3.1 命名和賦值 51
2.3.2 字面值 52
2.3.3 存儲文本 52
2.3.4 存儲數字 53
2.3.5 存儲實數 54
2.3.6 存儲布爾值 57
2.3.7 存儲任何類型的對象 57
2.3.8 動態存儲類型 58
2.3.9 聲明局部變量 59
2.3.10 獲取和設置類型的默認值 61
2.3.11 在數組中存儲多個值 61
2.4 深入研究控制台應用程序 62
2.4.1 向用戶顯示輸出 63
2.4.2 從用戶那裡獲取文本輸入 65
2.4.3 簡化控制台的使用 66
2.4.4 獲取用戶的重要輸入 66
2.4.5 向控制台應用程序傳遞參數 67
2.4.6 使用參數設置選項 68
2.4.7 處理不支持API的平臺 70
2.5 實踐和探索 71
2.5.1 練習2.1:測試你掌握的知識 71
2.5.2 練習2.2:測試對數字類型的瞭解 72
2.5.3 練習2.3:練習數字的大小和範圍 72
2.5.4 練習2.4:探索主題 72
2.6 本章小結 73
第3章 控製程序流程、轉換類型和處理異常 74
3.1 操作變量 74
3.1.1 一元算術運算符 75
3.1.2 二元算術運算符 76
3.1.3 賦值運算符 77
3.1.4 邏輯運算符 77
3.1.5 條件邏輯運算符 78
3.1.6 按位和二元移位運算符 79
3.1.7 其他運算符 80
3.2 理解選擇語句 81
3.2.1 使用if語句進行分支 81
3.2.2 模式匹配與if語句 82
3.2.3 使用switch語句進行分支 83
3.2.4 模式匹配與switch語句 84
3.2.5 使用switch表達式簡化switch語句 86
3.3 理解迭代語句 86
3.3.1 while循環語句 86
3.3.2 do循環語句 87
3.3.3 for循環語句 87
3.3.4 foreach循環語句 88
3.4 類型轉換 88
3.4.1 隱式和顯式地轉換數值 89
3.4.2 使用System.Convert類型進行轉換 90
3.4.3 圓整數字 90
3.4.4 控制圓整規則 91
3.4.5 從任何類型轉換為字符串 92
3.4.6 從二進制對象轉換為字符串 92
3.4.7 將字符串轉換為數值或日期和時間 93
3.5 處理異常 94
3.6 檢查溢出 98
3.6.1 使用checked語句拋出溢出異常 98
3.6.2 使用unchecked語句禁用編譯時檢查溢出 99
3.7 實踐和探索 100
3.7.1 練習3.1:測試你掌握的知識 100
3.7.2 練習3.2:探索循環和溢出 100
3.7.3 練習3.3:實踐循環和運算符 101
3.7.4 練習3.4:實踐異常處理 101
3.7.5 練習3.5:測試你對運算符的認識程度 101
3.7.6 練習3.6:探索主題 102
3.8 本章小結 102
第4章 編寫、調試和測試函數 103
4.1 編寫函數 103
4.1.1 乘法表示例 103
4.1.2 編寫帶返回值的函數 105
4.1.3 將數字從序數轉換為基數 106
4.1.4 用遞歸計算階乘 108
4.1.5 使用XML註釋解釋函數 110
4.1.6 在函數實現中使用lambda 111
4.2 在開發過程中進行調試 113
4.2.1 創建帶有故意錯誤的代碼 113
4.2.2 設置斷點並開始調試 114
4.2.3 使用調試工具欄進行導航 116
4.2.4 調試窗格 117
4.2.5 單步執行代碼 117
4.2.6 自定義斷點 119
4.3 在開發和運行時進行日誌記錄 120
4.3.1 理解日誌記錄選項 120
4.3.2 使用Debug和Trace類型 120
4.3.3 配置跟蹤偵聽器 122
4.3.4 切換跟蹤級別 123
4.4 單元測試 127
4.4.1 理解測試類型 127
4.4.2 創建需要測試的類庫 128
4.4.3 編寫單元測試 129
4.5 在函數中拋出和捕獲異常 131
4.5.1 理解使用錯誤和執行錯誤 131
4.5.2 在函數中通常拋出異常 131
4.5.3 理解調用堆棧 132
4.5.4 在哪裡捕獲異常 134
4.5.5 重新拋出異常 134
4.5.6 實現tester-doer模式 136
4.6 實踐和探索 136
4.6.1 練習4.1:測試你掌握的知識 137
4.6.2 練習4.2:使用調試和單元測試練習函數的編寫 137
4.6.3 練習4.3:探索主題 137
4.7 本章小結 138
第5章 使用面向對象編程技術構建自己的類型 139
5.1 面向對象編程 139
5.2 構建類庫 140
5.2.1 創建類庫 140
5.2.2 在名稱空間中定義類 141
5.2.3 成員 142
5.2.4 實例化類 142
5.2.5 導入名稱空間以使用類型 143
5.2.6 對象 144
5.3 在字段中存儲數據 145
5.3.1 定義字段 145
5.3.2 理解訪問修飾符 145
5.3.3 設置和輸出字段值 146
5.3.4 使用enum類型存儲值 146
5.3.5 使用enum類型存儲多個值 147
5.4 使用集合存儲多個值 149
5.4.1 理解泛型集合 149
5.4.2 使字段成為靜態字段 150
5.4.3 使字段成為常量 151
5.4.4 使字段只讀 151
5.4.5 使用構造函數初始化字段 152
5.5 寫入和調用方法 153
5.5.1 從方法返回值 153
5.5.2 使用元組組合多個返回值 154
5.5.3 定義參數並將參數傳遞給方法 157
5.5.4 重載方法 157
5.5.5 傳遞可選參數和命名參數 158
5.5.6 控制參數的傳遞方式 159
5.5.7 理解ref返回 160
5.5.8 使用partial關鍵字分割類 160
5.6 使用屬性和索引器控制訪問 161
5.6.1 定義只讀屬性 161
5.6.2 定義可設置的屬性 162
5.6.3 要求在實例化期間設置屬性 163
5.6.4 定義索引器 164
5.7 模式匹配和對象 165
5.7.1 創建和引用.NET 6類庫 165
5.7.2 定義飛機乘客 165
5.7.3 C# 9.0對模式匹配做了增強 167
5.8 使用記錄 167
5.8.1 init-only屬性 167
5.8.2 理解記錄 168
5.8.3 記錄中的位置數據成員 169
5.9 實踐和探索 170
5.9.1 練習5.1:測試你掌握的知識 170
5.9.2 練習5.2:探索主題 170
5.10 本章小結 170
第6章 實現接口和繼承類 171
6.1 建立類庫和控制台應用程序 171
6.2 方法的更多信息 172
6.2.1 使用方法實現功能 173
6.2.2 使用運算符實現功能 174
6.2.3 使用局部函數實現功能 175
6.3 觸發和處理事件 176
6.3.1 使用委托調用方法 176
6.3.2 定義和處理委托 177
6.3.3 定義和處理事件 178
6.4 使用泛型安全地重用類型 179
6.4.1 使用非泛型類型 179
6.4.2 使用泛型類型 180
6.5 實現接口 181
6.5.1 公共接口 181
6.5.2 排序時比較對象 181
6.5.3 使用單獨的類比較對象 183
6.5.4 隱式和顯式接口實現 184
6.5.5 使用默認實現定義接口 185
6.6 使用引用類型和值類型管理內存 186
6.6.1 定義引用類型和值類型 186
6.6.2 如何在內存中存儲引用和值類型 187
6.6.3 類型的相等性 188
6.6.4 定義struct類型 189
6.6.5 使用record struct類型 190
6.6.6 釋放非托管資源 190
6.6.7 確保調用Dispose方法 192
6.7 使用空值 192
6.7.1 使值類型可為空 192
6.7.2 理解可空引用類型 193
6.7.3 啟用可空引用類型和不可空引用類型 193
6.7.4 聲明非空變量和參數 194
6.7.5 檢查null 195
6.8 從類繼承 196
6.8.1 擴展類以添加功能 197
6.8.2 隱藏成員 197
6.8.3 覆蓋成員 198
6.8.4 從抽象類繼承 199
6.8.5 防止繼承和覆蓋 200
6.8.6 理解多態 200
6.9 在繼承層次結構中進行類型轉換 202
6.9.1 隱式類型轉換 202
6.9.2 顯式類型轉換 202
6.9.3 避免類型轉換異常 202
6.10 繼承和擴展.NET類型 204
6.10.1 繼承異常 204
6.10.2 無法繼承時擴展類型 205
6.11 使用分析器編寫更好的代碼 207
6.12 實踐和探索 211
6.12.1 練習6.1:測試你掌握的知識 211
6.12.2 練習6.2:練習創建繼承層次結構 212
6.12.3 練習6.3:探索主題 212
6.13 本章小結 212
第7章 理解和打包.NET類型 213
7.1 .NET 6簡介 213
7.1.1 .NET Core 1.0 214
7.1.2 .NET Core 1.1 214
7.1.3 .NET Core 2.0 214
7.1.4 .NET Core 2.1 214
7.1.5 .NET Core 2.2 215
7.1.6 .NET Core 3.0 215
7.1.7 .NET Core 3.1 215
7.1.8 .NET 5.0 215
7.1.9 .NET 6.0 216
7.1.10 從.NET Core 2.0到.NET 5不斷提高性能 216
7.1.11 檢查.NET SDK以進行更新 216
7.2 瞭解.NET組件 216
7.2.1 程序集、包和名稱空間 217
7.2.2 微軟.NET SDK平臺 217
7.2.3 理解程序集中的名稱空間和類型 218
7.2.4 NuGet包 218
7.2.5 框架 219
7.2.6 導入名稱空間以使用類型 219
7.2.7 將C#關鍵字與.NET類型相關聯 220
7.2.8 使用.NET Standard在舊平臺之間共享代碼 222
7.2.9 理解不同SDK中類庫的默認值 222
7.2.10 創建.NET Standard 2.0類庫 223
7.2.11 控制.NET SDK 223
7.3 發布用於部署的代碼 224
7.3.1 創建要發布的控制台應用程序 225
7.3.2 dotnet命令 226
7.3.3 獲取關於.NET及其環境的信息 227
7.3.4 管理項目 227
7.3.5 發布自包含的應用程序 228
7.3.6 發布單文件應用 229
7.3.7 使用app trimming系統減小應用程序的大小 230
7.4 反編譯程序集 231
7.4.1 使用Visual Studio 2022的ILSpy擴展進行反編譯 231
7.4.2 使用Visual Studio Code的ILSpy擴展進行反編譯 232
7.4.3 不能在技術上阻止反編譯 235
7.5 為NuGet分發打包自己的庫 236
7.5.1 引用NuGet包 236
7.5.2 為NuGet打包庫 237
7.5.3 使用工具探索NuGet包 240
7.5.4 測試類庫包 241
7.6 從.NET Framework移植到.NET 241
7.6.1 能移植嗎? 242
7.6.2 應該移植嗎? 242
7.6.3 .NET Framework和現代.NET之間的區別 243
7.6.4 .NET可移植性分析器 243
7.6.5 .NET升級助手 243
7.6.6 使用非.NET Standard類庫 243
7.7 使用預覽特性 245
7.7.1 需要預覽特性 245
7.7.2 啟用預覽特性 245
7.7.3 通用數學 246
7.8 實踐和探索 246
7.8.1 練習7.1:測試你掌握的知識 247
7.8.2 練習7.2:探索主題 247
7.8.3 練習7.3:探索PowerShell 247
7.9 本章小結 247
第8章 使用常見的.NET類型 248
8.1 處理數字 248
8.1.1 處理大的整數 249
8.1.2 處理復數 249
8.1.3 理解四元數 250
8.2 處理文本 250
8.2.1 獲取字符串的長度 250
8.2.2 獲取字符串中的字符 251
8.2.3 拆分字符串 251
8.2.4 獲取字符串的一部分 252
8.2.5 檢查字符串的內容 252
8.2.6 連接、格式化和其他的字符串成員方法 253
8.2.7 高效地構建字符串 254
8.3 處理日期和時間 254
8.3.1 指定日期和時間值 254
8.3.2 日期和時間的全球化 256
8.3.3 只使用日期或時間 257
8.4 模式匹配與正則表達式 258
8.4.1 檢查作為文本輸入的數字 258
8.4.2 改進正則表達式的性能 259
8.4.3 正則表達式的語法 260
8.4.4 正則表達式的例子 260
8.4.5 分割使用逗號分隔的復雜字符串 261
8.5 在集合中存儲多個對象 262
8.5.1 所有集合的公共特性 262
8.5.2 通過確保集合的容量來提高性能 264
8.5.3 理解集合的選擇 264
8.5.4 使用列表 267
8.5.5 使用字典 268
8.5.6 處理隊列 270
8.5.7 集合的排序 272
8.5.8 使用專門的集合 272
8.5.9 使用不可變集合 272
8.5.10 集合的最佳實踐 273
8.6 使用Span、索引和範圍 274
8.6.1 通過Span高效地使用內存 274
8.6.2 用索引類型標識位置 274
8.6.3 使用Range值類型標識範圍 274
8.6.4 使用索引、範圍和Span 275
8.7 使用網絡資源 275
8.7.1 使用URI、DNS和IP地址 276
8.7.2 ping服務器 277
8.8 處理反射和屬性 278
8.8.1 程序集的版本控制 279
8.8.2 閱讀程序集元數據 279
8.8.3 創建自定義特性 281
8.8.4 更多地使用反射 283
8.9 處理圖像 283
8.10 國際化代碼 285
8.11 實踐和探索 287
8.11.1 練習8.1:測試你掌握的知識 287
8.11.2 練習8.2:練習正則表達式 287
8.11.3 練習8.3:練習編寫擴展方法 288
8.11.4 練習8.4:探索主題 288
8.12 本章小結 288
第9章 處理文件、流和序列化 289
9.1 管理文件系統 289
9.1.1 處理跨平臺環境和文件系統 289
9.1.2 管理驅動器 291
9.1.3 管理目錄 292
9.1.4 管理文件 293
9.1.5 管理路徑 294
9.1.6 獲取文件信息 294
9.1.7 控制如何處理文件 295
9.2 用流來讀寫 296
9.2.1 理解抽象和具體的流 296
9.2.2 寫入文本流 297
9.2.3 寫入XML流 299
9.2.4 文件資源的釋放 300
9.2.5 壓縮流 302
9.2.6 使用Brotli算法進行壓縮 304
9.3 編碼和解碼文本 306
9.3.1 將字符串編碼為字節數組 306
9.3.2 對文件中的文本進行編碼和解碼 308
9.4 序列化對象圖 309
9.4.1 序列化為XML 309
9.4.2 生成緊湊的XML 311
9.4.3 反序列化XML文件 312
9.4.4 用JSON序列化 313
9.4.5 高性能的JSON處理 314
9.5 控制JSON的處理 315
9.5.1 用於處理HTTP響應的新的JSON擴展方法 317
9.5.2 從Newtonsoft遷移到新的JSON 317
9.6 實踐和探索 318
9.6.1 練習9.1:測試你掌握的知識 318
9.6.2 練習9.2:練習序列化為XML 318
9.6.3 練習9.3:探索主題 319
9.7 本章小結 319
第10章 使用Entity Framework Core處理數據庫 320
10.1 理解現代數據庫 320
10.1.1 理解舊的實體框架 320
10.1.2 理解Entity Framework Core 321
10.1.3 使用EF Core創建控制台應用程序 321
10.1.4 使用示例關系數據庫 322
10.1.5 使用Microsoft SQL Server for Windows 322
10.1.6 為SQL Server創建Northwind示例數據庫 323
10.1.7 使用Server Explorer管理Northwind示例數據庫 324
10.1.8 使用SQLite 325
10.1.9 為SQLite創建Northwind示例數據庫 326
10.1.10 使用SQLiteStudio管理Northwind示例數據庫 326
10.2 設置EF Core 327
10.2.1 選擇EF Core數據提供程序 327
10.2.2 連接到數據庫 328
10.2.3 定義Northwind數據庫上下文類 329
10.3 定義EF Core模型 330
10.3.1 使用EF Core約定定義模型 331
10.3.2 使用EF Core註解特性定義模型 331
10.3.3 使用EF Core Fluent API定義模型 332
10.3.4 為Northwind表構建EF Core模型 333
10.3.5 向Northwind數據庫上下文類添加表 335
11.3.6 安裝dotnet-ef工具 336
10.3.7 使用現有數據庫搭建模型 336
10.3.8 配置約定前模型 340
10.4 查詢EF Core模型 340
10.4.1 過濾結果中返回的實體 342
10.4.2 過濾和排序產品 343
10.4.3 獲取生成的SQL 344
10.4.4 使用自定義日誌提供程序記錄EF Core 345
10.4.5 模式匹配與Like 349
10.4.6 定義全局過濾器 350
10.5 使用EF Core加載模式 350
10.5.1 立即加載實體 350
10.5.2 啟用延遲加載 351
10.5.3 顯式加載實體 352
10.6 使用EF Core操作數據 354
10.6.1 插入實體 354
10.6.2 更新實體 355
10.6.3 刪除實體 356
10.6.4 池化數據庫環境 357
10.7 事務 357
10.7.1 使用隔離級別控制事務 358
10.7.2 定義顯式事務 358
10.8 Code First EF Core模型 359
10.9 實踐和探索 364
10.9.1 練習10.1:測試你掌握的知識 364
10.9.2 練習10.2:練習使用不同的序列化格式導出數據 365
10.9.3 練習10.3:研究EF Core文檔 365
10.9.4 練習10.4:探索NoSQL數據庫 365
10.10 本章小結 365
第11章 使用LINQ查詢和操作數據 366
11.1 編寫LINQ表達式 366
11.1.1 LINQ的組成 366
11.1.2 使用Enumerable類構建LINQ表達式 367
11.1.3 使用Where擴展方法過濾實體 369
11.1.4 以命名方法為目標 371
11.1.5 通過刪除委托的顯式實例化來簡化代碼 371
11.1.6 以lambda表達式為目標 371
11.1.7 實體的排序 372
11.1.8 使用var或指定類型來聲明查詢 373
11.1.9 根據類型進行過濾 373
11.1.10 使用LINQ處理集合 374
11.2 使用LINQ與EF Core 376
11.2.1 構建EF Core模型 376
11.2.2 序列的篩選和排序 379
11.2.3 將序列投影到新的類型中 380
11.2.4 連接和分組序列 381
11.2.5 聚合序列 384
11.3 使用語法糖美化LINQ語法 385
11.4 使用帶有並行LINQ的多個線程 386
11.5 創建自己的LINQ擴展方法 388
11.6 使用LINQ to XML 391
11.6.1 使用LINQ to XML生成XML 391
11.6.2 使用LINQ to XML讀取XML 392
11.7 實踐和探索 393
11.7.1 練習11.1:測試你掌握的知識 393
11.7.2 練習11.2:練習使用LINQ進行查詢 393
11.7.3 練習11.3:探索主題 394
11.8 本章小結 394
第12章 使用多任務提高性能和可伸縮性 395
12.1 理解進程、線程和任務 395
12.2 監控性能和資源使用情況 396
12.2.1 評估類型的效率 396
12.2.2 監控性能和內存使用情況 396
12.2.3 測量處理字符串的效率 399
12.2.4 使用Benchmark.NET監控性能和內存 400
12.3 異步運行任務 403
12.3.1 同步執行多個操作 403
12.3.2 使用任務異步執行多個操作 405
12.3.3 等待任務 406
12.3.4 繼續執行另一項任務 407
12.3.5 嵌套任務和子任務 408
12.3.6 將任務包裝在其他對象周圍 409
12.4 同步訪問共享資源 410
12.4.1 從多個線程訪問資源 410
12.4.2 對conch應用互斥鎖 412
12.4.3 事件的同步 414
12.4.4 使CPU操作原子化 415
12.4.5 應用其他類型的同步 415
12.5 理解async和await 416
12.5.1 提高控制台應用程序的響應能力 416
12.5.2 改進GUI應用程序的響應能力 417
12.5.3 改進Web應用程序和Web服務的可伸縮性 420
12.5.4 支持多任務處理的常見類型 420
12.5.5 在catch塊中使用await關鍵字 420
12.5.6 使用async流 420
12.6 實踐和探索 421
12.6.1 練習12.1:測試你掌握的知識 422
12.6.2 練習12.2:探索主題 422
12.7 本章小結 422
第13章 C#和.NET的實際應用 423
13.1 理解C#和.NET的應用模型 423
13.1.1 使用ASP.NET Core構建網站 423
13.1.2 構建Web和其他服務 425
13.1.3 構建移動和桌面應用 425
13.1.4 .NET MAUI的替代品 426
13.2 ASP.NET Core的新特性 426
13.2.1 ASP.NET Core 1.0 427
13.2.2 ASP.NET Core 1.1 427
13.2.3 ASP.NET Core 2.0 427
13.2.4 ASP.NET Core 2.1 427
13.2.5 ASP.NET Core 2.2 428
13.2.6 ASP.NET Core 3.0 428
13.2.7 ASP.NET Core 3.1 428
13.2.8 Blazor WebAssembly 3.2 428
13.2.9 ASP.NET Core 5.0 428
13.2.10 ASP.NET Core 6.0 429
13.3 構建Windows專用的桌面應用程序 429
13.3.1 理解舊的Windows應用程序平臺 429
13.3.2 理解現代.NET對舊Windows平臺的支持 430
13.4 結構化項目 430
13.5 使用其他項目模板 431
13.6 為Northwind數據庫建立實體數據模型 433
13.6.1 使用SQLite創建實體模型類庫 433
13.6.2 使用SQL Server創建實體模型類庫 440
13.7 實踐和探索 442
13.7.1 練習13.1:測試你掌握的知識 442
13.7.2 練習13.2:探索主題 442
13.8 本章小結 442
第14章 使用ASP.NET Core Razor Pages構建網站 444
14.1 瞭解Web開發 444
14.1.1 HTTP 444
14.1.2 使用Google Chrome瀏覽器發出HTTP請求 446
14.1.3 客戶端Web開發技術 448
14.2 瞭解ASP.NET Core 448
14.2.1 傳統的ASP.NET與現代的ASP.NET Core 449
14.2.2 創建ASP.NET Core項目 449
14.2.3 測試和保護網站 451
14.2.4 控制托管環境 454
14.2.5 分離服務和管道的配置 456
14.2.6 使網站能夠提供靜態內容 457
14.3 瞭解ASP.NET Core Razor Pages 459
14.3.1 啟用Razor Pages 459
14.3.2 給Razor Pages添加代碼 460
14.3.3 通過Razor Pages使用共享佈局 461
14.3.4 使用後台代碼文件與Razor Pages 463
14.4 使用Entity Framework Core與ASP.NET Core 465
14.4.1 將Entity Framework Core配置為服務 465
14.4.2 使用Razor Pages操作數據 467
14.4.3 將依賴服務註入Razor Pages中 468
14.5 使用Razor類庫 469
14.5.1 創建Razor類庫 469
14.5.2 禁用Visual Studio Code的Compact Folders功能 469
14.5.3 使用EF Core實現員工特性 470
14.5.4 實現分部視圖以顯示單個員工 472
14.5.5 使用和測試Razor類庫 473
14.6 配置服務和HTTP請求管道 473
14.6.1 端點路由 474
14.6.2 檢查項目中的端點路由配置 474
14.6.3 總結關鍵的中間件擴展方法 477
14.6.4 可視化HTTP管道 478
14.6.5 實現匿名內聯委托作為中間件 478
14.7 實踐和探索 479
14.7.1 練習14.1:測試你掌握的知識 479
14.7.2 練習14.2:練習建立數據驅動的網頁 480
14.7.3 練習14.3:練習為控制台應用程序構建Web頁面 480
14.7.4 練習14.4:探索主題 480
14.8 本章小結 480
第15章 使用MVC模式構建網站 481
15.1 設置ASP.NET Core MVC網站 481
15.1.1 創建ASP.NET Core MVC網站 481
15.1.2 為SQL Server LocalDB創建認證數據庫 482
15.1.3 探索默認的ASP.NET Core MVC網站 483
15.1.4 審查MVC網站項目結構 484
15.1.5 回顧ASP.NET Core Identity數據庫 486
15.2 探索ASP.NET Core MVC網站 487
15.2.1 瞭解ASP.NET Core MVC的啟動 487
15.2.2 理解MVC使用的默認路由 489
15.2.3 理解控制器和操作 489
15.2.4 理解視圖搜索路徑約定 492
15.2.5 瞭解記錄 493
15.2.6 過濾器 493
15.2.7 實體和視圖模型 498
15.2.8 視圖 500
15.3 自定義ASP.NET Core MVC網站 502
15.3.1 自定義樣式 503
15.3.2 設置類別圖像 503
15.3.3 Razor語法 503
15.3.4 定義類型化視圖 504
15.3.5 測試自定義首頁 506
15.3.6 使用路由值傳遞參數 507
15.3.7 模型綁定程序 509
15.3.8 驗證模型 512
15.3.9 視圖輔助方法 514
15.4 查詢數據庫和使用顯示模板 516
15.5 使用異步任務提高可伸縮性 518
15.6 實踐與探索 519
15.6.1 練習15.1:測試你掌握的知識 519
15.6.2 練習15.2:通過實現類別詳細信息頁面來練習實現MVC 520
15.6.3 練習15.3:理解和實現異步操作方法以提高可伸縮性 520
15.6.4 練習15.4:單元測試MVC控制器 520
15.6.5 練習15.5:探索主題 520
15.7 本章小結 520
第16章 構建和消費Web服務 521
16.1 使用ASP.NET Core Web API構建Web服務 521
16.1.1 理解Web服務縮寫詞 521
16.1.2 理解Web API的HTTP請求和響應 522
16.1.3 創建ASP.NET Core Web API項目 524
16.1.4 檢查Web服務的功能 526
16.1.5 為Northwind示例數據庫創建Web服務 527
16.1.6 為實體創建數據存儲庫 529
16.1.7 實現Web API控制器 531
16.1.8 配置客戶存儲庫和Web API控制器 533
16.1.9 指定問題的細節 536
16.1.10 控制XML序列化 537
16.2 解釋和測試Web服務 537
16.2.1 使用瀏覽器測試GET請求 538
16.2.2 使用REST Client擴展測試HTTP請求 539
16.2.3 啟用Swagger 541
16.2.4 使用Swagger UI測試請求 542
16.2.5 啟用HTTP logging 546
16.3 使用HTTP客戶端消費Web服務 547
16.3.1 瞭解HttpClient類 547
16.3.2 使用HttpClientFactory配置HTTP客戶端 548
16.3.3 在控制器中以JSON的形式獲取客戶 548
16.3.4 支持跨源資源共享 550
16.4 為Web服務實現高級功能 552
16.4.1 實現健康檢查API 552
16.4.2 實現Open API分析器和約定 552
16.4.3 實現臨時故障處理 553
16.4.4 添加HTTP安全標頭 553
16.5 使用最少的API構建Web服務 554
16.5.1 使用最少的API構建天氣服務 555
16.5.2 測試最小天氣服務 556
16.5.3 向Northwind網站主頁添加天氣預報 556
16.6 實踐和探索 559
16.6.1 練習16.1:測試你掌握的知識 559
16.6.2 練習16.2:練習使用HttpClient創建和刪除客戶 559
16.6.3 練習16.3:探索主題 559
16.7 本章小結 559
第17章 使用Blazor構建用戶界面 560
17.1 理解Blazor 560
17.1.1 JavaScript 560
17.1.2 Silverlight——使用插件的C#和.NET 561
17.1.3 WebAssembly——Blazor的目標 561
17.1.4 理解Blazor托管模型 561
17.1.5 理解Blazor組件 562
17.1.6 比較Blazor和Razor 562
17.2 比較Blazor項目模板 563
17.2.1 Blazor服務器項目模板 563
17.2.2 理解到頁面組件的Blazor路由 568
17.2.3 運行Blazor服務器項目模板 570
17.2.4 查看Blazor WebAssembly項目模板 571
17.3 使用Blazor服務器構建組件 575
17.3.1 定義和測試簡單的組件 575
17.3.2 轉換成可路由的頁面組件 576
17.3.3 將實體放入組件 576
17.4 為Blazor組件抽象服務 579
17.4.1 使用EditForm組件定義表單 581
17.4.2 構建和使用客戶表單組件 581
17.4.3 測試客戶表單組件 584
17.5 使用Blazor WebAssembly構建組件 585
17.5.1 為Blazor WebAssembly配置服務器 586
17.5.2 為Blazor WebAssembly配置客戶端 588
17.5.3 測試Blazor WebAssembly組件和服務 590
17.6 改進Blazor WebAssembly應用程序 591
17.6.1 啟用Blazor WebAssembly AOT 591
17.6.2 Web App的漸進式支持 593
17.6.3 瞭解Blazor WebAssembly的瀏覽器兼容性分析程序 594
17.6.4 在類庫中共享Blazor組件 595
17.6.5 使用JavaScript交互操作 596
17.6.6 Blazor組件庫 598
17.7 實踐和探索 598
17.7.1 練習17.1:測試你掌握的知識 599
17.7.2 練習17.2:練習創建組件 599
17.7.3 練習17.3:通過創建國家導航項進行練習 599
17.7.4 練習17.4:探索主題 599
17.8 本章小結 600
第18章 構建和消費專業服務 601
18.1 瞭解專業服務技術 601
18.2 使用OData將數據公開為Web服務 602
18.2.1 理解OData 602
18.2.2 構建一個支持OData的Web服務 602
18.2.3 創建和測試OData控制器 606
18.2.4 使用REST客戶端測試OData控制器 607
18.2.5 查詢OData模型 608
18.2.6 記錄OData請求 610
18.2.7 OData控制器的版本控制 612
18.2.8 使用POST啟用實體插入 613
18.2.9 為OData構建客戶端 615
18.3 使用GraphQL將數據公開為服務 617
18.3.1 理解GraphQL 617
18.3.2 構建支持GraphQL的服務 618
18.3.3 為Hello World定義GraphQL模式 619
18.3.4 為EF Core模型定義GraphQL模式 621
18.3.5 利用Northwind探索GraphQL查詢 624
18.3.6 理解GraphQL變化和訂閱 626
18.3.7 為GraphQL構建客戶機 626
18.4 使用gRPC實現服務 629
18.4.1 理解gRPC 629
18.4.2 構建gRPC服務 629
18.4.3 構建gRPC客戶端 631
18.4.4 針對gRPC服務測試gRPC客戶端 633
18.4.5 為EF Core模型實現gRPC服務 633
18.4.6 為EF Core模型實現gRPC客戶端 635
18.5 使用SignalR實現實時通信 637
18.5.1 瞭解網絡實時通信的歷史 637
18.5.2 使用SignalR構建實時通信服務 638
18.5.3 測試聊天功能 644
18.5.4 建立控制台應用聊天客戶端 646
18.6 使用Azure Functions實現無服務器服務 648
18.6.1 理解Azure Functions 649
18.6.2 為Azure Functions建立本地開發環境 650
18.6.3 構建一個Azure Functions項目用於本地運行 650
18.6.4 評估這個項目 652
18.6.5 實現函數 653
18.6.6 測試函數 654
18.6.7 發布Azure Functions項目到雲 655
18.6.8 清理Azure資源 657
18.7 瞭解身份服務 657
18.8 專門服務的選擇摘要 658
18.9 實踐和探索 658
18.9.1 練習18.1:測試你掌握的知識 658
18.9.2 練習18.2:探索主題 659
18.10 本章小結 659
第19章 使用.NET MAUI構建移動和桌面應用程序 660
19.1 理解.NET MAUI延遲 661
19.2 理解XAML 661
19.2.1 使用XAML簡化代碼 661
19.2.2 選擇常見的控件 662
19.2.3 理解標記擴展 663
19.3 瞭解.NET MAUI 663
19.3.1 開發工具的移動優先、雲優先 663
19.3.2 瞭解額外的功能 664
19.3.3 理解.NET MAUI用戶界面組件 666
19.3.4 理解.NET MAUI處理程序 667
19.3.5 編寫特定於平臺的代碼 667
19.4 使用.NET MAUI構建移動和桌面應用 668
19.4.1 創建用於本地應用測試的虛擬Android設備 668
19.4.2 創建.NET MAUI解決方案 669
19.4.3 使用雙向數據綁定創建視圖模型 671
19.4.4 為客戶列表和客戶詳細信息創建視圖 674
19.4.5 實現客戶列表視圖 674
19.4.6 實現客戶詳情視圖 677
19.4.7 設置手機應用的主界面 679
19.4.8 測試移動應用程序 679
19.5 從移動應用程序中消費Web服務 681
19.5.1 配置Web服務以允許不安全的請求 681
19.5.2 從Web服務中獲取客戶 682
19.6 實踐和探索 683
19.6.1 練習19.1:測試你掌握的知識 683
19.6.2 練習19.2:探索主題 684
19.7 本章小結 684
第20章 保護數據和應用程序 685
20.1 理解數據保護術語 685
20.1.1 密鑰和密鑰的大小 686
20.1.2 IV和塊大小 686
20.1.3 salt 687
20.1.4 生成密鑰和IV 687
20.2 加密和解密數據 688
20.3 哈希數據 692
20.4 簽名數據 696
20.5 生成隨機數 699
20.5.1 為游戲和類似應用程序生成隨機數 699
20.5.2 為密碼生成隨機數 699
20.6 用戶的身份驗證和授權 700
20.6.1 身份驗證和授權機制 701
20.6.2 實現身份驗證和授權 703
20.6.3 保護應用程序功能 705
20.6.4 真實世界的身份驗證和授權 706
20.7 實踐和探索 706
20.7.1 練習20.1:測試你掌握的知識 707
20.7.2 練習20.2:練習使用加密和哈希方法保護數據 707
20.7.3 練習20.3:練習使用解密保護數據 707
20.7.4 練習20.4:探索主題 707
20.8 本章小結 708
—以下部分通過二維碼掃描獲取—
附錄A 練習題答案 709
後記 726