C#和.NET高級編程(第11版)

[美] 安德魯·特羅爾森(Andrew Troelsen), 菲爾·賈皮克斯(Phil Japikse)著 葉偉民 趙利通 李周芳 譯 葉偉民 趙利通 李周芳

  • C#和.NET高級編程(第11版)-preview-1
  • C#和.NET高級編程(第11版)-preview-2
  • C#和.NET高級編程(第11版)-preview-3
  • C#和.NET高級編程(第11版)-preview-4
  • C#和.NET高級編程(第11版)-preview-5
  • C#和.NET高級編程(第11版)-preview-6
  • C#和.NET高級編程(第11版)-preview-7
C#和.NET高級編程(第11版)-preview-1

相關主題

商品描述

"歡迎閱讀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表達式