C#和.NET高級編程(第11版)
[美] 安德魯·特羅爾森(Andrew Troelsen), 菲爾·賈皮克斯(Phil Japikse)著 葉偉民 趙利通 李周芳 譯 葉偉民 趙利通 李周芳
- 出版商: 清華大學
- 出版日期: 2026-03-01
- 售價: $2,316
- 語言: 簡體中文
- ISBN: 7302710465
- ISBN-13: 9787302710462
-
相關分類:
C#
- 此書翻譯自: Pro C# 10 with .Net 6: Foundational Principles and Practices in Programming
下單後立即進貨 (約4週~6週)
相關主題
商品描述
"歡迎閱讀C#編程和.NET領域最全面的指南! 《C#和.NET高級編程(第11版)》沒有停留在照步驟實現功能的層面,而是深入講解那些讓普通開發者進階的核心知識點。本書第11版新增了關於Entity Framework、Razor Pages、Web API等重磅內容,全面覆蓋了C# 10和.NET 6的更新特性,旨在助力開發人員在C#技術方面拓展批判性思維。本書涵蓋了ASP.NET Core、Entity Framework Core等內容,詳解了新統一的.NET平臺的**更新,包括性能改進、基於.NET 6的Windows桌面應用開發、XAML工具的更新,以及數據文件和數據處理。書中所有代碼示例均采用C# 10更新特性重寫,兼顧了實用性與前沿性。 翻閱本書,你將明白它成為全球C#開發人員**參考書的原因:它能幫助你夯實面向對象開發
作者簡介
Andrew Troelsen擁有20餘年軟件行業經驗,歷任開發者、教育工作者、作者及公共演講者,現任團隊負責人與首席工程師。他深耕微軟技術棧,著有多本相關書籍,持有聖托馬斯大學軟件工程碩士學位(MSSE)及華盛頓大學計算語言學碩士學位(CLMS)。Phil Japikse是一位國際演講者、微軟MVP、ASPInsider和專業Scrum培訓師,也是開發者社區的熱情成員。他擔任辛辛那提.NET用戶組及軟件架構師圓桌會議的首席總監,並創辦了CincyDeliver大會。目前,他擔任Pintas & Mullins公司的CTO兼首席架構師。
目錄大綱
第I部分 C#和.NET 6簡介
第1章 C#和.NET 6基礎 3
1.1 .NET平臺的一些重要優勢 3
1.2 理解.NET支持周期 4
1.3 .NET平臺的組成模塊概述 4
1.3.1 基類庫的作用 5
1.3.2 C#帶來了什麼 5
1.3.3 托管與非托管代碼 6
1.4 使用.NET支持的其他編程語言 7
1.5 .NET程序集概述 7
1.5.1 CIL的作用 7
1.5.2 CIL的優勢 10
1.5.3 將CIL編譯為特定於平臺的指令 10
1.5.4 .NET類型元數據的作用 10
1.5.5 程序集清單的作用 11
1.6 理解公共類型系統 12
1.6.1 CTS類類型 12
1.6.2 CTS接口類型 13
1.6.3 CTS結構類型 13
1.6.4 CTS枚舉類型 13
1.6.5 CTS委托類型 14
1.6.6 CTS類型成員 14
1.6.7 CTS固有數據類型 14
1.7 理解公共語言規範 15
1.8 理解.NET運行時 17
1.9 區分程序集、名稱空間和類型 17
1.9.1 在代碼中訪問名稱空間 19
1.9.2 全局using語句(10.0新增) 19
1.9.3 文件作用域的名稱空間(10.0新增) 21
1.9.4 引用外部程序集 21
1.10 使用ildasm.exe探索程序集 21
1.11 小結 22
第2章 構建C#應用程序 23
2.1 安裝.NET 6 23
2.1.1 理解.NET版本號 23
2.1.2 確認.NET 6安裝成功 23
2.2 使用Visual Studio構建.NET Core應用程序 25
2.2.1 安裝Visual Studio 2022 (Windows) 25
2.2.2 試用Visual Studio 2022 26
2.3 使用Visual Studio Code構建.NET Core應用程序 35
2.4 找到.NET Core和C#的文檔 38
2.5 小結 38
第II部分 核心C#編程
第3章 C#的核心編程結構(I) 41
3.1 分解一個簡單的C#程序(C# 10更新) 41
3.1.1 使用Main()方法的不同形式(7.1更新) 43
3.1.2 使用頂級語句(9.0新增) 44
3.1.3 指定應用程序錯誤代碼(9.0更新) 45
3.1.4 處理命令行實參(9.0更新) 47
3.1.5 在Visual Studio 2022中指定命令行實參 48
3.2 System.Environment類中的其他成員(10.0更新) 49
3.3 使用System.Console類 50
3.3.1 使用Console類執行基本的輸入和輸出(I/O)操作 51
3.3.2 設置控制臺輸出的格式 52
3.3.3 設置數值數據的格式 53
3.3.4 在控制臺應用程序之外設置數值數據的格式 54
3.4 使用系統數據類型和對應的C#關鍵字 54
3.4.1 理解變量聲明和初始化 55
3.4.2 使用固有數據類型和new操作符(9.0更新) 56
3.4.3 理解數據類型的類層次 57
3.4.4 理解數值數據類型的成員 59
3.4.5 理解System.Boolean的成員 59
3.4.6 理解System.Char的成員 59
3.4.7 解析字符串數據的值 60
3.4.8 使用TryParse從字符串數據解析值 60
3.4.9 使用System.DateTime和System.Timespan(10.0更新) 61
3.4.10 使用System.Numerics名稱空間 62
3.4.11 使用數字分隔符(7.0新增) 63
3.4.12 使用二進制字面值(7.0/7.2新增) 63
3.5 使用字符串數據 64
3.5.1 執行基本字符串操作 64
3.5.2 執行字符串連接 65
3.5.3 使用轉義字符 65
3.5.4 執行字符串插值 66
3.5.5 定義原樣字符串(8.0更新) 69
3.5.6 字符串的相等性 69
3.5.7 String是不可變的 71
3.5.8 使用System.Text.StringBuilder類型 73
3.6 縮窄和加寬數據類型轉換 73
3.6.1 使用checked關鍵字 75
3.6.2 設置項目級別的溢出檢查(項目文件) 77
3.6.3 設置項目級別的溢出檢查(Visual Studio) 77
3.6.4 使用unchecked關鍵字 78
3.7 理解隱式類型的局部變量 78
3.7.1 隱式聲明數字 80
3.7.2 理解隱式類型的變量的限制 80
3.7.3 隱式類型的數據是強類型的數據 81
3.7.4 理解隱式類型的局部變量的有用性 82
3.8 使用C#的疊代結構 82
3.8.1 使用for循環 83
3.8.2 使用foreach循環 83
3.8.3 在foreach結構中使用隱式類型 84
3.8.4 使用while和do/while循環結構 84
3.9 作用域簡介 85
3.10 使用決策結構和關系/相等性操作符 85
3.10.1 使用if/else語句 86
3.10.2 使用相等性和關系操作符 86
3.10.3 在if/else中使用模式匹配(7.0新增) 87
3.10.4 模式匹配的改進(9.0新增) 87
3.10.5 使用條件操作符(7.2、9.0更新) 88
3.10.6 使用邏輯操作符 89
3.10.7 使用switch語句 90
3.10.8 執行switch語句的模式匹配(7.0新增,9.0更新) 92
3.10.9 使用switch表達式(8.0新增) 94
3.11 小結 96
第4章 C#的核心編程結構(II) 97
4.1 理解C#的數組 97
4.1.1 C#的數組初始化語法 98
4.1.2 理解隱式類型的局部數組 99
4.1.3 定義一個Object數組 99
4.1.4 使用多維數組 100
4.1.5 將數組用作實參或返回值 101
4.1.6 使用System.Array基類 102
4.1.7 使用索引和範圍(8.0新增,10.0更新) 103
4.2 理解方法 105
4.2.1 理解表達式體成員 105
4.2.2 理解局部函數(7.0新增,9.0更新) 106
4.2.3 理解靜態局部函數(8.0新增) 107
4.3 理解方法參數 107
4.3.1 理解方法參數的修飾符 108
4.3.2 理解默認的參數傳遞行為 108
4.3.3 使用out修飾符(7.0更新) 109
4.3.4 使用ref修飾符 111
4.3.5 使用in修飾符(7.2新增) 111
4.3.6 使用params修飾符 112
4.3.7 定義可選參數 113
4.3.8 使用命名實參(7.2更新) 114
4.3.9 理解方法重載 115
4.3.10 檢查參數是否為null(10.0更新) 118
4.4 理解枚舉類型 118
4.4.1 控制枚舉的底層存儲 119
4.4.2 聲明枚舉變量 120
4.4.3 使用System.Enum類型 121
4.4.4 動態發現枚舉的名稱-值對 121
4.4.5 使用枚舉、標誌和位操作 122
4.5 理解結構 124
4.5.1 創建結構變量 125
4.5.2 結構的構造函數(10.0更新) 126
4.5.3 使用字段初始值(10.0新增) 127
4.5.4 使用只讀結構(7.2新增) 127
4.5.5 使用只讀成員(8.0新增) 128
4.5.6 使用ref結構(7.2新增) 129
4.5.7 使用可釋放的ref結構(8.0新增) 129
4.6 理解值類型和引用類型 130
4.6.1 使用值類型、引用類型和賦值操作符 130
4.6.2 使用包含引用類型的值類型 132
4.6.3 按值傳遞引用類型 133
4.6.4 按引用傳遞引用類型 135
4.6.5 關於值類型和引用類型的一些細節 135
4.7 理解C#的可空類型 136
4.7.1 使用可空值類型 137
4.7.2 使用可空引用類型(8.0新增,10.0更新) 138
4.7.3 處理可空類型 141
4.8 理解元組(7.0新增/更新) 143
4.8.1 開始使用元組 143
4.8.2 使用推斷的變量名稱(7.1更新) 144
4.8.3 理解元組的相等性/不相等性(7.3新增) 144
4.8.4 理解作為方法返回值的元組 145
4.8.5 理解元組中使用的丟棄操作符 145
4.8.6 理解switch表達式的元組模式匹配(8.0新增) 145
4.8.7 解構元組(10.0更新) 146
4.9 小結 148
第III部分 使用C#進行面向對象編程
第5章 理解封裝 151
5.1 C#的類類型簡介 151
5.2 理解構造函數 153
5.2.1 理解默認構造函數的作用 154
5.2.2 定義自定義構造函數 154
5.2.3 繼續介紹默認構造函數 156
5.3 理解this關鍵字的作用 157
5.3.1 使用this鏈接構造函數調用 158
5.3.2 觀察構造函數的執行流 160
5.3.3 可選實參示例 162
5.4 理解static關鍵字 162
5.4.1 定義靜態字段數據 163
5.4.2 定義靜態方法 165
5.4.3 定義靜態構造函數 166
5.4.4 定義靜態類 168
5.4.5 通過C#的using關鍵字導入靜態成員 168
5.5 定義面向對象編程的支柱 169
5.5.1 理解封裝的作用 169
5.5.2 理解繼承的作用 170
5.5.3 理解多態性的作用 171
5.6 理解C#的訪問修飾符(7.2更新) 172
5.6.1 使用默認訪問修飾符 173
5.6.2 使用訪問修飾符和嵌套類型 173
5.7 理解第一個支柱:C#的封裝服務 174
5.7.1 使用傳統的訪問器和修改器實現封裝 175
5.7.2 使用屬性進行封裝 177
5.7.3 在類定義內使用屬性 179
5.7.4 只讀屬性 181
5.7.5 只寫屬性 181
5.7.6 在屬性中混合使用私有的和公有的get/set方法 182
5.7.7 再次討論static關鍵字:定義靜態屬性 182
5.7.8 使用屬性模式進行模式匹配(8.0新增) 182
5.7.9 展開的屬性模式(10.0新增) 184
5.8 理解自動屬性 185
5.8.1 使用自動屬性 186
5.8.2 自動屬性和默認值 187
5.8.3 初始化自動屬性 188
5.9 理解對象初始化 189
5.9.1 查看對象初始化語法 189
5.9.2 使用僅初始化設置器(9.0新增) 190
5.9.3 使用初始化語法調用自定義構造函數 191
5.9.4 使用初始化語法初始化數據 192
5.10 使用常量字段數據和只讀字段數據 193
5.10.1 理解常量字段數據 193
5.10.2 理解只讀字段 194
5.10.3 理解靜態只讀字段 195
5.11 理解分部類 195
5.12 記錄(9.0新增) 197
5.12.1 使用標準屬性語法的不可變記錄類型 198
5.12.2 使用位置語法的不可變記錄類型 199
5.12.3 可變記錄類型 200
5.12.4 記錄類型的值相等性 200
5.12.5 使用with表達式復制記錄類型 201
5.13 記錄結構(10.0新增) 202
5.13.1 可變的記錄結構 202
5.13.2 不可變的記錄結構 203
5.13.3 解構記錄結構 203
5.14 小結 203
第6章 理解繼承和多態性 205
6.1 理解繼承的基本機制 205
6.1.1 指定現有類的父類 206
6.1.2 多基類 207
6.1.3 使用sealed關鍵字 208
6.2 回顧Visual Studio的類圖 208
6.3 理解OOP的第二個支柱:繼承的細節 210
6.3.1 使用base關鍵字調用基類的構造函數 211
6.3.2 保守家族秘密:protected關鍵字 213
6.3.3 添加密封類 213
6.3.4 理解記錄類型的繼承(9.0新增) 214
6.4 包含/委托編程 217
6.5 理解OOP的第三個支柱:C#對多態性的支持 220
6.5.1 使用virtual和override關鍵字 220
6.5.2 在Visual Studio/ Visual Studio Code中重寫虛擬方法 223
6.5.3 密封虛擬成員(10.0更新) 223
6.5.4 理解抽象類 224
6.5.5 理解多態接口 225
6.5.6 理解成員隱藏 229
6.6 理解基類/派生類的強制轉換規則 230
6.6.1 使用C#的as關鍵字 232
6.6.2 使用C#的is關鍵字(7.0、9.0更新) 233
6.6.3 繼續討論模式匹配(7.0新增) 235
6.7 理解超級父類:System.Object 236
6.7.1 重寫System.Object.ToString() 238
6.7.2 重寫System.Object.Equals() 238
6.7.3 重寫System.Object.GetHashCode() 239
6.7.4 測試修改後的Person類 240
6.7.5 使用System.Object的靜態成員 241
6.8 小結 242
第7章 理解結構化異常處理 243
7.1 錯誤、bug和異常 243
7.2 .NET異常處理的作用 244
7.2.1 .NET異常處理的構造塊 244
7.2.2 System.Exception基類 245
7.3 最簡單的示例 246
7.3.1 拋出通用異常 248
7.3.2 捕獲異常 249
7.3.3 將throw作為表達式(7.0新增) 250
7.4 配置異常的狀態 250
7.4.1 TargetSite屬性 250
7.4.2 StackTrace屬性 251
7.4.3 HelpLink屬性 251
7.4.4 Data屬性 252
7.5 系統級異常(System.SystemException) 254
7.6 應用程序級異常(System.ApplicationException) 254
7.6.1 構建自定義異常,第一次嘗試 255
7.6.2 構建自定義異常,第二次嘗試 256
7.6.3 構建自定義異常,第三次嘗試 257
7.7 處理多個異常 258
7.7.1 一般性的catch語句 260
7.7.2 重新拋出異常 260
7.7.3 內部異常 261
7.7.4 finally塊 261
7.7.5 異常過濾器 262
7.8 使用Visual Studio調試未處理的異常 263
7.9 小結 264
第8章 使用接口 265
8.1 理解接口類型 265
8.2 定義自定義接口 268
8.3 實現接口 269
8.4 在對象級別調用接口成員 271
8.4.1 獲取接口引用:as關鍵字 272
8.4.2 獲取對象引用:is關鍵字(7.0更新) 272
8.5 默認實現(8.0新增) 273
8.6 靜態構造函數和成員(8.0新增) 274
8.7 將接口用作參數 274
8.8 將接口用作返回值 276
8.9 接口類型的數組 276
8.10 使用Visual Studio或Visual Studio Code實現接口 278
8.11 顯式接口實現 279
8.12 設計接口層次 281
8.12.1 具有默認實現的接口層次(8.0新增) 282
8.12.2 接口類型的多繼承 283
8.13 IEnumerable和IEnumerator接口 285
8.13.1 使用yield關鍵字構建疊代器方法 287
8.13.2 構建命名疊代器 290
8.14 ICloneable接口 291
8.15 IComparable接口 295
8.15.1 使用IComparer指定多個排序順序 298
8.15.2 自定義屬性和自定義排序類型 299
8.16 小結 299
第9章 理解對象的生存期 301
9.1 類、對象和引用 301
9.2 對象生存期的基礎知識 302
9.2.1 new的CIL 303
9.2.2 將對象引用設置為null 304
9.3 判斷對象是否仍然存活 304
9.4 理解對象的“代” 305
9.5 垃圾回收類型 307
9.6 System.GC類型 307
9.7 構建可終結對象 311
9.7.1 重寫System.Object.Finalize() 312
9.7.2 詳細說明終結過程 313
9.8 構建可釋放對象 314
9.8.1 重用C#的using關鍵字 315
9.8.2 using聲明(8.0新增) 317
9.9 構建可終結、可釋放的類型 317
9.10 理解對象的延遲實例化 320
9.11 小結 323
第IV部分 C#高級編程
第10章 集合和泛型 327
10.1 創建集合類的動機 327
10.1.1 System.Collections名稱空間 328
10.1.2 System.Collections.Specialized名稱空間簡介 330
10.2 非泛型集合的問題 330
10.2.1 性能問題 331
10.2.2 類型安全性問題 334
10.2.3 初識泛型集合 337
10.3 泛型類型參數的作用 337
10.3.1 為泛型類/結構指定類型參數 338
10.3.2 為泛型成員指定類型參數 339
10.3.3 為泛型接口指定類型參數 340
10.4 System.Collections.Generic名稱空間 341
10.4.1 理解集合初始化語法 342
10.4.2 使用List<T>類 343
10.4.3 使用Stack<T>類 345
10.4.4 使用Queue<T>類 346
10.4.5 使用PriorityQueue<TElement, TPriority>類(10新增) 347
10.4.6 使用SortedSet<T>類 347
10.4.7 使用Dictionary<TKey, TValue>類 349
10.5 System.Collections.ObjectModel名稱空間 350
10.6 創建自定義泛型方法 352
10.7 創建自定義泛型結構和類 354
10.7.1 泛型的默認值表達式 355
10.7.2 default字面值表達式(7.1新增) 356
10.7.3 泛型的模式匹配(7.1新增) 357
10.8 約束類型參數 357
10.8.1 使用where關鍵字的示例 358
10.8.2 沒有操作符約束 359
10.9 小結 360
第11章 C#的高級語言特性 361
11.1 理解索引器方法 361
10.1.1 使用字符串值索引數據 363
10.1.2 重載索引器方法 364
10.1.3 多維索引器 364
10.1.4 接口類型中的索引器定義 365
11.2 理解操作符重載 366
11.2.1 重載二元操作符 366
11.2.2 +=和-=操作符 368
11.2.3 重載一元操作符 369
11.2.4 重載相等性操作符 369
11.2.5 重載比較操作符 370
11.2.6 關於操作符重載的最後一點說明 371
11.3 理解自定義類型轉換 371
11.3.1 回顧:數值轉換 371
11.3.2 回顧:相關類類型之間的轉換 371
11.3.3 創建自定義轉換例程 372
11.3.4 Square類型的其他顯式轉換 375
11.3.5 定義隱式轉換例程 375
11.4 理解擴展方法 376
11.4.1 定義擴展方法 377
11.4.2 調用擴展方法 378
11.4.3 導入擴展方法 378
11.4.4 擴展實現了特定接口的類型 379
11.4.5 擴展方法GetEnumerator支持foreach循環(9.0新增) 380
11.5 理解匿名類型 381
11.5.1 定義匿名類型 382
11.5.2 匿名類型的內部表示 382
11.5.3 ToString()和GetHashCode()的實現 384
11.5.4 匿名類型的相等性語義 384
11.5.5 在匿名類型中包含匿名類型 386
11.6 使用指針類型 386
11.6.1 unsafe關鍵字 388
11.6.2 使用*和&操作符 389
11.6.3 非安全的(和安全的)交換函數 390
11.6.4 通過指針訪問字段(->操作符) 391
11.6.5 stackalloc關鍵字 392
11.6.6 通過fixed關鍵字釘住類型 392
11.6.7 sizeof關鍵字 393
11.7 小結 393
第12章 委托、事件和lambda表達式







