C# 12 和.NET 8 入門與跨平臺開發, 8/e C# 12 and .NET 8 - Modern Cross-Platform Development Fundamentals - Eighth Edition: Start building websites and services with ASP.NET Core 8, Blazor, and EF Core 8, 8/e
[美] 馬克·J.普萊斯(Mark J. Price)著 葉偉民 譯
- 出版商: 清華大學
- 出版日期: 2025-04-01
- 售價: $1,188
- 語言: 簡體中文
- 頁數: 633
- ISBN: 7302682968
- ISBN-13: 9787302682967
-
相關分類:
.NET、C#
- 此書翻譯自: C# 12 and .NET 8 - Modern Cross-Platform Development Fundamentals - Eighth Edition: Start building websites and services with ASP.NET Core 8, Blazor, and EF Core 8, 8/e (Paperback)
下單後立即進貨 (約4週~6週)
買這商品的人也買了...
-
$880$695 -
$680$612 -
$450$356 -
$980$774 -
$740$585 -
$2,380$2,261 -
$945Learning MonoTouch: A Hands-On Guide to Building iOS Applications with C# and .NET (Paperback)
-
$360$284 -
$520$411 -
$580$458 -
$594揭秘 Angular 2
-
$414Angular 從零到一
-
$654Angular 權威教程
-
$474$450 -
$980$774 -
$403Xamarin 全棧開發技術與實踐 (微課版)
商品描述
"C#的應用領域極廣,是編程語言中的翹楚。作為暢銷的C#系列圖書的**版本,本書涵蓋C#12和.NET 8的所有**功能,將幫助你夯實基礎,讓你自信地使用**C#和.NET構建項目。 《C# 12和.NET 8入門與跨平臺開發(第8版)》討論面向對象編程、編寫函數、測試函數調試函數及實現接口等主題;介紹.NETAPI,這些API可執行多種任務,如管理和查詢數據,使用文件系統、序列化。你可用ASP.NET Core來構建和部署本書列舉的跨平臺示例應用程序,如網站和服務 《C# 12和.NET 8入門與跨平臺開發(第8版)》示例中融入了.NET 8的增強功能,使用類型別名和主構造函數來實現簡潔的、表達力強的代碼。你將使用新增的、內置的保護子句來可靠地處理錯誤,並探索ASP.NET Core 8中簡化的緩存實現。 你還將看到,在發布過程中使用原生的AOT編譯能夠縮短啟動時間和減少內存占用。你還將使用Visua Studio 2022中新增的HTTP編輯器來完善測試和調試過程。本書甚至介紹了Blazor全棧,它提供的統一托管模型能夠實現無可比擬的Web開發靈活性。 主要內容: ?C# 12的新功能,包括類型別名和主構造函數 ?ASP.NET Core 8最小APIWeb服務的原生AOT發布功能 ?通過Blazor全棧、Razor Pages等ASP.NET Core技術構建沉浸式Web應用 ?使用Entity Framework Core模型來無縫地集成和更新數據庫 ?使用LINO來查詢和操縱數據 ?使用Web API和最小API構建和使用功能強大的服務"
作者簡介
葉偉民,廣州.NET技術俱樂部主席、中國香港Azure/.NET技術俱樂部創始人兼主席、.NET社區聯盟建設者,在.NET編程領域有15年工作經驗。
目錄大綱
目 錄
第1章 C#與.NET入門 1
1.1 本書內容簡介 1
1.1.1 獲取本書的代碼解決方案 1
1.1.2 本書使用的.NET術語 2
1.1.3 本書的結構和風格 2
1.1.4 本書討論的主題 3
1.1.5 Apps and Services with .NET 8一書中涵蓋的主題 3
1.2 設置開發環境 3
1.2.1 選擇適合學習的工具和應用程序類型 4
1.2.2 跨平臺部署 7
1.2.3 下載並安裝Visual Studio 2022 7
1.2.4 下載並安裝Visual Studio Code 8
1.3 理解.NET 10
1.3.1 瞭解.NET支持 11
1.3.2 理解中間語言 13
1.3.3 比較.NET技術 14
1.3.4 使用代碼編輯器管理多個項目 14
1.4 使用Visual Studio 2022構建控制台應用程序 14
1.4.1 使用Visual Studio 2022編寫代碼 14
1.4.2 使用Visual Studio編譯和運行代碼 17
1.4.3 理解頂級程序 18
1.4.4 揭示Program類的名稱空間 20
1.4.5 使用Visual Studio 2022添加第二個項目 20
1.5 使用Visual Studio Code構建控制台應用程序 23
1.5.1 使用Visual Studio Code編寫代碼 23
1.5.2 使用dotnet CLI編譯和運行代碼 25
1.5.3 使用Visual Studio Code添加第二個項目 26
1.5.4 Visual Studio Code的步驟小結 28
1.5.5 本書中使用的其他項目類型小結 28
1.6 充分利用本書的GitHub存儲庫 28
1.6.1 瞭解GitHub上的解決方案代碼 29
1.6.2 對本書提出問題 29
1.6.3 反饋 30
1.6.4 避免常見錯誤 30
1.6.5 從GitHub存儲庫下載解決方案代碼 30
1.6.6 在Visual Studio Code和命令行中使用Git 31
1.7 尋求幫助 31
1.7.1 閱讀Microsoft Learn中的文檔 31
1.7.2 本書中的文檔鏈接 31
1.7.3 獲取關於dotnet工具的幫助 32
1.7.4 獲取類型及其成員的定義 33
1.7.5 配置內聯提示 36
1.7.6 在Stack Overflow上尋找答案 36
1.7.7 使用谷歌搜索答案 37
1.7.8 搜索.NET源代碼 37
1.7.9 訂閱官方的.NET博客 38
1.7.10 觀看Scott Hanselman的視頻 38
1.7.11 ChatGPT和GitHub Copilot等AI工具 39
1.7.12 當工具成為障礙時禁用工具 41
1.8 實踐和探索 41
1.8.1 練習1.1:測試你掌握的知識 41
1.8.2 練習1.2:使用瀏覽器在任何地方練習C# 42
1.8.3 練習1.3:探索主題 42
1.8.4 練習1.4:探索Polygot Notebooks 42
1.8.5 練習1.5:探索現代.NET的主題 42
1.8.6 練習1.6:Free Code Camp和C#認證 43
1.8.7 練習1.7:.NET的alpha版本 43
1.9 本章小結 43
第2章 C#編程基礎 45
2.1 介紹C#語言 45
2.1.1 理解C#語言版本和特性 45
2.1.2 瞭解C#標準 46
2.2 瞭解C#編譯器版本 46
2.2.1 如何輸出SDK版本 47
2.2.2 啟用特定的語言版本編譯器 47
2.2.3 使用未來的C#編譯器版本 48
2.2.4 .NET 8的C#編譯器切換到後續版本 48
2.2.5 顯示編譯器版本 49
2.3 理解C#語法和詞匯 50
2.3.1 瞭解C#語法 50
2.3.2 語句 51
2.3.3 註釋 51
2.3.4 代碼塊 52
2.3.5 區域 52
2.3.6 語句和語句塊的示例 53
2.3.7 使用空白字符格式化代碼 54
2.3.8 瞭解C#詞匯表 54
2.3.9 將編程語言與人類語言進行比較 55
2.3.10 修改C#語法的配色方案 55
2.3.11 如何編寫正確的代碼 55
2.3.12 導入名稱空間 56
2.3.13 隱式和全局導入名稱空間 56
2.3.14 動詞表示方法 60
2.3.15 名詞表示類型、變量、字段和屬性 60
2.3.16 揭示C#詞匯表的範圍 61
2.3.17 請求ChatGPT解釋代碼的示例 62
2.4 使用變量 64
2.4.1 命名和賦值 64
2.4.2 字面值 65
2.4.3 存儲文本 65
2.4.4 輸出表情符號 66
2.4.5 理解逐字字符串 66
2.4.6 原始字符串字面值 66
2.4.7 原始內插字符串字面值 67
2.4.8 有關存儲文本的總結 67
2.4.9 存儲數字 68
2.4.10 探索整數 69
2.4.11 存儲實數 69
2.4.12 新的數字類型和不安全代碼 72
2.4.13 存儲布爾值 73
2.4.14 存儲任何類型的對象 74
2.4.15 動態存儲類型 74
2.4.16 聲明局部變量 76
2.4.17 獲取和設置類型的默認值 78
2.5 深入研究控制台應用程序 79
2.5.1 向用戶顯示輸出 79
2.5.2 從用戶那裡獲取文本輸入 83
2.5.3 簡化控制台的使用 84
2.5.4 獲取用戶的重要輸入 85
2.5.5 向控制台應用程序傳遞參數 86
2.5.6 使用參數設置選項 89
2.5.7 處理不支持API的平臺 90
2.6 理解async和await 92
2.7 實踐和探索 93
2.7.1 練習2.1:測試你掌握的知識 93
2.7.2 練習2.2:測試你對數字類型的瞭解 93
2.7.3 練習2.3:練習數字大小和範圍 94
2.7.4 練習2.4:探索主題 94
2.7.5 練習2.5:探索Spectre庫 94
2.8 本章小結 94
第3章 控製程序流程、轉換類型和處理異常 95
3.1 操作變量 95
3.1.1 理解二元運算符 95
3.1.2 理解一元運算符 96
3.1.3 理解三元運算符 96
3.1.4 二元算術運算符 98
3.1.5 賦值運算符 98
3.1.6 空值合並運算符 99
3.1.7 邏輯運算符 99
3.1.8 條件邏輯運算符 100
3.1.9 按位和二元移位運算符 101
3.1.10 其他運算符 102
3.2 理解選擇語句 103
3.2.1 使用if語句進行分支 103
3.2.2 模式匹配與if語句 104
3.2.3 使用switch語句進行分支 105
3.2.4 使用Visual Studio 2022向項目添加新項 106
3.2.5 模式匹配與switch語句 107
3.2.6 使用switch表達式簡化switch語句 109
3.3 理解迭代語句 110
3.3.1 while循環語句 110
3.3.2 do循環語句 111
3.3.3 for循環語句 111
3.3.4 foreach循環語句 112
3.4 在數組中存儲多個值 113
3.5 類型轉換 119
3.5.1 隱式和顯式地轉換數字 120
3.5.2 負數在二進制中的表示 121
3.5.3 使用System.Convert類型進行轉換 122
3.5.4 圓整數字和默認的圓整原則 123
3.5.5 控制圓整規則 124
3.5.6 從任何類型轉換為字符串 124
3.5.7 從二進制對象轉換為字符串 125
3.5.8 將字符串轉換為數字或日期和時間 126
3.6 處理異常 128
3.7 檢查溢出 132
3.7.1 使用checked語句拋出溢出異常 132
3.7.2 使用unchecked語句禁用編譯時溢出檢查 133
3.8 實踐和探索 134
3.8.1 練習3.1:測試你掌握的知識 134
3.8.2 練習3.2:探索循環和溢出 135
3.8.3 練習3.3:測試你對運算符的掌握程度 135
3.8.4 練習3.4:實踐循環和運算符 135
3.8.5 練習3.5:實踐異常處理 136
3.8.6 練習3.6:探索C# Polyglot Notebooks 136
3.8.7 練習3.7:探索主題 136
3.9 本章小結 137
第4章 編寫、調試和測試函數 138
4.1 編寫函數 138
4.1.1 理解頂級程序、函數和名稱空間 138
4.1.2 對於局部函數,編譯器會自動生成什麽 139
4.1.3 使用靜態函數定義分部程序 140
4.1.4 對於靜態函數,編譯器會自動生成什麽 141
4.1.5 乘法表示例 142
4.1.6 簡述實參與形參 144
4.1.7 編寫帶返回值的函數 145
4.1.8 將數字從基數轉換為序數 147
4.1.9 用遞歸計算階乘 149
4.1.10 使用XML註釋文檔化函數 151
4.1.11 在函數實現中使用lambda 152
4.2 在開發過程中進行調試 154
4.2.1 創建帶有故意錯誤的代碼 154
4.2.2 設置斷點並開始調試 155
4.2.3 使用調試工具欄進行導航 157
4.2.4 調試窗口 158
4.2.5 單步執行代碼 158
4.2.6 在 Visual Studio Code 中使用集成終端進行調試 159
4.2.7 自定義斷點 161
4.3 在開發期間進行熱重載 163
4.3.1 使用Visual Studio 2022進行熱重載 163
4.3.2 使用Visual Studio Code和dotnet watch命令進行熱重載 164
4.4 在開發和運行時進行日誌記錄 165
4.4.1 理解日誌記錄選項 165
4.4.2 使用Debug和Trace類型 165
4.4.3 配置跟蹤偵聽器 167
4.4.4 切換跟蹤級別 168
4.4.5 記錄有關源代碼的信息 174
4.5 單元測試 175
4.5.1 理解測試類型 176
4.5.2 創建需要測試的類庫 176
4.5.3 編寫單元測試 177
4.6 在函數中拋出並捕獲異常 180
4.6.1 理解使用錯誤和執行錯誤 180
4.6.2 在函數中通常拋出異常 180
4.6.3 使用保護子句拋出異常 181
4.6.4 理解調用堆棧 181
4.6.5 在哪裡捕獲異常 184
4.6.6 重新拋出異常 184
4.6.7 實現tester-doer模式和try模式 186
4.7 實踐和探索 187
4.7.1 練習4.1:測試你掌握的知識 187
4.7.2 練習4.2:編寫帶有調試和單元測試功能的函數 187
4.7.3 練習4.3:探索主題 188
4.8 本章小結 188
第5章 使用面向對象編程技術構建自己的類型 189
5.1 面向對象編程 189
5.2 構建類庫 190
5.2.1 創建類庫 190
5.2.2 理解文件作用域名稱空間 192
5.2.3 在名稱空間中定義類 192
5.2.4 理解類型訪問修飾符 193
5.2.5 理解成員 193
5.2.6 導入名稱空間以使用類型 194
5.2.7 實例化類 196
5.2.8 繼承System.Object 196
5.2.9 使用別名避免名稱空間沖突 197
5.3 在字段中存儲數據 198
5.3.1 定義字段 198
5.3.2 字段的類型 199
5.3.3 成員訪問修飾符 199
5.3.4 設置和輸出字段值 200
5.3.5 使用對象初始化器語法設置字段值 200
5.3.6 使用enum類型存儲值 201
5.3.7 使用enum類型存儲多個值 202
5.3.8 使用集合存儲多個值 203
5.3.9 理解泛型集合 203
5.3.10 使字段成為靜態字段 204
5.3.11 使字段成為常量 205
5.3.12 使字段只讀 206
5.3.13 在實例化時要求設置字段值 207
5.3.14 使用構造函數初始化字段 208
5.4 使用方法和元組 211
5.4.1 從方法返回值 211
5.4.2 定義參數並將參數傳遞給方法 211
5.4.3 重載方法 212
5.4.4 傳遞可選參數 213
5.4.5 調用方法時的命名參數值 213
5.4.6 混用可選參數與必需參數 214
5.4.7 控制參數的傳遞方式 215
5.4.8 理解ref返回 216
5.4.9 使用元組組合多個返回值 217
5.4.10 使用局部函數實現功能 220
5.4.11 使用partial關鍵字拆分類 221
5.5 使用屬性和索引器控制訪問 222
5.5.1 定義只讀屬性 222
5.5.2 定義可設置的屬性 223
5.5.3 限制枚舉標志的值 225
5.5.4 定義索引器 227
5.6 模式匹配和對象 228
5.6.1 模式匹配飛機乘客 228
5.6.2 C# 9及更高版本對模式匹配做了增強 230
5.7 使用record類型 231
5.7.1 init-only屬性 231
5.7.2 定義record類型 232
5.7.3 record類型的相等性 233
5.7.4 記錄中的位置數據成員 234
5.7.5 在類中定義主構造函數 235
5.8 實踐和探索 236
5.8.1 練習5.1:測試你掌握的知識 236
5.8.2 練習5.2:練習使用訪問修飾符 237
5.8.3 練習5.3:探索主題 237
5.9 本章小結 237
第6章 實現接口和繼承類 238
6.1 建立類庫和控制台應用程序 238
6.2 靜態方法和重載運算符 240
6.2.1 使用方法實現功能 240
6.2.2 使用運算符實現功能 244
6.3 使用泛型安全地重用類型 246
6.3.1 使用非泛型類型 246
6.3.2 使用泛型類型 248
6.4 觸發和處理事件 249
6.4.1 使用委托調用方法 249
6.4.2 定義和處理委托 250
6.4.3 定義和處理事件 252
6.5 實現接口 254
6.5.1 公共接口 254
6.5.2 排序時比較對象 254
6.5.3 使用單獨的類比較對象 258
6.5.4 隱式和顯式的接口實現 259
6.5.5 使用默認實現定義接口 260
6.6 使用引用類型和值類型管理內存 262
6.6.1 理解棧內存和堆內存 262
6.6.2 定義引用類型和值類型 262
6.6.3 如何在內存中存儲引用類型和值類型 263
6.6.4 理解裝箱 264
6.6.5 類型的相等性 265
6.6.6 定義struct類型 267
6.6.7 定義record struct類型 268
6.6.8 釋放非托管資源 269
6.6.9 確保調用Dispose方法 270
6.7 使用空值 271
6.7.1 使值類型可為空 271
6.7.2 瞭解與null相關的縮略詞 273
6.7.3 理解可空引用類型 273
6.7.4 控制可空性警告檢查特性 274
6.7.5 禁用null值和其他編譯器警告 274
6.7.6 聲明非可空變量和參數 275
6.7.7 檢查null 277
6.8 從類繼承 279
6.8.1 擴展類以添加功能 280
6.8.2 隱藏成員 280
6.8.3 瞭解this和base關鍵字 281
6.8.4 覆蓋成員 281
6.8.5 從抽象類繼承 282
6.8.6 選擇接口還是抽象類 283
6.8.7 防止繼承和覆蓋 283
6.8.8 理解多態 284
6.9 在繼承層次結構中進行類型轉換 285
6.9.1 隱式類型轉換 286
6.9.2 顯式類型轉換 286
6.9.3 避免類型轉換異常 286
6.10 繼承和擴展.NET類型 288
6.10.1 繼承異常 288
6.10.2 無法繼承時擴展類型 289
6.11 總結自定義類型的選擇 291
6.11.1 自定義類型的分類及其功能 291
6.11.2 可變性與record類型 292
6.11.3 比較繼承與實現 293
6.11.4 回顧示例代碼 293
6.12 實踐和探索 295
6.12.1 練習6.1:測試你掌握的知識 295
6.12.2 練習6.2:練習創建繼承層次結構 296
6.12.3 練習6.3:編寫更好的代碼 296
6.12.4 練習6.4:探索主題 296
6.13 本章小結 296
第7章 打包和分發.NET類型 298
7.1 .NET 8簡介 298
7.2 瞭解.NET組件 300
7.2.1 程序集、NuGet包和名稱空間 300
7.2.2 Microsoft .NET project SDK 301
7.2.3 理解程序集中的名稱空間和類型 301
7.2.4 NuGet包 302
7.2.5 理解框架 302
7.2.6 導入名稱空間以使用類型 302
7.2.7 將C#關鍵字與.NET類型相關聯 303
7.2.8 使用.NET Standard在舊平臺之間共享代碼 306
7.2.9 理解不同SDK中類庫的默認設置 306
7.2.10 創建.NET Standard 類庫 307
7.2.11 控制.NET SDK 308
7.2.12 混合使用SDK和目標框架 309
7.3 發布用於部署的代碼 310
7.3.1 創建要發布的控制台應用程序 310
7.3.2 理解dotnet命令 312
7.3.3 獲取關於.NET及其環境的信息 313
7.3.4 使用dotnet CLI管理項目 313
7.3.5 發布自包含的應用程序 314
7.3.6 發布單文件應用 316
7.3.7 使用app trimming系統減小應用程序的大小 316
7.3.8 控制構建產物的生成位置 317
7.4 原生ATO編譯 318
7.4.1 本地AOT 的限制 318
7.4.2 反射與原生AOT 319
7.4.3 原生AOT的要求 319
7.4.4 為項目啟用原生AOT 320
7.4.5 構建原生AOT項目 320
7.4.6 發布原生AOT項目 321
7.5 反編譯.NET程序集 322
7.5.1 使用Visual Studio 2022的ILSpy擴展進行反編譯 322
7.5.2 使用Visual Studio 2022查看源鏈接 325
7.5.3 不能在技術上阻止反編譯 326
7.6 為NuGet分發打包自己的庫 327
7.6.1 引用NuGet包 327
7.6.2 為NuGet打包庫 328
7.6.3 使用工具探索NuGet包 332
7.6.4 測試類庫包 333
7.7 使用預覽功能 334
7.7.1 需要預覽功能 335
7.7.2 使用預覽功能 335
7.7.3 方法攔截器 335
7.8 實踐和探索 336
7.8.1 練習7.1:測試你掌握的知識 336
7.8.2 練習7.2:探索主題 336
7.8.3 練習7.3:從.NET Framework移植到現代.NET 336
7.8.4 練習 7.4:創建源代碼生成器 336
7.8.5 練習7.5:探索PowerShell 336
7.8.6 練習7.6:提升.NET性能 337
7.9 本章小結 337
第8章 使用常見的.NET類型 338
8.1 處理數字 338
8.1.1 處理大的整數 338
8.1.2 處理復數 339
8.1.3 為游戲和類似應用程序生成隨機數 340
8.1.4 生成GUID 342
8.2 處理文本 343
8.2.1 獲取字符串的長度 343
8.2.2 獲取字符串中的字符 344
8.2.3 拆分字符串 344
8.2.4 獲取字符串的一部分 344
8.2.5 檢查字符串的內容 345
8.2.6 比較字符串值 345
8.2.7 連接、格式化和其他的字符串成員 347
8.2.8 高效地連接字符串 348
8.3 模式匹配與正則表達式 349
8.3.1 檢查作為文本輸入的數字 349
8.3.2 改進正則表達式的性能 350
8.3.3 正則表達式的語法 350
8.3.4 正則表達式示例 351
8.3.5 拆分使用逗號分隔的復雜字符串 351
8.3.6 激活正則表達式語法著色功能 353
8.3.7 使用源生成器提高正則表達式的性能 355
8.4 在集合中存儲多個對象 357
8.4.1 所有集合的公共特性 357
8.4.2 使用列表 358
8.4.3 字典 361
8.4.4 集、堆棧和隊列 364
8.4.5 集合的Add和Remove方法 367
8.4.6 集合的排序 367
8.4.7 使用專門的集合 368
8.4.8 只讀集合、不可變集合和凍結集合 368
8.4.9 使用集合表達式初始化集合 372
8.4.10 集合的最佳實踐 372
8.5 使用Span、索引和範圍 373
8.5.1 通過Span高效地使用內存 373
8.5.2 用索引類型標識位置 374
8.5.3 使用Range類型標識範圍 374
8.5.4 使用索引、範圍和Span 374
8.6 實踐和探索 375
8.6.1 練習8.1:測試你掌握的知識 375
8.6.2 練習8.2:練習正則表達式 375
8.6.3 練習8.3:練習編寫擴展方法 376
8.6.4 練習8.4:使用網絡資源 376
8.6.5 練習8.5:探索主題 376
8.7 本章小結 376
第9章 處理文件、流和序列化 377
9.1 管理文件系統 377
9.1.1 處理跨平臺環境和文件系統 377
9.1.2 管理驅動器 380
9.1.3 管理目錄 382
9.1.4 管理文件 383
9.1.5 管理路徑 384
9.1.6 獲取文件信息 385
9.1.7 控制處理文件的方式 385
9.2 用流來讀寫 386
9.2.1 理解抽象和具體的流 386
9.2.2 構建流管道 388
9.2.3 寫入文本流 388
9.2.4 寫入XML流 390
9.2.5 壓縮流 394
9.2.6 使用隨機訪問句柄進行讀寫 396
9.3 編碼和解碼文本 397
9.3.1 將字符串編碼為字節數組 398
9.3.2 對文件中的文本進行編碼和解碼 400
9.4 序列化對象圖 400
9.4.1 序列化為XML 401
9.4.2 生成緊湊的XML 404
9.4.3 反序列化XML文件 405
9.4.4 用JSON序列化 406
9.4.5 高性能的JSON處理 407
9.4.6 反序列化JSON文件 407
9.4.7 控制處理JSON的方式 408
9.5 使用環境變量 411
9.5.1 讀取所有環境變量 411
9.5.2 展開、設置和獲取環境變量 413
9.6 實踐和探索 415
9.6.1 練習9.1:測試你掌握的知識 415
9.6.2 練習9.2:練習序列化為XML 416
9.6.3 練習9.3:使用tar存盤 416
9.6.4 練習9.4:從Newtonsoft遷移到新的JSON 416
9.6.5 練習9.5:探索主題 416
9.7 本章小結 417
第10章 使用Entity Framework Core處理數據 418
10.1 理解現代數據庫 418
10.1.1 理解舊的實體框架 419
10.1.2 理解Entity Framework Core 419
10.1.3 理解數據庫優先和代碼優先 420
10.1.4 EF Core的性能改進 420
10.1.5 使用示例關系數據庫 420
10.1.6 使用SQLite 421
10.1.7 使用SQL Server還是其他SQL系統 422
10.1.8 為Windows設置SQLite 422
10.1.9 為macOS和Linux設置SQLite 423
10.2 在.NET項目中設置EF Core 423
10.2.1 為使用EF Core創建控制台應用程序 423
10.2.2 為SQLite創建Northwind示例數據庫 423
10.2.3 使用SQLiteStudio管理Northwind示例數據庫 424
10.2.4 使用輕量級的ADO.NET數據庫提供程序 426
10.2.5 選擇EF Core數據庫提供程序 426
10.2.6 連接到命名的SQLite數據庫 427
10.2.7 定義Northwind數據庫上下文類 427
10.3 定義EF Core模型 428
10.3.1 使用EF Core約定定義模型 428
10.3.2 使用EF Core註解特性定義模型 429
10.3.3 使用EF Core Fluent API定義模型 431
10.3.4 理解數據播種和Fluent API 431
10.3.5 為Northwind表構建EF Core模型 431
10.3.6 定義Category和Product實體類 432
10.3.7 向Northwind數據庫上下文類添加表 434
10.3.8 安裝dotnet-ef工具 435
10.3.9 使用現有數據庫搭建模型 436
10.3.10 自定義逆向工程模板 440
10.3.11 配置約定前模型 440
10.4 查詢EF Core模型 441
10.4.1 過濾結果中返回的實體 443
10.4.2 過濾和排序產品 445
10.4.3 獲取生成的SQL 446
10.4.4 記錄EF Core 447
10.4.5 根據特定於提供程序的值過濾日誌 449
10.4.6 使用查詢標記進行日誌記錄 449
10.4.7 獲取單個實體 450
10.4.8 使用Like進行模式匹配 451
10.4.9 在查詢中生成隨機數 453
10.4.10 定義全局過濾器 454
10.5 使用EF Core加載和跟蹤模式 454
10.5.1 使用Include擴展方法立即加載實體 454
10.5.2 啟用延遲加載 455
10.5.3 使用Load方法顯式加載實體 456
10.5.4 控制實體跟蹤 458
10.5.5 3種跟蹤場景 459
10.5.6 延遲加載未啟用跟蹤的查詢 460
10.6 使用EF Core修改數據 461
10.6.1 插入實體 462
10.6.2 更新實體 464
10.6.3 刪除實體 465
10.6.4 更高效地更新和刪除 466
10.6.5 池化數據庫環境 469
10.7 實踐和探索 469
10.7.1 練習10.1:測試你掌握的知識 470
10.7.2 練習10.2:練習使用不同的序列化格式導出數據 470
10.7.3 練習10.3:使用事務 470
10.7.4 練習10.4:探索代碼優先EF Core模型 470
10.7.5 練習10.5:探索應用程序機密 470
10.7.6 練習10.6:探索主題 471
10.7.7 練習10.7:探索NoSQL數據庫 471
10.8 本章小結 471
第11章 使用LINQ查詢和操作數據 472
11.1 編寫LINQ表達式 472
11.1.1 對比命令式語言和聲明式語言的特性 472
11.1.2 LINQ的組成 473
11.1.3 使用Enumerable類構建LINQ表達式 473
11.2 LINQ的現實應用 475
11.2.1 理解延遲執行 475
11.2.2 使用Where擴展方法過濾實體 477
11.2.3 以命名方法為目標 479
11.2.4 通過刪除委托的顯式實例化來簡化代碼 480
11.2.5 以lambda表達式為目標 480
11.2.6 具有默認參數值的lambda表達式 480
11.3 排序及其他操作 481
11.3.1 使用OrderBy擴展方法按單個屬性排序 481
11.3.2 使用ThenBy擴展方法按後續屬性排序 481
11.3.3 按項自身排序 482
11.3.4 使用var或指定類型聲明查詢 482
11.3.5 根據類型進行過濾 483
11.3.6 處理集合和bag 484
11.4 使用LINQ與EF Core 486
11.4.1 為探索LINQ to Entities來創建一個控制台應用程序 486
11.4.2 構建EF Core模型 487
11.4.3 序列的過濾和排序 489
11.4.4 將序列投影到新的類型中 492
11.5 連接、分組和查找 493
11.5.1 連接序列 494
11.5.2 分組連接序列 495
11.5.3 分組查找 496
11.6 聚合和分頁序列 498
11.6.1 檢查空序列 500
11.6.2 小心使用Count 500
11.6.3 使用LINQ分頁 502
11.6.4 使用語法糖美化LINQ語法 505
11.7 實踐和探索 506
11.7.1 練習11.1:測試你掌握的知識 506
11.7.2 練習11.2:練習使用LINQ進行查詢 507
11.7.3 練習11.3:在並行LINQ中使用多線程 507
11.7.4 練習11.4:使用LINQ to XML 507
11.7.5 練習11.5:創建自己的LINQ擴展方法 507
11.7.6 練習11.6:探索主題 508
11.8 本章小結 508
第12章 使用ASP.NET Core進行Web開發 509
12.1 理解ASP.NET Core 509
12.1.1 經典ASP.NET與現代ASP.NET Core的對比 510
12.1.2 使用ASP.NET Core構建網站 511
12.1.3 ASP.NET Core中使用的不同文件類型 511
12.1.4 使用內容管理系統構建網站 512
12.1.5 使用SPA框架構建Web應用程序 512
12.1.6 構建Web服務和其他服務 513
12.2 結構化項目 513
12.3 建立實體模型供本書剩餘部分章節使用 515
12.3.1 創建Northwind數據庫 515
12.3.2 使用SQLite創建實體模型類庫 515
12.3.3 使用SQLite為數據庫上下文創建類庫 517
12.3.4 自定義模型並定義擴展方法 519
12.3.5 註冊依賴服務的作用域 522
12.3.6 使用SQL Server為實體模型創建類庫 522
12.3.7 改進類到表的映射 522
12.3.8 測試類庫 524
12.4 瞭解Web開發 527
12.4.1 理解HTTP 527
12.4.2 使用Google Chrome瀏覽器發出HTTP請求 528
12.4.3 瞭解客戶端Web開發技術 530
12.5 實踐和探索 530
12.5.1 練習12.1:測試你掌握的知識 530
12.5.2 練習12.2:瞭解Web開發中常用的縮寫 531
12.5.3 練習12.3:探索主題 531
12.6 本章小結 531
第13章 使用ASP.NET Core Razor Pages構建網站 532
13.1 瞭解ASP.NET Core 532
13.1.1 創建空的ASP.NET Core項目 532
13.1.2 測試和保護網站 535
13.1.3 啟用更強的安全性並重定向到安全連接 538
13.1.4 控制托管環境 539
13.1.5 使網站能夠提供靜態內容 540
13.2 瞭解ASP.NET Core Razor Pages 543
13.2.1 啟用Razor Pages 543
13.2.2 給Razor Pages添加代碼 544
13.2.3 對Razor Pages使用共享佈局 545
13.2.4 臨時存儲數據 547
13.2.5 使用後台代碼文件與Razor Pages 549
13.2.6 配置ASP.NET Core項目中包含的文件 551
13.2.7 項目文件構建操作 552
13.3 使用Entity Framework Core與ASP.NET Core 553
13.3.1 將Entity Framework Core配置為服務 553
13.3.2 啟用模型以插入實體 555
13.3.3 定義用來插入新供應商的表單 556
13.3.4 將依賴服務註入Razor Pages中 556
13.4 配置服務和HTTP請求管道 557
13.4.1 瞭解端點路由 557
13.4.2 配置端點路由 557
13.4.3 查看項目中的端點路由配置 557
13.4.4 配置HTTP管道 559
13.4.5 總結關鍵的中間件擴展方法 560
13.4.6 可視化HTTP管道 560
13.4.7 實現匿名內聯委托作為中間件 561
13.5 實踐和探索 563
13.5.1 練習13.1:測試你掌握的知識 563
13.5.2 練習13.2:使用Razor類庫 563
13.5.3 練習13.3:啟用HTTP/3和對請求解壓縮的支持 563
13.5.4 練習13.4:練習構建數據驅動的網頁 563
13.5.5 練習13.5:練習為函數構建Web頁面 564
13.5.6 練習13.6:Bootstrap簡介 564
13.5.7 練習13.7:探索主題 564
13.5.8 練習13.8:使用MVC模式構建網站 564
13.6 本章小結 565
第14章 構建和消費Web服務 566
14.1 使用ASP.NET Core Web API構建Web服務 566
14.1.1 理解Web服務縮寫詞 566
14.1.2 理解Web API的HTTP請求和響應 567
14.1.3 創建ASP.NET Core Web API項目 569
14.1.4 檢查Web服務的功能 572
14.2 為Northwind示例數據庫創建Web服務 573
14.2.1 註冊依賴服務 574
14.2.2 創建帶實體緩存的數據存儲庫 575
14.2.3 路由Web服務 578
14.2.4 路由約束 578
14.2.5 ASP.NET Core 8中的短路路由 579
14.2.6 ASP.NET Core 8中改進的路由工具 579
14.2.7 理解操作方法的返回類型 579
14.2.8 配置客戶存儲庫和Web API控制器 580
14.2.9 指定問題的細節 584
14.2.10 控制XML序列化 585
14.3 記錄和測試Web服務 586
14.3.1 使用瀏覽器測試GET請求 586
14.3.2 使用HTTP/REST工具發出GET請求 587
14.3.3 使用HTTP/REST工具發出其他請求 588
14.3.4 傳遞環境變量 589
14.3.5 理解Swagger 590
14.3.6 使用Swagger UI測試請求 590
14.3.7 啟用HTTP日誌記錄 593
14.3.8 W3CLogger支持記錄額外的請求頭 595
14.4 使用HTTP客戶端消費Web服務 596
14.4.1 瞭解HttpClient類 596
14.4.2 使用HttpClientFactory配置HTTP客戶端 596
14.4.3 在控制器中以JSON格式獲取客戶 596
14.4.4 啟動多個項目 599
14.4.5 啟動Web服務和MVC客戶端項目 600
14.5 實踐和探索 601
14.5.1 練習14.1:測試你掌握的知識 601
14.5.2 練習14.2:練習使用HttpClient創建和刪除客戶 601
14.5.3 練習14.3:為Web服務實現高級特性 601
14.5.4 練習14.4:使用最小API構建Web服務 602
14.5.5 練習14.5:探索主題 602
14.6 本章小結 602
第15章 使用Blazor構建用戶界面 603
15.1 Blazor的歷史 603
15.1.1 JavaScript和它的朋友們 603
15.1.2 Silverlight——使用插件的C#和.NET 604
15.1.3 WebAssembly——Blazor的目標 604
15.1.4 .NET 7和更早版本中的Blazor托管模型 604
15.1.5 .NET 8統一了Blazor托管模型 604
15.1.6 理解Blazor組件 605
15.1.7 比較Blazor和Razor 606
15.2 Blazor Web App項目模板簡介 606
15.2.1 創建一個Blazor Web App項目 606
15.2.2 Blazor的路由、佈局和導航 608
15.2.3 運行Blazor Web App項目模板 614
15.3 使用Blazor構建組件 615
15.3.1 定義和測試簡單的Blazor組件 615
15.3.2 使用Bootstrap圖標 616
15.3.3 將組件轉換成可路由的頁面組件 617
15.3.4 將實體放入組件 617
15.3.5 為Blazor組件抽象服務 618
15.3.6 啟用流式渲染 622
15.3.7 使用EditForm組件定義表單 623
15.3.8 構建客戶詳細信息組件 623
15.3.9 構建創建、編輯和刪除客戶的組件 625
15.3.10 啟用服務器端交互 627
15.3.11 測試客戶組件 627
15.4 使用WebAssembly啟用客戶端執行 628
15.5 實踐和探索 628
15.5.1 練習15.1:測試你掌握的知識 628
15.5.2 練習15.2:通過創建乘法表組件進行練習 629
15.5.3 練習15.3:通過創建國家導航項進行練習 629
15.5.4 練習15.4:增強Blazor應用程序 630
15.5.5 練習15.5:使用開源的Blazor組件庫 630
15.5.6 練習15.6:探索主題 630
15.6 本章小結 630
第16章 結語 631
16.1 C#和.NET學習之旅的下一步 631
16.1.1 使用設計指南來完善技能 631
16.1.2 本書的配套圖書 632
16.1.3 可以讓學習更深入的其他圖書 633
16.2 祝你好運 633
16.3 分享意見 633
—— 以下內容可掃描封底二維碼下載 ——
附錄A 練習題答案 634
使用MVC模式構建網站 653