C# 11和.NET 7入門與跨平臺開發(第7版)
定 價:¥158
中 教 價:¥93.22 (5.90折)
庫 存 數: 0
叢 書 名:開源.NET生態軟件開發
《C# 11和.NET 7入門與跨平臺開發(第7版)》將為你學習C# 11和.NET 7奠定堅實的基礎,使你能夠自信地構建應用程序和服務。學習完本書,你將能夠創建豐富的Web應用,并能牢牢掌握面向對象編程技術,進而能在此基礎上進行項目開發。● 使用Blazor、Razor Pages、MVC模式和ASP.NET Core的其他特性構建豐富的Web應用● 利用面向對象編程構建自己的類型● 編寫、測試和調試函數● 使用LINQ查詢和操作數據● 使用Entity Framework Core模型在應用程序中集成和更新數據庫● 使用最新的技術,包括Web API和最小API,構建和消費強大的服務
《C# 11和.NET 7入門與跨平臺開發(第7版)》針對C# 11和.NET 7的全新特性進行全面修訂,幫助你自信地使用C#編寫代碼。 你將全面學習面向對象編程,包括編寫、測試和調試函數,實現接口,以及繼承類等。之后,你將學習如何使用.NET API來執行不同的任務,如管理和查詢數據、使用文件系統以及序列化。在學習過程中,你還將構建并部署一些跨平臺項目,包括使用ASP.NET Core創建網站和服務。 為了避免不必要的圖形用戶界面代碼讓你分心,本書的前11章通過簡單的控制臺應用程序來講解C#語言的構造和許多.NET庫。掌握了基礎知識后,你將在之后的章節中使用ASP.NET Core、MVC模式和Blazor構建網站、Web服務和瀏覽器應用。
有些C#書籍長達數千頁,旨在全面介紹C#編程語言、.NET 庫和應用程序模型(如網站、服務、桌面應用和移動應用)。本書與眾不同,內容簡潔清晰、行文流暢,每個主題都配有實際動手演練項目。進行總體敘述的廣度是以犧牲一定深度為代價的,但如果愿意,你就會發現許多主題都值得進一步探索。本書也是一本循序漸進的學習指南,可用于通過跨平臺的.NET 學習現代C#實踐,并簡要介紹Web 開發的基礎知識,以及可以使用它們構建的網站和服務。本書最適合C#和.NET 初學者閱讀,也適合學過C#但感覺在過去幾年自身技術已落伍的程序員閱讀。如果有使用舊版本C#語言的經驗,那么可以在2.1 節查看介紹新語言特性的表格,并直接跳到相應的部分閱讀。如果有使用較舊版本的.NET 庫的經驗,那么可以在7.1 節查看介紹新庫特性的表格,并直接跳到相應的部分閱讀。本書將指出C#和.NET 的一些優缺點,讓你在同事面前留下深刻的印象,并快速提高工作效率。本書的解釋不會事無巨細,以免因放慢速度導致讀者感到無聊,而是假設讀者足夠聰明,能夠自行對一些初、中級程序員需要了解的主題進行搜索和解釋。本書內容第1章介紹如何設置開發環境,并通過C#和.NET,使用Visual Studio 2022或Visual Studio Code創建最簡單的應用程序。對于簡化的控制臺應用程序,將使用C# 9 中引入的頂級程序功能。在C# 10 及更高版本中,默認項目模板使用了頂級程序功能。為了學習如何編寫簡單的語言構造和庫特性,在一個在線小節中介紹了.NET Interactive Notebooks 的使用。該章還介紹了可以從哪里尋求幫助,以及與我聯系的方法,以便在某個問題上獲得幫助,或者向我提供反饋,使我能夠在GitHub 存儲庫或將來的印刷版本中改進本書。第2 章介紹C#的版本,并通過一些表介紹各個版本的新特性,然后解釋C#日常用來為應用程序編寫源代碼的語法和詞匯。特別是,該章將講述如何聲明和處理不同類型的變量,還將展示C# 11 中的原始字符串字面值特性多么有用。第3 章討論如何使用操作符對變量執行簡單的操作,包括比較、編寫決策,C# 7 到 C# 11 中的模式匹配,以及重復語句塊和類型之間的轉換。該章還介紹在不可避免地發生錯誤時,如何編寫防御性代碼來處理這些錯誤。第4 章講述如何遵循Dont Repeat Yourself (不要重復自己,DRY)原則,使用命令式和函數式風格編寫可重用的函數。你將學習使用調試工具來跟蹤和刪除bug,利用熱加載在應用程序運行過程中進行修改,在執行代碼時監視代碼以診斷問題,以及在將代碼部署到生產環境之前嚴格測試代碼,以刪除bug 并確保穩定性和可靠性。第5 章討論類可以擁有的所有不同類別的成員,包括存儲數據的字段和執行操作的方法。涉及面向對象編程(Object-Oriented Programming,OOP)概念,如聚合和封裝。你將學習一些語言特性,比如元組語法支持和out 變量,運算符和局部函數,默認的字面值和推斷出的元組名稱,以及如何使用C# 9 中引入的record 關鍵字、init-only 屬性和with 表達式來定義和使用不可變類型。還將介紹C# 11 引入的required 關鍵字,它可以幫助避免過度使用構造函數來控制初始化。第6 章解釋如何使用OOP 從現有類型派生出新的類型。你將學習如何定義委托和事件,如何實現關于基類和派生類的接口,如何覆蓋類型成員以及使用多態性,如何創建擴展方法,如何在繼承層次結構中的類之間進行轉換,以及C# 8 中引入的可空引用類型帶來的巨大變化,并且在C# 10 及更高版本中使其成為了默認類型。你還將學習分析器如何幫助你編寫更好的代碼。第7 章介紹.NET 的版本,并給出一些表來說明哪些版本引入了一些新特性,然后介紹與.NET Standard 兼容的.NET 類型以及它們與 C#的關系。你將學習如何在任何受支持的操作系統(Windows、macOS 和Linux 變體)上編寫和編譯代碼。你將學習如何打包、部署和分發自己的應用程序和庫。第8 章討論允許代碼執行的實際任務的類型,例如操作數字和文本、在集合中存儲項和使用網絡(在線小節)。 還將學習正則表達式,讓正則表達式變得更容易編寫的一些改進方法,以及在.NET 7 中,如何使用源代碼生成器來提高它們的性能。第9 章討論與文件系統的交互、對文件和流的讀寫、文本編碼、諸如JSON 和XML 的序列化格式,還涉及改進的功能以及System.Text.Json 類的性能問題。第10 章解釋如何使用名為Entity Framework Core (EF Core)的ORM 技術來讀寫關系數據庫,如Microsoft SQL Server 和SQLite。了解如何使用數據庫優先模型定義映射到數據庫中現有表的實體模型,以及如何定義可以在運行時創建表和數據庫的Code First 模型(在線小節)。第11 章介紹LINQ。LINQ 擴展語言增加了處理條目序列、篩選、排序,以及將它們投影到不同輸出的能力。介紹.NET 6 中新引入的LINQ 方法,如TryGetNonEnumeratedCount 和DistinctBy,以及.NET 7 中新引入的LINQ 方法,如Order 和OrderDescending。你將了解LINQ to XML 的特殊功能。該章的一個在線小節介紹了如何使用并行LINQ (PLINQ)提高效率。第12 章介紹可以使用C#和.NET 構建的Web 應用程序的類型。該章還將通過構建EF Core模型來表示虛構組織Northwind 的數據庫。Northwind 數據庫將貫穿用于本書的剩余部分。最后,介紹了常用的Web 技術。第13 章介紹在服務器端通過ASP.NET Core 使用現代HTTP 架構構建網站的基礎知識。你將學習如何實現一種ASP.NET Core 特性(Razor Pages),從而簡化為小型網站創建動態網頁的過程,還將學習如何構建HTTP 請求和響應管道,以及如何在網站項目中啟用HTTP/3。第14 章討論程序員團隊如何利用ASP.NET Core MVC 以一種易于進行單元測試和管理的方式構建大型、復雜的網站。你將了解啟動配置、身份驗證、路由、模型、視圖和控制器。還將了解一種.NET 社區熱切期盼并最終在ASP.NET Core 7 中實現的特性:輸出緩存。第15 章解釋如何使用ASP.NET Core Web API 構建后端REST 體系結構Web 服務。討論如何使用OpenAPI 記錄和測試它們,以及如何使用工廠實例化的HTTP 客戶端正確地使用它們。該章介紹ASP.NET Core 6 中引入的最小API,這種API 減少了實現簡單Web 服務時需要的代碼行數。第16 章介紹如何使用Blazor 構建Web 用戶界面組件,這些組件既可以在服務器端執行,又可以在Web 瀏覽器中執行。該章還討論Blazor 服務器和Blazor WebAssembly 的區別,以及如何構建能夠更容易地在這兩種托管模型之間進行切換的組件。結語針對進一步學習C#和.NET 提供了一些選項。附錄A 中提供了各章練習的解決方案(在線提供)。要做的準備工作可在許多平臺上使用Visual Studio Code 和命令行工具開發和部署C#和.NET 應用程序,包括Windows、macOS 和各種Linux 發行版。只需要一個支持Visual Studio Code 和互聯網連接的操作系統就可以學習本書的內容。如果更喜歡在Windows 或macOS 上使用Visual Studio 2022,或者使用像JetBrains Rider 這樣的第三方工具,那么也可以使用。下載示例代碼、彩色圖片、附錄A本書代碼可通過掃描封底的二維碼進行下載,也可從GitHub 存儲庫中獲取。書中的一些屏幕截圖和圖表用彩色效果可能更佳,為此,我們專門制作了一份PDF 文件,讀者可通過封底二維碼下載該文件。另外,本書在線提供的附錄A 給出了各章練習的答案,讀者也可通過掃描封底的二維碼進行下載。
Mark J. Price是一位擁有20多年C#編程經驗的微軟認證技術專家,他專注于C#編程以及構建Azure 云解決方案。自1993 年以來,Mark 已通過了80 多次微軟編程考試,他特別擅長傳道授業。從2001 年到2003年,Mark 在美國雷德蒙德全職為微軟編寫官方課件。當C#還處于alpha版本時,他的團隊就為C#編寫了第一個培訓教程。在微軟任職期間,他為培訓師上課,指導微軟認證培訓師快速掌握C#和.NET。Mark 職業生涯中的大部分時間都在培訓各類學生,從16 歲的新人到70 歲的退休人員,其中大部分是專業開發人員。Mark 擁有計算機科學學士學位。
第1 章 C#與.NET 入門 11.1 設置開發環境 21.1.1 選擇適合學習的工具和應用程序類型 31.1.2 跨平臺部署 51.1.3 下載并安裝Visual Studio 2022 for Windows 51.1.4 下載并安裝Visual Studio Code 61.2 理解.NET 81.2.1 理解.NET Framework 81.2.2 理解Mono、Xamarin 和Unity項目 91.2.3 理解.NET Core 91.2.4 了解走向.NET 的過程 91.2.5 了解.NET 支持 101.2.6 現代.NET 的區別 121.2.7 了解.NET Standard 131.2.8 本書使用的.NET 平臺和工具 141.2.9 Apps and Services with NET 7 中涵蓋的主題 151.2.10 理解中間語言 151.2.11 比較.NET 技術 151.3 使用Visual Studio 2022 構建控制臺應用程序 161.3.1 使用Visual Studio 2022 管理多個項目 161.3.2 使用Visual Studio 2022編寫代碼 161.3.3 使用Visual Studio 編譯和運行代碼 171.3.4 理解頂級程序 191.3.5 使用Visual Studio 2022 添加第二個項目 211.4 使用Visual Studio Code 構建控制臺應用程序 221.4.1 使用Visual Studio Code 管理多個項目 221.4.2 使用Visual Studio Code編寫代碼 221.4.3 使用dotnet CLI 編譯和運行代碼 251.4.4 使用Visual Studio Code 添加第二個項目 261.5 使用.NET Interactive Notebook探索代碼 271.6 檢查項目的文件夾和文件 281.6.1 了解常見的文件夾和文件 281.6.2 理解GitHub 中的解決方案代碼 281.7 充分利用本書的GitHub 存儲庫 291.7.1 對本書提出問題 291.7.2 反饋 291.7.3 從GitHub 存儲庫下載解決方案代碼 301.7.4 在Visual Studio Code 和命令行中使用Git 301.8 尋求幫助 311.8.1 閱讀微軟文檔 311.8.2 獲取關于dotnet 工具的幫助 311.8.3 獲取類型及其成員的定義 321.8.4 在Stack Overflow 上尋找答案 341.8.5 使用谷歌搜索答案 341.8.6 訂閱官方的.NET 博客 351.8.7 觀看Scott Hanselman 的視頻 351.8.8 本書的配套圖書 351.9 實踐和探索 351.9.1 練習1.1:測試你掌握的知識 361.9.2 練習1.2:使用瀏覽器在任何地方練習C# 361.9.3 練習1.3:探索主題 361.9.4 練習1.4:探索現代.NET 的主題 371.10 本章小結 37第2 章 C#編程基礎 382.1 介紹C# 382.1.1 理解語言版本和特性 382.1.2 了解C#標準 422.1.3 了解C#編譯器版本 432.2 理解C#語法和詞匯 452.2.1 顯示編譯器版本 452.2.2 了解C#語法 462.2.3 語句 462.2.4 注釋 472.2.5 塊 472.2.6 語句和塊的示例 482.2.7 了解C#詞匯表 482.2.8 將編程語言與人類語言進行比較 482.2.9 改變C#語法的配色方案 492.2.10 如何編寫正確的代碼 492.2.11 導入名稱空間 502.2.12 動詞表示方法 532.2.13 名詞表示類型、變量、字段和屬性 542.2.14 揭示C#詞匯表的范圍 542.3 使用變量 562.3.1 命名和賦值 572.3.2 字面值 572.3.3 存儲文本 572.3.4 存儲數字 602.3.5 存儲實數 612.3.6 存儲布爾值 642.3.7 存儲任何類型的對象 642.3.8 動態存儲類型 652.3.9 聲明局部變量 662.3.10 獲取和設置類型的默認值 682.4 深入研究控制臺應用程序 692.4.1 向用戶顯示輸出 692.4.2 從用戶那里獲取文本輸入 722.4.3 簡化控制臺的使用 732.4.4 獲取用戶的重要輸入 742.4.5 向控制臺應用程序傳遞參數 742.4.6 使用參數設置選項 762.4.7 處理不支持API 的平臺 782.5 理解async 和await 792.6 實踐和探索 802.6.1 練習2.1:測試你掌握的知識 812.6.2 練習2.2:測試你對數字類型的了解 812.6.3 練習2.3:練習數字大小和范圍 812.6.4 練習2.4:探索主題 822.7 本章小結 82第3 章 控制程序流程、轉換類型和處理異常 833.1 操作變量 833.1.1 一元算術運算符 843.1.2 二元算術運算符 853.1.3 賦值運算符 863.1.4 邏輯運算符 863.1.5 條件邏輯運算符 873.1.6 按位和二元移位運算符 883.1.7 其他運算符 903.2 理解選擇語句 903.2.1 使用if 語句進行分支 903.2.2 模式匹配與if 語句 913.2.3 使用switch 語句進行分支 923.2.4 模式匹配與switch 語句 943.2.5 使用switch 表達式簡化switch 語句 953.3 理解迭代語句 963.3.1 while 循環語句 963.3.2 do 循環語句 973.3.3 for 循環語句 973.3.4 foreach 循環語句 983.3.5 在數組中存儲多個值 993.4 類型轉換 1053.4.1 隱式和顯式地轉換數字 1053.4.2 使用System.Convert 類型進行轉換 1073.4.3 圓整數字 1073.4.4 控制圓整規則 1083.4.5 從任何類型轉換為字符串 1083.4.6 從二進制對象轉換為字符串 1093.4.7 將字符串轉換為數字或日期和時間 1103.5 處理異常 1113.6 檢查溢出 1153.6.1 使用checked 語句拋出溢出異常 1153.6.2 使用unchecked 語句禁用編譯時溢出檢查 1163.7 實踐和探索 1173.7.1 練習3.1:測試你掌握的知識 1183.7.2 練習3.2:探索循環和溢出 1183.7.3 練習3.3:實踐循環和運算符 1183.7.4 練習3.4:實踐異常處理 1193.7.5 練習3.5:測試你對運算符的認識程度 1193.7.6 練習3.6:探索主題 1193.8 本章小結 120第4 章 編寫、調試和測試函數 1214.1 編寫函數 1214.1.1 理解頂級程序和函數 1214.1.2 乘法表示例 1234.1.3 簡述實參與形參 1254.1.4 編寫帶返回值的函數 1264.1.5 將數字從序數轉換為基數 1284.1.6 用遞歸計算階乘 1294.1.7 使用XML 注釋解釋函數 1324.1.8 在函數實現中使用lambda 1334.2 在開發過程中進行調試 1354.2.1 在調試期間使用Visual Studio Code集成終端 1354.2.2 創建帶有故意錯誤的代碼 1364.2.3 設置斷點并開始調試 1374.2.4 使用調試工具欄進行導航 1394.2.5 調試窗口 1404.2.6 單步執行代碼 1404.2.7 自定義斷點 1414.3 在開發期間進行熱重載 1424.3.1 使用Visual Studio 2022 進行熱重載 1434.3.2 使用Visual Studio Code 和命令行進行熱重載 1434.4 在開發和運行時進行日志記錄 1444.4.1 理解日志記錄選項 1444.4.2 使用Debug 和Trace 類型 1444.4.3 配置跟蹤偵聽器 1464.4.4 切換跟蹤級別 1474.4.5 記錄有關源代碼的信息 1524.5 單元測試 1534.5.1 理解測試類型 1534.5.2 創建需要測試的類庫 1544.5.3 編寫單元測試 1564.6 在函數中拋出和捕獲異常 1584.6.1 理解使用錯誤和執行錯誤 1584.6.2 在函數中通常拋出異常 1584.6.3 理解調用堆棧 1594.6.4 在哪里捕獲異常 1624.6.5 重新拋出異常 1624.6.6 實現tester-doer 模式 1634.7 實踐和探索 1644.7.1 練習4.1:測試你掌握的知識 1644.7.2 練習4.2:使用調試和單元測試練習函數的編寫 1654.7.3 練習4.3:探索主題 1654.8 本章小結 165第5 章 使用面向對象編程技術構建自己的類型 1665.1 面向對象編程 1665.2 構建類庫 1675.2.1 創建類庫 1675.2.2 在名稱空間中定義類 1685.2.3 理解成員 1695.2.4 實例化類 1695.2.5 導入名稱空間以使用類型 1705.2.6 理解對象 1725.3 在字段中存儲數據 1735.3.1 定義字段 1735.3.2 理解訪問修飾符 1745.3.3 設置和輸出字段值 1745.3.4 使用enum 類型存儲值 1755.3.5 使用enum 類型存儲多個值 1765.4 使用集合存儲多個值 1775.4.1 理解泛型集合 1785.4.2 使字段成為靜態字段 1785.4.3 使字段成為常量 1795.4.4 使字段只讀 1805.4.5 使用構造函數初始化字段 1815.5 編寫和調用方法 1825.5.1 從方法返回值 1825.5.2 使用元組組合多個返回值 1825.5.3 定義參數并將參數傳遞給方法 1855.5.4 重載方法 1865.5.5 傳遞可選參數和命名參數 1865.5.6 控制參數的傳遞方式 1885.5.7 理解ref 返回 1895.5.8 使用partial 關鍵字拆分類 1895.6 使用屬性和索引器控制訪問 1905.6.1 定義只讀屬性 1905.6.2 定義可設置的屬性 1915.6.3 要求在實例化期間設置屬性 1935.6.4 定義索引器 1955.7 有關方法的詳細介紹 1965.7.1 使用方法實現功能 1965.7.2 使用運算符實現功能 1995.7.3 使用局部函數實現功能 2015.8 模式匹配和對象 2025.8.1 定義飛機乘客 2025.8.2 C# 9 及后續版本對模式匹配做了增強 2035.9 使用記錄 2045.9.1 init-only 屬性 2045.9.2 理解記錄 2055.9.3 記錄中的位置數據成員 2065.10 實踐和探索 2065.10.1 練習5.1:測試你掌握的知識 2075.10.2 練習5.2:探索主題 2075.11 本章小結 207第6 章 實現接口和繼承類 2086.1 建立類庫和控制臺應用程序 2086.2 使用泛型安全地重用類型 2106.2.1 使用非泛型類型 2106.2.2 使用泛型類型 2116.3 觸發和處理事件 2126.3.1 使用委托調用方法 2126.3.2 定義和處理委托 2136.3.3 定義和處理事件 2156.4 實現接口 2166.4.1 公共接口 2166.4.2 排序時比較對象 2166.4.3 使用單獨的類比較對象 2206.4.4 隱式和顯式的接口實現 2216.4.5 使用默認實現定義接口 2226.5 使用引用類型和值類型管理內存 2236.5.1 定義引用類型和值類型 2236.5.2 如何在內存中存儲引用類型和值類型 2246.5.3 類型的相等性 2256.5.4 定義struct 類型 2266.5.5 使用record struct 類型 2286.5.6 釋放非托管資源 2286.5.7 確保調用Dispose 方法 2296.6 使用空值 2306.6.1 使值類型可為空 2306.6.2 了解與null 相關的縮略詞 2326.6.3 理解可空引用類型 2326.6.4 控制可空性警告檢查特性 2326.6.5 聲明非可空變量和參數 2336.6.6 檢查null 2356.7 從類繼承 2376.7.1 擴展類以添加功能 2376.7.2 隱藏成員 2376.7.3 覆蓋成員 2386.7.4 從抽象類繼承 2396.7.5 防止繼承和覆蓋 2406.7.6 理解多態 2416.8 在繼承層次結構中進行類型轉換 2426.8.1 隱式類型轉換 2426.8.2 顯式類型轉換 2426.8.3 避免類型轉換異常 2436.9 繼承和擴展.NET 類型 2446.9.1 繼承異常 2446.9.2 無法繼承時擴展類型 2466.10 編寫更好的代碼 2486.10.1 將警告視為錯誤 2486.10.2 了解警告波 2506.10.3 使用分析器編寫更好的代碼 2516.10.4 抑制警告 2546.10.5 修改代碼 2546.11 實踐和探索 2576.11.1 練習6.1:測試你掌握的知識 2576.11.2 練習6.2:練習創建繼承層次結構 2576.11.3 練習6.3:探索主題 2586.12 本章小結 258第7 章 打包和分發.NET 類型 2597.1 NET 7 簡介 2597.1.1 NET Core 1.0 2607.1.2 NET Core 1.1 2607.1.3 NET Core 2.0 2607.1.4 NET Core 2.1 2607.1.5 NET Core 2.2 2617.1.6 NET Core 3.0 2617.1.7 NET Core 3.1 2617.1.8 NET 5.0 2617.1.9 NET 6.0 2627.1.10 NET 7.0 2627.1.11 使用.NET 5 及后續版本提高性能 2627.1.12 檢查.NET SDK 以進行更新 2627.2 了解.NET 組件 2637.2.1 程序集、NuGet 包和名稱空間 2637.2.2 微軟.NET SDK 平臺 2647.2.3 理解程序集中的名稱空間和類型 2647.2.4 NuGet 包 2657.2.5 理解框架 2657.2.6 導入名稱空間以使用類型 2667.2.7 將C#關鍵字與.NET 類型相關聯 2667.2.8 使用.NET Standard 在舊平臺之間共享代碼 2687.2.9 理解不同SDK 中類庫的默認設置 2697.2.10 創建.NET Standard 2.0 類庫 2707.2.11 控制.NET SDK 2707.3 發布用于部署的代碼 2717.3.1 創建要發布的控制臺應用程序 2717.3.2 理解dotnet 命令 2737.3.3 獲取關于.NET 及其環境的信息 2747.3.4 管理項目 2747.3.5 發布自包含的應用程序 2757.3.6 發布單文件應用 2767.3.7 使用app trimming 系統減小應用程序的大小 2777.4 反編譯.NET 程序集 2787.4.1 使用Visual Studio 2022 的ILSpy擴展進行反編譯 2787.4.2 使用Visual Studio 2022 查看源鏈接 2837.4.3 不能在技術上阻止反編譯 2837.5 為NuGet 分發打包自己的庫 2847.5.1 引用NuGet 包 2847.5.2 為NuGet 打包庫 2857.5.3 使用工具探索NuGet 包 2897.5.4 測試類庫包 2907.6 從.NET Framework 移植到現代.NET 2907.6.1 能移植嗎 2917.6.2 應該移植嗎 2917.6.3 NET Framework 和現代.NET的區別 2927.6.4 NET 可移植性分析器 2927.6.5 NET 升級助手 2927.6.6 使用非.NET Standard 類庫 2927.7 使用預覽特性 2947.7.1 需要預覽特性 2947.7.2 使用預覽特性 2947.8 實踐和探索 2957.8.1 練習7.1:測試你掌握的知識 2957.8.2 練習7.2:探索主題 2957.8.3 練習7.3:探索PowerShell 2957.9 本章小結 296第8 章 使用常見的.NET 類型 2978.1 處理數字 2978.1.1 處理大的整數 2988.1.2 處理復數 2988.1.3 理解四元數 2998.1.4 為游戲和類似應用程序生成隨機數 2998.2 處理文本 3008.2.1 獲取字符串的長度 3008.2.2 獲取字符串中的字符 3018.2.3 拆分字符串 3018.2.4 獲取字符串的一部分 3018.2.5 檢查字符串的內容 3028.2.6 連接、格式化和其他的字符串成員 3028.2.7 高效地連接字符串 3048.3 模式匹配與正則表達式 3048.3.1 檢查作為文本輸入的數字 3048.3.2 改進正則表達式的性能 3058.3.3 正則表達式的語法 3058.3.4 正則表達式示例 3068.3.5 拆分使用逗號分隔的復雜字符串 3078.3.6 激活正則表達式語法著色 3088.3.7 使用源生成器提高正則表達式的性能 3118.4 在集合中存儲多個對象 3128.4.1 所有集合的公共特性 3138.4.2 通過確保集合的容量來提高性能 3148.4.3 理解集合的選擇 3148.4.4 使用列表 3178.4.5 使用字典 3198.4.6 使用隊列 3208.4.7 集合的排序 3228.4.8 使用專門的集合 3228.4.9 使用不可變集合 3238.4.10 集合的最佳實踐 3238.5 使用Span、索引和范圍 3248.5.1 通過Span 高效地使用內存 3248.5.2 用索引類型標識位置 3248.5.3 使用Range 類型標識范圍 3258.5.4 使用索引、范圍和Span 3258.6 使用網絡資源 3268.6.1 使用URI、DNS 和IP 地址 3268.6.2 ping 服務器 3278.7 實踐和探索 3288.7.1 練習8.1:測試你掌握的知識 3288.7.2 練習8.2:練習正則表達式 3298.7.3 練習8.3:練習編寫擴展方法 3298.7.4 練習8.4:探索主題 3298.8 本章小結 330第9 章 處理文件、流和序列化 3319.1 管理文件系統 3319.1.1 處理跨平臺環境和文件系統 3319.1.2 管理驅動器 3339.1.3 管理目錄 3349.1.4 管理文件 3359.1.5 管理路徑 3369.1.6 獲取文件信息 3379.1.7 控制處理文件的方式 3389.2 用流來讀寫 3389.2.1 理解抽象和具體的流 3389.2.2 寫入文本流 3409.2.3 寫入XML 流 3429.2.4 壓縮流 3449.2.5 使用tar 存檔文件 3469.2.6 讀寫tar 條目 3509.3 編碼和解碼文本 3509.3.1 將字符串編碼為字節數組 3519.3.2 對文件中的文本進行編碼和解碼 3539.3.3 使用隨機訪問句柄讀寫文本 3539.4 序列化對象圖 3549.4.1 序列化為XML 3549.4.2 生成緊湊的XML 3569.4.3 反序列化XML 文件 3579.4.4 用JSON 序列化 3589.4.5 高性能的JSON 處理 3599.5 控制處理JSON 的方式 3609.5.1 用于處理HTTP 響應的新的JSON 擴展方法 3639.5.2 從Newtonsoft 遷移到新的JSON 3639.6 實踐和探索 3639.6.1 練習9.1:測試你掌握的知識 3639.6.2 練習9.2:練習序列化為XML 3649.6.3 練習9.3:探索主題 3649.7 本章小結 365第10 章 使用Entity Framework Core處理數據 36610.1 理解現代數據庫 36610.1.1 理解舊的實體框架 36710.1.2 理解Entity Framework Core 36710.1.3 理解數據庫優先和代碼優先 36810.1.4 EF Core 7 的性能改進 36810.1.5 使用EF Core 創建控制臺應用程序 36810.1.6 使用示例關系數據庫 36810.1.7 使用SQLite 36910.1.8 為SQLite 創建Northwind示例數據庫 37010.1.9 使用SQLiteStudio 管理Northwind 示例數據庫 37110.1.10 為SQLite 使用輕量級的ADO.NET 提供程序 37310.1.11 為Windows 使用SQL Server 37310.2 設置EF Core 37310.2.1 選擇EF Core 數據庫提供程序 37310.2.2 連接到數據庫 37410.2.3 定義Northwind 數據庫上下文類 37410.3 定義EF Core 模型 37510.3.1 使用EF Core 約定定義模型 37510.3.2 使用EF Core 注解特性定義模型 37610.3.3 使用EF Core Fluent API 定義模型 37710.3.4 為Northwind 表構建EF Core模型 37710.3.5 向Northwind 數據庫上下文類添加表 38010.3.6 安裝dotnet-ef 工具 38010.3.7 使用現有數據庫搭建模型 38110.3.8 自定義逆向工程模板 38410.3.9 配置約定前模型 38410.4 查詢EF Core 模型 38510.4.1 過濾結果中返回的實體 38710.4.2 過濾和排序產品 38910.4.3 獲取生成的SQL 39010.4.4 記錄EF Core 39110.4.5 使用Like 進行模式匹配 39310.4.6 在查詢中生成隨機數 39410.4.7 定義全局過濾器 39510.5 使用EF Core 加載模式 39610.5.1 使用Include 擴展方法立即加載實體 39610.5.2 啟用延遲加載 39610.5.3 使用Load 方法顯式加載實體 39710.6 使用EF Core 修改數據 39910.6.1 插入實體 39910.6.2 更新實體 40210.6.3 刪除實體 40310.6.4 更高效的更新和刪除 40410.6.5 池化數據庫環境 40710.7 使用事務 40710.7.1 使用隔離級別控制事務 40810.7.2 定義顯式事務 40810.8 定義Code First EF Core 模型 40910.9 實踐和探索 40910.9.1 練習10.1:測試你掌握的知識 40910.9.2 練習10.2:練習使用不同的序列化格式導出數據 41010.9.3 練習10.3:探索主題 41010.9.4 練習10.4:探索NoSQL數據庫 41010.10 本章小結 410第11 章 使用LINQ 查詢和操作數據 41111.1 為什么使用LINQ 41111.2 編寫LINQ 表達式 41211.2.1 LINQ 的組成 41211.2.2 使用Enumerable 類構建LINQ表達式 41211.2.3 理解延遲執行 41411.2.4 使用Where 擴展方法過濾實體 41511.2.5 以命名方法為目標 41711.2.6 通過刪除委托的顯式實例化來簡化代碼 41711.2.7 以lambda 表達式為目標 41811.2.8 實體的排序 41811.2.9 按項自身排序 41911.2.10 使用var 或指定類型聲明查詢 41911.2.11 根據類型進行過濾 42011.2.12 使用LINQ 處理集合和bag 42111.3 使用LINQ 與EF Core 42211.3.1 構建EF Core 模型 42311.3.2 序列的過濾和排序 42511.3.3 將序列投影到新的類型中 42711.3.4 連接和分組序列 42911.3.5 聚合序列 43111.3.6 小心使用Count 43311.3.7 使用LINQ 分頁 43511.4 使用語法糖美化LINQ 語法 43811.5 使用帶有并行LINQ 的多個線程 43911.6 創建自己的LINQ 擴展方法 43911.7 使用LINQ to XML 44211.7.1 使用LINQ to XML生成XML 44211.7.2 使用LINQ to XML讀取XML 44311.8 實踐和探索 44411.8.1 練習11.1:測試你掌握的知識 44411.8.2 練習11.2:練習使用LINQ進行查詢 44511.8.3 練習11.3:探索主題 44511.9 本章小結 446第12 章 使用ASP.NET Core 進行Web 開發 44712.1 理解ASP.NET Core 44712.1.1 經典ASP.NET 與現代ASP.NET Core 的對比 44812.1.2 使用ASP.NET Core 構建網站 44912.1.3 構建Web 服務和其他服務 45012.2 ASP.NET Core 的新特性 45012.2.1 ASP.NET Core 1.0 45112.2.2 ASP.NET Core 1.1 45112.2.3 ASP.NET Core 2.0 45112.2.4 ASP.NET Core 2.1 45112.2.5 ASP.NET Core 2.2 45112.2.6 ASP.NET Core 3.0 45212.2.7 ASP.NET Core 3.1 45212.2.8 Blazor WebAssembly 3.2 45212.2.9 ASP.NET Core 5.0 45212.2.10 ASP.NET Core 6.0 45312.2.11 ASP.NET Core 7.0 45312.3 結構化項目 45312.4 建立實體數據模型供本書剩余部分章節使用 45412.4.1 使用SQLite 創建實體模型類庫 45512.4.2 使用SQL Server 創建實體模型類庫 46212.4.3 測試類庫 46512.5 了解Web 開發 46612.5.1 HTTP 46612.5.2 使用Google Chrome 瀏覽器發出HTTP 請求 46812.5.3 了解客戶端Web 開發技術 47012.6 實踐和探索 47012.6.1 練習12.1:測試你掌握的知識 47012.6.2 練習12.2:了解Web 開發中常用的縮寫 47112.6.3 練習12.3:探索主題 47112.7 本章小結 471第13 章 使用ASP.NET Core Razor Pages構建網站 47213.1 了解ASP.NET Core 47213.1.1 創建空的ASP.NET Core項目 47213.1.2 測試和保護網站 47413.1.3 控制托管環境 47813.1.4 使網站能夠提供靜態內容 47913.2 了解ASP.NET Core Razor Pages 48113.2.1 啟用Razor Pages 48113.2.2 給Razor Pages 添加代碼 48213.2.3 通過Razor Pages 使用共享布局 48313.2.4 使用后臺代碼文件與Razor Pages 48513.3 使用Entity Framework Core 與ASP.NET Core 48713.3.1 將Entity Framework Core配置為服務 48713.3.2 使用Razor Pages 操作數據 48913.3.3 將依賴服務注入Razor Pages 中 49013.4 使用Razor 類庫 49113.4.1 禁用Visual Studio Code 的Compact Folders 功能 49113.4.2 創建Razor 類庫 49213.4.3 實現分部視圖以顯示單個員工 49413.4.4 使用和測試Razor 類庫 49513.5 配置服務和HTTP 請求管道 49613.5.1 了解端點路由 49613.5.2 配置端點路由 49613.5.3 查看項目中的端點路由配置 49613.5.4 配置HTTP 管道 49813.5.5 總結關鍵的中間件擴展方法 49913.5.6 可視化HTTP 管道 49913.5.7 實現匿名內聯委托作為中間件 50013.5.8 啟用對請求解壓縮的支持 50113.6 啟用HTTP/3 支持 50213.7 實踐和探索 50413.7.1 練習13.1:測試你掌握的知識 50413.7.2 練習13.2:練習建立數據驅動的網頁 50413.7.3 練習13.3:練習為控制臺應用程序構建Web 頁面 50413.7.4 練習13.4:探索主題 50513.8 本章小結 505第14 章 使用MVC 模式構建網站 50614.1 設置ASP.NET Core MVC網站 50614.1.1 創建ASP.NET Core MVC網站 50614.1.2 為SQL Server LocalDB 創建認證數據庫 50714.1.3 探索默認的ASP.NET Core MVC網站 50914.1.4 啟動MVC 網站項目 51014.1.5 了解訪問者注冊 51114.1.6 查看MVC 網站項目結構 51114.1.7 回顧ASP.NET Core Identity數據庫 51314.2 探索ASP.NET Core MVC網站 51414.2.1 ASP.NET Core MVC 的初始化 51414.2.2 MVC 的默認路由 51614.2.3 理解控制器和操作 51714.2.4 理解視圖搜索路徑約定 52014.2.5 使用依賴服務進行記錄 52014.2.6 實體和視圖模型 52114.2.7 視圖 52314.2.8 理解如何使用標記助手避開緩存 52514.3 自定義ASP.NET Core MVC網站 52614.3.1 自定義樣式 52614.3.2 設置類別圖像 52614.3.3 Razor 語法和表達式 52614.3.4 定義類型化視圖 52714.3.5 使用路由值傳遞參數 53014.3.6 模型綁定程序 53214.3.7 驗證模型 53514.3.8 使用HTML 輔助方法定義視圖 53714.3.9 使用標記助手定義視圖 53814.3.10 跨功能過濾器 53814.3.11 使用輸出緩存 54314.4 查詢數據庫和使用顯示模板 54714.5 使用異步任務提高可伸縮性 55014.6 實踐與探索 55114.6.1 練習14.1:測試你掌握的知識 55114.6.2 練習14.2:通過實現類別詳細信息頁面練習實現MVC 55214.6.3 練習14.3:理解和實現異步操作方法以提高可伸縮性 55214.6.4 練習14.4:對MVC 控制器進行單元測試 55214.6.5 練習14.5:探索主題 55214.7 本章小結 552第15 章 構建和消費Web 服務 55415.1 使用ASP.NET Core Web API構建Web 服務 55415.1.1 理解Web 服務縮寫詞 55415.1.2 理解Web API 的HTTP 請求和響應 55515.1.3 創建ASP.NET Core Web API項目 55615.1.4 檢查Web 服務的功能 55915.1.5 為Northwind 示例數據庫創建Web 服務 56015.1.6 為實體創建數據存儲庫 56215.1.7 實現Web API 控制器 56515.1.8 配置客戶存儲庫和Web API控制器 56615.1.9 指定問題的細節 57015.1.10 控制XML 序列化 57015.2 解釋和測試Web 服務 57115.2.1 使用瀏覽器測試GET 請求 57115.2.2 使用REST Client 擴展測試HTTP 請求 57215.2.3 理解Swagger 57515.2.4 使用Swagger UI 測試請求 57515.2.5 啟用HTTP 日志記錄 57815.2.6 W3CLogger 支持記錄額外的請求頭 58015.3 使用HTTP 客戶端消費Web 服務 58015.3.1 了解HttpClient 類 58015.3.2 使用HttpClientFactory 配置HTTP 客戶端 58115.3.3 在控制器中以JSON 格式獲取客戶 58115.3.4 啟動多個項目 58315.3.5 啟動Web 服務和MVC 客戶端項目 58515.4 為Web 服務實現高級功能 58615.5 使用最小API 構建Web 服務 58615.5.1 測試最小天氣服務 58815.5.2 向Northwind 網站主頁添加天氣預報 58815.6 實踐和探索 59115.6.1 練習15.1:測試你掌握的知識 59115.6.2 練習15.2:練習使用HttpClient創建和刪除客戶 59115.6.3 練習15.3:探索主題 59115.7 本章小結 591第16 章 使用Blazor 構建用戶界面 59216.1 理解Blazor 59216.1.1 JavaScript 59216.1.2 Silverlight使用插件的C#和.NET 59316.1.3 WebAssemblyBlazor 的目標 59316.1.4 理解Blazor 托管模型 59316.1.5 理解Blazor 組件 59416.1.6 比較Blazor 和Razor 59416.2 比較Blazor 項目模板 59516.2.1 Blazor 服務器項目模板 59516.2.2 理解到頁面組件的Blazor路由 60016.2.3 運行Blazor 服務器項目模板 60316.2.4 查看Blazor WebAssembly項目模板 60416.3 使用Blazor 服務器構建組件 60816.3.1 定義和測試簡單的Blazor服務器組件 60816.3.2 將組件轉換成可路由的頁面組件 60916.3.3 將實體放入組件 61016.3.4 為Blazor 組件抽象服務 61316.3.5 使用EditForm 組件定義表單 61516.3.6 構建共享的客戶詳細信息組件 61516.3.7 構建創建、編輯和刪除客戶的組件 61716.3.8 測試客戶組件 61916.4 使用Blazor WebAssembly 構建組件 61916.4.1 為Blazor WebAssembly 配置服務器 62016.4.2 為Blazor WebAssembly 配置客戶端 62216.4.3 測試Blazor WebAssembly 組件和服務 62416.5 改進Blazor WebAssembly應用程序 62616.6 實踐和探索 62616.6.1 練習16.1:測試你掌握的知識 62616.6.2 練習16.2:通過創建乘法表組件進行練習 62716.6.3 練習16.3:通過創建國家導航項進行練習 62716.6.4 練習16.4:探索主題 62816.7 本章小結 628第17 章 結語 629