C# 12.0本質論(第8版) Essential C# 12.0
[美] 馬克·米凱利斯(Mark Michaelis)著 周靖 譯
- 出版商: 清華大學
- 出版日期: 2024-08-01
- 售價: $1,194
- 貴賓價: 9.5 折 $1,134
- 語言: 簡體中文
- ISBN: 7302668043
- ISBN-13: 9787302668046
-
相關分類:
C#
- 此書翻譯自: Essential C# 12.0 (Paperback)
立即出貨
買這商品的人也買了...
-
$414$393 -
$301深度學習:R語言實踐指南 (Introduction to Deep Learning Using R: A Step-by-Step Guide to Learning and Implementing Deep Learning Models Using R)
-
$301神經網絡:R語言實現
-
$454TypeScript 實戰指南
-
$474$450 -
$419$398 -
$474$450 -
$560$437 -
$834$792 -
$834$792 -
$1,200$948 -
$602ASP.NET Core 3 全棧 Web 開發 : 使用 .NET Core 3.1 和 Angular 9 (第三版)
-
$708$673 -
$880$695 -
$594$564 -
$1,674$1,590 -
$600$468 -
$690$538 -
$650$507 -
$403深度學習(R語言版)
-
$600$468 -
$539$512 -
$1,015貝葉斯推理與機器學習
-
$768$730 -
$1,014$963
相關主題
商品描述
"《C# 12.0本質論(第8版)》是C#領域中廣受好評的經典著作。作為C#**指南,本書深入解析了C# 12.0的類型別名、內聯數組、默認Lambda表達式參數以及對許多主要語言構造的擴展支持。全書共24章,每章開頭用“思維導圖”指明要討論的主題以及每個主題與整體的關系。在介紹相關知識點的同時結合了大量通俗易懂的實例,旨在幫助讀者全面掌握C#語言,快速成為C#高級程序員。 《C# 12.0本質論(第8版)》適用於對C#感興趣的各種層次的讀者,無論是初學者還是資源開發人員,都可以從本書中獲益。 "
目錄大綱
詳 細 目 錄
第1章 C#概述 001
1.1 Hello, World 002
1.1.1 創建、編輯、編譯和運行C#源代碼 002
1.1.2 理解項目 006
1.1.3 編譯和執行 007
1.1.4 使用本書源代碼 008
1.2 C#語法基礎 008
1.2.1 語句和語句定界符 008
1.2.2 認識類和方法 009
1.2.3 C#語言的關鍵字 010
1.2.4 標識符 011
1.2.5 類型定義 013
1.2.6 Main方法 014
1.2.7 空白 015
1.3 使用變量 016
1.3.1 數據類型 016
1.3.2 變量聲明 017
1.3.3 變量賦值 017
1.3.4 使用變量 018
1.4 控制台輸入和輸出 019
1.4.1 從控制台獲取輸入 019
1.4.2 將輸出寫入控制台 020
1.4.3 註釋 022
1.4.4 調試 024
1.5 托管執行和CLI 025
1.6 多個.NET框架 029
1.6.1 應用程序編程接口 030
1.6.2 C#和.NET版本控制 030
1.7 小結 032
第2章 數據類型 033
2.1 類型名稱形式 033
2.2 基本數值類型 035
2.2.1 整數類型 035
2.2.2 浮點類型 036
2.2.3 decimal類型 037
2.2.4 字面值 038
2.3 更多基元類型 042
2.3.1 布爾類型bool 042
2.3.2 字符類型char 043
2.3.3 字符串string 044
2.3.4 關鍵字null和void 055
2.4 數據類型轉換 056
2.4.1 顯式轉型 057
2.4.2 隱式轉型 058
2.4.3 不使用轉型操作符的類型轉換 059
2.5 小結 061
第3章 深入數據類型 062
3.1 類型的劃分 062
3.1.1 值類型 062
3.1.2 引用類型 063
3.2 聲明允許為null的類型 064
3.2.1 對null引用進行解引用 064
3.2.2 可空值類型 065
3.2.3 可空引用類型 066
3.3 隱式類型的局部變量 067
3.4 元組 068
3.5 數組 073
3.5.1 數組聲明 075
3.5.2 數組實例化和賦值 076
3.5.3 使用數組 079
3.5.4 範圍 083
3.5.5 更多數組方法 084
3.5.6 數組的實例成員 085
3.5.7 字符串作為數組 086
3.5.8 常見數組錯誤 088
3.6 小結 089
第4章 操作符和控制流 090
4.1 操作符 091
4.1.1 一元正負操作符 091
4.1.2 二元算術操作符 092
4.1.3 復合賦值操作符 097
4.1.4 遞增和遞減操作符 098
4.1.5 常量表達式和常量符號 101
4.2 控制流概述 102
4.2.1 if語句 104
4.2.2 嵌套if 104
4.3 代碼塊({}) 106
4.4 代碼塊、作用域和聲明空間 107
4.5 布爾表達式 109
4.5.1 關系操作符和相等性操作符 109
4.5.2 邏輯操作符 110
4.5.3 邏輯取反操作符! 112
4.5.4 條件操作符?: 112
4.6 用null編程 113
4.6.1 檢查是否為null 113
4.6.2 空合並操作符??和空合並賦值操作符??= 115
4.6.3 空條件操作符?. 116
4.6.4 空包容操作符! 117
4.7 按位操作符 119
4.7.1 移位操作符 120
4.7.2 按位操作符 120
4.7.3 按位復合賦值操作符 122
4.7.4 按位取反操作符 123
4.8 再論控制流語句 123
4.8.1 while循環和do/while循環 123
4.8.2 for循環 125
4.8.3 foreach循環 127
4.8.4 基本switch語句 129
4.9 跳轉語句 132
4.9.1 break語句 132
4.9.2 continue語句 133
4.9.3 goto語句 135
4.10 C#預處理器指令 136
4.10.1 排除和包含代碼 137
4.10.2 定義預處理器符號 138
4.10.3 生成錯誤#error和警告#warning 139
4.10.4 關閉警告消息#pragma 139
4.10.5 nowarn:<warn list>選項 140
4.10.6 指定行號#line 140
4.10.7 可視編輯器提示#region和#endregion 141
4.11 小結 142
第5章 參數和方法 144
5.1 調用方法 145
5.1.1 命名空間 146
5.1.2 類型名稱 148
5.1.3 作用域 148
5.1.4 方法名稱 148
5.1.5 形參和實參 148
5.1.6 方法返回值 148
5.1.7 對比語句和方法調用 149
5.2 聲明方法 149
5.2.1 參數聲明 151
5.2.2 方法返回類型聲明 151
5.2.3 表達式主體方法 153
5.2.4 本地函數 154
5.3 using指令 154
5.3.1 using指令概述 155
5.3.2 隱式using指令 156
5.3.3 全局using指令 157
5.3.4 .csproj Using元素 158
5.3.5 using static指令 159
5.3.6 使用別名 160
5.4 Main()方法的返回值和參數 161
5.5 頂級語句 163
5.6 高級方法參數 164
5.6.1 值參數 164
5.6.2 引用參數ref 166
5.6.3 輸出參數out 167
5.6.4 只讀傳引用 169
5.6.5 返回引用 169
5.6.6 參數數組(params) 171
5.7 遞歸 173
5.8 方法重載 175
5.9 可選參數 178
5.10 用異常實現基本錯誤處理 181
5.10.1 捕捉錯誤 182
5.10.2 使用throw語句報告錯誤 189
5.11 小結 194
第6章 類 195
6.1 類的聲明和實例化 198
6.2 實例字段 200
6.2.1 聲明實例字段 201
6.2.2 訪問實例字段 202
6.3 實例方法 202
6.4 使用this關鍵字 204
6.5 訪問修飾符 209
6.6 屬性 211
6.6.1 聲明屬性 212
6.6.2 自動實現的屬性 213
6.6.3 屬性和字段的設計規範 215
6.6.4 提供屬性驗證 216
6.6.5 只讀和只寫屬性 218
6.6.6 計算屬性 219
6.6.7 取值和賦值方法的訪問修飾符 221
6.6.8 屬性和方法調用不允許作為ref或out參數值 222
6.7 構造函數 223
6.7.1 聲明主構造函數 224
6.7.2 定義構造函數 225
6.7.3 默認和拷貝構造函數 225
6.7.4 對象初始化器 226
6.7.5 僅初始化的賦值函數 228
6.7.6 重載構造函數 229
6.7.7 構造函數鏈:使用this調用另一個構造函數 230
6.8 在構造函數中初始化非空引用類型的屬性 232
6.8.1 可讀/可寫非空引用類型的屬性 233
6.8.2 只讀自動實現的引用類型屬性 234
6.8.3 required修飾符 235
6.9 可空特性 238
6.10 解構函數 240
6.11 靜態成員 242
6.11.1 靜態字段 242
6.11.2 靜態方法 244
6.11.3 靜態構造函數 246
6.11.4 靜態屬性 247
6.11.5 靜態類 248
6.12 擴展方法 249
6.13 封裝數據 251
6.13.1 const 251
6.13.2 readonly 252
6.14 嵌套類 253
6.15 分部類 255
6.15.1 定義分部類 256
6.15.2 分部方法 257
6.16 小結 259
第7章 繼承 260
7.1 派生 261
7.1.1 基類型和派生類型之間的轉型 263
7.1.2 private訪問修飾符 265
7.1.3 protected訪問修飾符 266
7.1.4 擴展方法 267
7.1.5 單繼承 267
7.1.6 密封類 268
7.2 重寫基類 268
7.2.1 virtual修飾符 268
7.2.2 協變返回類型 271
7.2.3 new修飾符 271
7.2.4 sealed修飾符 274
7.2.5 base成員 275
7.2.6 調用基類構造函數 276
7.3 抽象類 278
7.4 所有類都從System.Object派生 282
7.5 類型檢查 283
7.5.1 使用is操作符進行類型檢查 284
7.5.2 用聲明進行類型檢查 285
7.5.3 使用switch語句進行類型檢查 286
7.5.4 使用switch表達式進行類型檢查 286
7.6 模式匹配 287
7.6.1 常量模式(C# 7.0) 287
7.6.2 關系模式(C# 9.0) 288
7.6.3 邏輯模式(C# 9.0) 289
7.6.4 圓括號模式(C# 9.0) 290
7.6.5 元組模式(C# 8.0) 290
7.6.6 位置模式(C# 8.0) 291
7.6.7 屬性模式(C# 8.0和C# 10.0) 292
7.6.8 when子句 294
7.6.9 使用無關類型進行模式匹配 294
7.6.10 遞歸模式匹配(C# 7.0) 295
7.6.11 列表模式 296
7.7 能利用多態性就避免模式匹配 298
7.8 小結 300
第8章 接口 301
8.1 接口概述 302
8.2 通過接口實現多態性 303
8.3 接口實現 307
8.3.1 顯式成員實現 308
8.3.2 隱式成員實現 309
8.3.3 比較顯式與隱式接口實現 310
8.4 在實現類和接口之間轉換 311
8.5 接口繼承 311
8.6 多接口繼承 313
8.7 接口上的擴展方法 314
8.8 版本控制 316
8.8.1 C# 8.0之前的接口版本控制 317
8.8.2 C# 8.0之後的接口版本控制 318
8.8.3 受保護接口成員提供了額外的封裝和多態性 325
8.9 比較擴展方法和默認接口成員 329
8.10 比較接口和抽象類 330
8.11 比較接口和特性 331
8.12 小結 331
第9章 結構和記錄 333
9.1 對比引用相等性和值相等性 336
9.2 結構 337
9.2.1 記錄結構 337
9.2.2 記錄結構的CIL代碼 339
9.3 記錄類 341
9.3.1 用屬性提供數據存儲 344
9.3.2 不可變值類型 345
9.3.3 使用with操作符克隆記錄 346
9.3.4 記錄構造函數 348
9.3.5 記錄結構初始化 348
9.3.6 記錄的解構函數 350
9.4 重寫object的成員 350
9.4.1 重寫ToString() 350
9.4.2 實現值相等性 352
9.4.3 自定義記錄的行為 356
9.5 裝箱 357
9.6 枚舉 363
9.6.1 在枚舉和字符串之間轉換 367
9.6.2 枚舉作為標志使用 368
9.7 小結 372
第10章 良好形式的類型 374
10.1 操作符重載 374
10.1.1 比較操作符 375
10.1.2 二元操作符 376
10.1.3 二元操作符復合賦值 377
10.1.4 條件邏輯操作符 378
10.1.5 一元操作符 378
10.1.6 轉換操作符 379
10.1.7 轉換操作符設計規範 380
10.2 引用其他程序集 381
10.2.1 引用庫 381
10.2.2 用Dotnet CLI引用項目或庫 382
10.2.3 在Visual Studio 2022中引用項目或庫 382
10.2.4 NuGet打包 382
10.2.5 用Dotnet CLI引用NuGet包 383
10.2.6 在Visual Studio 2022中引用NuGet包 383
10.2.7 調用NuGet包 384
10.3 類型封裝 385
10.3.1 類型聲明中的訪問修飾符public或internal 385
10.3.2 類型成員修飾符protected internal 386
10.3.3 file類型修飾符 386
10.4 定義命名空間 387
10.5 XML註釋 390
10.5.1 將XML註釋和編程構造關聯 390
10.5.2 生成XML文檔文件 392
10.6 垃圾回收和弱引用 393
10.7 資源清理 396
10.7.1 終結器 396
10.7.2 使用using語句進行確定性終結 399
10.7.3 垃圾回收、終結和IDisposable 402
10.8 推遲初始化 408
10.9 小結 409
第11章 異常處理 411
11.1 多異常類型 411
11.2 捕捉異常 414
11.3 重新拋出異常 415
11.4 常規catch塊 417
11.5 異常處理設計規範 417
11.6 自定義異常 420
11.7 重新拋出包裝的異常 423
11.8 小結 425
第12章 泛型 426
12.1 如果C#語言沒有泛型 426
12.2 泛型類型概述 431
12.2.1 使用泛型類 431
12.2.2 定義一個簡單的泛型類 433
12.2.3 泛型的優點 433
12.2.4 類型參數命名規範 434
12.2.5 泛型接口和結構 434
12.2.6 定義構造函數和終結器 436
12.2.7 指定默認值 437
12.2.8 多個類型參數 438
12.2.9 嵌套泛型類型 441
12.3 約束 441
12.3.1 接口約束 444
12.3.2 類型參數約束 445
12.3.3 unmanaged約束 447
12.3.4 notnull約束 447
12.3.5 struct/class約束 447
12.3.6 多個約束 448
12.3.7 構造函數約束 449
12.3.8 約束繼承 451
12.4 泛型方法 454
12.4.1 泛型方法類型推斷 455
12.4.2 指定約束 456
12.5 協變性和逆變性 457
12.5.1 使用out類型參數修飾符允許協變性 458
12.5.2 使用in類型參數修飾符允許逆變性 459
12.5.3 數組對不安全協變性的支持 462
12.6 泛型的內部機制 462
12.7 小結 465
第13章 委托和Lambda表達式 466
13.1 委托概述 467
13.1.1 背景 467
13.1.2 委托數據類型 469
13.2 聲明委托類型 470
13.2.1 常規用途的委托類型:System.Func和System.Action 470
13.2.2 實例化委托 472
13.3 Lambda表達式 476
13.4 表達式Lambda 479
13.5 匿名方法 481
13.6 委托沒有結構相等性 482
13.7 外部變量 484
13.8 表達式樹 489
13.8.1 Lambda表達式作為數據使用 489
13.8.2 表達式樹作為對象圖使用 490
13.8.3 對比委托和表達式樹 492
13.8.4 解析表達式樹 492
13.9 小結 494
第14章 事件 496
14.1 使用多播委托來編碼發布-訂閱模式 497
14.1.1 定義訂閱者方法 497
14.1.2 定義發布者 498
14.1.3 連接發布者和訂閱者 498
14.1.4 調用委托 499
14.1.5 檢查空值 500
14.1.6 委托操作符 501
14.1.7 順序調用 503
14.1.8 錯誤處理 504
14.1.9 方法返回值和傳引用 507
14.2 理解事件 507
14.2.1 事件的作用 507
14.2.2 聲明事件 509
14.2.3 編碼規範 510
14.2.4 實現自定義事件 514
14.3 小結 515
第15章 支持標準查詢操作符的集合接口 516
15.1 集合初始化器 517
15.2 IEnumerable使類成為集合 519
15.3.1 將foreach用於數組 519
15.3.2 將foreach用於IEnumerable<T> 519
15.3.3 foreach循環期間不要修改集合 523
15.3 標準查詢操作符 523
15.3.1 使用Where()來篩選 525
15.3.2 使用Select()來投射 526
15.3.3 使用Count()對元素進行計數 528
15.3.4 推遲執行 529
15.3.5 使用OrderBy()和ThenBy()來排序 532
15.3.6 使用Join()執行內連接 535
15.3.7 使用GroupBy分組結果 538
15.3.8 使用GroupJoin()實現一對多關系 539
15.3.9 調用SelectMany() 542
15.3.10 更多標準查詢操作符 543
15.4 匿名類型與LINQ 546
15.3.1 匿名類型 546
15.3.2 用LINQ投射成匿名類型 548
15.3.3 匿名類型和隱式局部變量的更多註意事項 549
15.5 小結 552
第16章 使用查詢表達式的LINQ 553
16.1 查詢表達式概述 553
16.1.1 投射 555
16.1.2 篩選 561
16.1.3 排序 562
16.1.4 let子句 562
16.1.5 分組 563
16.1.6 使用into實現查詢延續 566
16.1.7 用多個from子句“扁平化”序列的序列 567
16.2 查詢表達式只是方法調用 568
16.3 小結 569
第17章 構建自定義集合 570
17.1 更多集合接口 571
17.1.1 IList<T>和IDictionary<TKey, TValue> 572
17.1.2 ICollection<T> 572
17.2 主要集合類 572
17.2.1 列表集合:List<T> 573
17.2.1 全序 576
17.2.3 查找List<T> 576
17.2.4 字典集合Dictionary<TKey, TValue> 578
17.2.5 已排序集合:SortedDictionary<TKey, TValue>和SortedList<T> 583
17.2.6 棧集合:Stack<T> 584
17.2.7 隊列集合:Queue<T> 585
17.2.8 鏈表:LinkedList<T> 585
17.2.9 Span<T>和ReadOnlySpan<T> 586
17.3 提供索引器 587
17.4 返回null或者空集合 590
17.5 迭代器 591
17.5.1 定義迭代器 591
17.5.2 迭代器語法 592
17.5.3 從迭代器生成值 592
17.5.4 迭代器和狀態 594
17.5.5 更多的迭代器例子 595
17.5.6 將yield return語句放到循環中 596
17.5.7 取消更多的迭代:yield break 599
17.5.8 在類中創建多個迭代器 601
17.5.9 yield語句的要求 601
17.6 小結 602
第18章 反射、特性和動態編程 603
18.1 反射 603
18.1.1 使用System.Type訪問元數據 604
18.1.2 成員調用 606
18.1.3 泛型類型上的反射 610
18.2 nameof操作符 612
18.3 特性 613
18.3.1 自定義特性 617
18.3.2 查找特性 617
18.3.3 使用構造函數初始化特性 618
18.3.4 System.AttributeUsageAttribute 622
18.3.5 具名參數 623
18.3.6 預定義特性 625
18.3.7 System.ConditionalAttribute 625
18.3.8 System.ObsoleteAttribute 627
18.3.9 泛型特性 628
18.3.10 Caller*特性 628
18.4 使用動態對象進行編程 631
18.4.1 使用dynamic調用反射 632
18.4.2 dynamic的原則和行為 633
18.4.3 為什麽需要動態綁定 635
18.4.4 比較靜態編譯和動態編程 635
18.4.5 實現自定義動態對象 636
18.5 小結 639
第19章 多線程處理 640
19.1 多線程處理基礎 642
19.2 異步任務 645
19.2.1 為什麽要用TPL 646
19.2.2 理解異步任務 647
19.2.3 任務延續 650
19.2.4 用AggregateException處理任務的未處理異常 655
19.3 取消任務 660
19.3.1 Task.Run()是Task.Factory.StartNew()的簡化形式 663
19.3.2 長時間運行的任務 664
19.3.3 對任務進行資源清理 665
19.4 使用System.Threading 665
19.5 小結 666
第20章 基於任務的異步模式編程 667
20.1 以同步方式調用高延遲操作 668
20.2 使用TPL異步調用高延遲操作 670
20.3 使用async/await實現基於任務的異步模式 673
20.4 異步返回ValueTask<T> 678
20.5 異步流 680
20.6 IAsyncDisposable接口以及await using聲明和語句 684
20.7 通過IAsyncEnumerable來使用LINQ 684
20.8 從異步方法返回void 686
20.9 異步Lambda和本地函數 689
20.10 任務調度器和同步上下文 694
20.11 async/await和Windows UI 695
20.12 小結 698
第21章 並行迭代 699
21.1 並行迭代 699
20.2 並行執行LINQ查詢 706
21.3 小結 711
第22章 線程同步 712
22.1 線程同步的意義 713
22.1.1 用Monitor同步 716
22.1.2 使用lock關鍵字 718
22.1.3 lock對象的選擇 720
22.1.4 為什麽要避免鎖定this、typeof(type)和string 721
22.1.5 避免用MethodImplAttribute同步 721
22.1.6 將字段聲明為volatile 722
22.1.7 使用System.Threading.Interlocked類 722
22.1.8 多個線程時的事件通知 724
22.1.9 同步設計最佳實踐 725
22.1.10 更多同步類型 726
22.1.11 線程本地存儲 733
22.2 計時器 736
22.3 小結 737
第23章 平臺互操作性和不安全代碼 739
23.1 平臺調用 740
23.1.1 聲明外部函數 740
23.1.2 參數的數據類型 740
23.1.3 本機大小的整數 742
23.1.4 使用ref而不是指針 742
23.1.5 為順序佈局使用StructLayoutAttribute 743
23.1.6 內聯數組 743
23.1.7 跳過局部變量的初始化 744
23.1.8 錯誤處理 744
23.1.9 使用SafeHandle 746
23.1.10 調用外部函數 747
23.1.11 用包裝器簡化API調用 749
23.1.12 函數指針映射到委托 750
23.1.13 設計規範 750
23.2 指針和地址 751
23.2.1 不安全代碼 751
23.2.2 指針聲明 752
23.2.3 指針賦值 754
23.2.4 指針解引用 756
23.2.5 訪問被引用物類型的成員 758
23.3 通過委托執行不安全代碼 758
23.4 小結 760
第24章 公共語言基礎結構(CLI) 761
24.1 CLI的定義 762
24.2 CLI的實現 762
24.2.1 Microsoft .NET Framework 764
24.2.2 .NET Core 764
24.2.3 Xamarin 765
24.3 .NET Standard 765
24.4 BCL 765
24.5 C#編譯成機器碼 765
24.6 運行時 767
24.6.1 垃圾回收 767
24.6.2 平臺可移植性 769
24.6.3 性能 769
24.7 程序集、清單和模塊 770
24.8 公共中間語言 771
24.9 公共類型系統 772
24.10 公共語言規範 772
24.11 元數據 773
24.12 NET Native和AOT編譯 773
24.13 小結 774