注冊(cè) | 登錄讀書(shū)好,好讀書(shū),讀好書(shū)!
讀書(shū)網(wǎng)-DuShu.com
當(dāng)前位置: 首頁(yè)出版圖書(shū)科學(xué)技術(shù)計(jì)算機(jī)/網(wǎng)絡(luò)操作系統(tǒng)C# 12和.NET 8入門與跨平臺(tái)開(kāi)發(fā)(第8版)

C# 12和.NET 8入門與跨平臺(tái)開(kāi)發(fā)(第8版)

C# 12和.NET 8入門與跨平臺(tái)開(kāi)發(fā)(第8版)

定 價(jià):¥198.00

作 者: [美] 馬克·J.普萊斯(Mark J. Price)著,葉偉民 譯
出版社: 清華大學(xué)出版社
叢編項(xiàng):
標(biāo) 簽: 暫缺

購(gòu)買這本書(shū)可以去


ISBN: 9787302682967 出版時(shí)間: 2025-04-01 包裝: 平裝-膠訂
開(kāi)本: 16開(kāi) 頁(yè)數(shù): 字?jǐn)?shù):  

內(nèi)容簡(jiǎn)介

  C#的應(yīng)用領(lǐng)域極廣,是編程語(yǔ)言中的翹楚。作為暢銷的C#系列圖書(shū)的最新版本,本書(shū)涵蓋C#12和.NET 8的所有最新功能,將幫助你夯實(shí)基礎(chǔ),讓你自信地使用最新C#和.NET構(gòu)建項(xiàng)目?!禖# 12和.NET 8入門與跨平臺(tái)開(kāi)發(fā)(第8版)》討論面向?qū)ο缶幊?、編寫函?shù)、測(cè)試函數(shù)調(diào)試函數(shù)及實(shí)現(xiàn)接口等主題;介紹.NETAPI,這些API可執(zhí)行多種任務(wù),如管理和查詢數(shù)據(jù),使用文件系統(tǒng)、序列化。你可用ASP.NET Core來(lái)構(gòu)建和部署本書(shū)列舉的跨平臺(tái)示例應(yīng)用程序,如網(wǎng)站和服務(wù)《C# 12和.NET 8入門與跨平臺(tái)開(kāi)發(fā)(第8版)》示例中融入了.NET 8的增強(qiáng)功能,使用類型別名和主構(gòu)造函數(shù)來(lái)實(shí)現(xiàn)簡(jiǎn)潔的、表達(dá)力強(qiáng)的代碼。你將使用新增的、內(nèi)置的保護(hù)子句來(lái)可靠地處理錯(cuò)誤,并探索ASP.NET Core 8中簡(jiǎn)化的緩存實(shí)現(xiàn)。你還將看到,在發(fā)布過(guò)程中使用原生的AOT編譯能夠縮短啟動(dòng)時(shí)間和減少內(nèi)存占用。你還將使用Visua Studio 2022中新增的HTTP編輯器來(lái)完善測(cè)試和調(diào)試過(guò)程。本書(shū)甚至介紹了Blazor全棧,它提供的統(tǒng)一托管模型能夠?qū)崿F(xiàn)無(wú)可比擬的Web開(kāi)發(fā)靈活性。主要內(nèi)容:•C# 12的新功能,包括類型別名和主構(gòu)造函數(shù)•ASP.NET Core 8最小APIWeb服務(wù)的原生AOT發(fā)布功能•通過(guò)Blazor全棧、Razor Pages等ASP.NET Core技術(shù)構(gòu)建沉浸式Web應(yīng)用•使用Entity Framework Core模型來(lái)無(wú)縫地集成和更新數(shù)據(jù)庫(kù)•使用LINO來(lái)查詢和操縱數(shù)據(jù)•使用Web API和最小API構(gòu)建和使用功能強(qiáng)大的服務(wù)

作者簡(jiǎn)介

  Mark J. Price是一位擁有20多年C#編程經(jīng)驗(yàn)的微軟認(rèn)證技術(shù)專家,專注于C#編程及構(gòu)建Azure云解決方案。自1993年以來(lái),Mark已通過(guò)了80多項(xiàng)微軟編程認(rèn)證。從2001年到2003年,Mark在微軟美國(guó)總部工作,編寫教學(xué)課件。當(dāng)C#還處于alpha版本時(shí),Mark的團(tuán)隊(duì)就編寫了第一個(gè)C#培訓(xùn)教程。Mark擅長(zhǎng)傳道、授業(yè)、解惑,在微軟任職期間,Mark負(fù)責(zé)培訓(xùn)MCT(微軟認(rèn)證講師),幫助他們以最快的速度掌握C#和.NET新知識(shí)。Mark職業(yè)生涯中的大部分時(shí)間都在培訓(xùn)各類學(xué)生,包括16歲的新人乃至70歲的退休人員。

圖書(shū)目錄

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

本目錄推薦

掃描二維碼
Copyright ? 讀書(shū)網(wǎng) www.stefanvlieger.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號(hào) 鄂公網(wǎng)安備 42010302001612號(hào)