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 譯 葉偉民

  • C# 10 和 .NET 6 入門與跨平臺開發, 6/e-preview-1
  • C# 10 和 .NET 6 入門與跨平臺開發, 6/e-preview-2
  • C# 10 和 .NET 6 入門與跨平臺開發, 6/e-preview-3
C# 10 和 .NET 6 入門與跨平臺開發, 6/e-preview-1

買這商品的人也買了...

商品描述

這個新版本對上一版做了全面修訂,涵蓋 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