提升C#和.NET技能的必備參考資源 Visual Studio 2015、ASP.NET Core 1.0和Universal Windows Platform的推出,為開發(fā)人員提供了使用C#創(chuàng)建應(yīng)用程序的新方式。作為經(jīng)典C#暢銷書 ,本書涵蓋了充分利用升級功能,積極簡化工作流程所需的全部信息。本書循序漸進地講解了Visual Studio 2015、.NET Core 1.0、ASP.NET MVC、Universal Windows Platform、WPF的變化。每一章都提供了清晰的解釋、下載的代碼,并從專家的角度提供了有價值的視野。有本書在手,讀者可以快速獲得的特性和功能。主要內(nèi)容 通過.NET Core 和C# 6的增強功能,重新塑造了.NET平臺,包括新增的.NET編譯器平臺 展示了如何使用新的Visual Studio工具和用于ASP.NET Core 1.0、ASP.NET MVC、Web API、WPF和Universal Windows Platform的模板 介紹允許應(yīng)用程序在Windows、Linux和OS X上運行的.NET Core框架,還囊括了任務(wù)和并行編程,訪問文件系統(tǒng),以及網(wǎng)絡(luò)堆棧 演示了如何使用ASP.NET MVC 6和Web API創(chuàng)建Web應(yīng)用程序,以及利用SignalR和WebHooks的推送通知 介紹專業(yè)開發(fā)功能,例如單元測試,通過MVVM模式在WPF和Universal Windows Platform之間共享代碼
對于開發(fā)人員,把C#語言和.NET描述為重要的新技術(shù)一點都不夸張。.NET提供了一種環(huán)境。在這種環(huán)境中,可以開發(fā)在Windows上運行的幾乎所有應(yīng)用程序。在Windows上運行的是.NET Framework以前的版本,新版本.NET Core 1.0不僅在Windows上運行,還在Linux和Mac系統(tǒng)上運行。C#是專門用于.NET的編程語言。
Christian Nagel是微軟開發(fā)技術(shù)代言人(Microsoft Regional Director)、Visual Studio和開發(fā)技術(shù)方向的微軟MVP、軟件架構(gòu)師、博學(xué)開發(fā)人員(2000年就開始用.NET技術(shù)建立解決方案) 。他編著過多本.NET圖書,經(jīng)常在TechEd和TechDays等國際會議上發(fā)言,并支持.NET用戶組。Christian是微軟認(rèn)證培訓(xùn)師(MCT),也是Universal Windows apps和ASP.NET方向的微軟認(rèn)證開發(fā)專家(MCPD)。
第Ⅰ部分 C# 語 言
第1章 .NET應(yīng)用程序體系結(jié)構(gòu) 2
1.1 選擇技術(shù) 2
1.2 回顧.NET歷史 3
1.2.1C# 1.0 ——一種新語言 3
1.2.2帶有泛型的C# 2和.NET 2 5
1.2.3.NET 3.0—— Windows
Presentation Foundation 5
1.2.4C# 3和.NET 3.5—— LINQ 5
1.2.5C# 4和.NET 4.0—— dynamic
和TPL 6
1.2.6C# 5和異步編程 6
1.2.7C# 6和.NET Core 7
1.2.8選擇技術(shù),繼續(xù)前進 8
1.3.NET 2015 8
1.3.1.NET Framework 4.6 9
1.3.2.NET Core 1.0 10
1.3.3程序集 11
1.3.4NuGet 包 12
1.3.5公共語言運行庫 13
1.3.6.NET Native 14
1.3.7Windows 運行庫 14
1.4Hello, World 15
1.5 用.NET 4.6編譯 16
1.6 用.NET CoreCLI編譯 17
1.6.1設(shè)置環(huán)境 18
1.6.2構(gòu)建應(yīng)用程序 18
1.6.3打包和應(yīng)用程序 21
1.7 應(yīng)用程序類型和技術(shù) 22
1.7.1數(shù)據(jù)訪問 22
1.7.2Windows桌面應(yīng)用程序 23
1.7.3UWP 24
1.7.4SOAP服務(wù)和WCF 24
1.7.5Web服務(wù)和ASP.NET Web
API 24
1.7.6WebHooks和SignalR 25
1.7.7Windows服務(wù) 25
1.7.8Web應(yīng)用程序 25
1.7.9Microsoft Azure 26
1.8 開發(fā)工具 27
1.8.1Visual Studio Community 27
1.8.2Visual Studio Professional with
MSDN 27
1.8.3Visual Studio Enterprise with
MSDN 27
1.8.4Visual Studio Code 28
1.9 小結(jié) 28
第2章 核心C# 29
2.1C#基礎(chǔ) 30
2.2 用VisualStudio創(chuàng)建Hello,
World! 30
2.2.1創(chuàng)建解決方案 30
2.2.2創(chuàng)建新項目 31
2.2.3編譯和運行程序 33
2.2.4代碼的詳細(xì)介紹 35
2.3 變量 36
2.3.1初始化變量 37
2.3.2類型推斷 38
2.3.3變量的作用域 39
2.3.4常量 41
2.4 預(yù)定義數(shù)據(jù)類型 41
2.4.1值類型和引用類型 42
2.4.2.NET類型 43
2.4.3預(yù)定義的值類型 43
2.4.4預(yù)定義的引用類型 46
2.5 程序流控制 48
2.5.1條件語句 48
2.5.2循環(huán) 51
2.5.3跳轉(zhuǎn)語句 55
2.6 枚舉 55
2.7 名稱空間 57
2.7.1using語句 58
2.7.2名稱空間的別名 59
2.8Main()方法 60
2.9 使用注釋 61
2.9.1源文件中的內(nèi)部注釋 61
2.9.2XML文檔 62
2.10C#預(yù)處理器指令 63
2.10.1#define和#undef 63
2.10.2#if、#elif、#else和#endif 64
2.10.3#warning和 # error 65
2.10.4#region和#endregion 65
2.10.5#line 65
2.10.6#pragma 65
2.11C#編程準(zhǔn)則 66
2.11.1關(guān)于標(biāo)識符的規(guī)則 66
2.11.2用法約定 67
2.12小結(jié) 70
第3章 對象和類型 71
3.1 創(chuàng)建及使用類 72
3.2 類和結(jié)構(gòu) 72
3.3 類 73
3.3.1字段 73
3.3.2屬性 74
3.3.3方法 76
3.3.4構(gòu)造函數(shù) 81
3.3.5只讀成員 85
3.3.6只讀字段 85
3.4 匿名類型 88
3.5 結(jié)構(gòu) 89
3.5.1結(jié)構(gòu)是值類型 90
3.5.2結(jié)構(gòu)和繼承 91
3.5.3結(jié)構(gòu)的構(gòu)造函數(shù) 91
3.6 按值和按引用傳遞參數(shù) 91
3.6.1ref參數(shù) 92
3.6.2out參數(shù) 93
3.7 可空類型 94
3.8 枚舉 95
3.9 部分類 97
3.10擴展方法 99
3.11Object類 100
3.12小結(jié) 101
第4章 繼承 102
4.1 繼承 102
4.2 繼承的類型 102
4.2.1多重繼承 103
4.2.2結(jié)構(gòu)和類 103
4.3 實現(xiàn)繼承 103
4.3.1虛方法 104
4.3.2多態(tài)性 106
4.3.3隱藏方法 107
4.3.4調(diào)用方法的基類版本 108
4.3.5抽象類和抽象方法 109
4.3.6密封類和密封方法 110
4.3.7派生類的構(gòu)造函數(shù) 110
4.4 修飾符 112
4.4.1訪問修飾符 113
4.4.2其他修飾符 113
4.5 接口 114
4.5.1定義和實現(xiàn)接口 115
4.5.2派生的接口 118
4.6is和as運算符 120
4.7 小結(jié) 121
第5章 托管和非托管的資源 122
5.1 資源 122
5.2 后臺內(nèi)存管理 123
5.2.1值數(shù)據(jù)類型 123
5.2.2引用數(shù)據(jù)類型 125
5.2.3垃圾回收 127
5.3 強引用和弱引用 129
5.4 處理非托管的資源 130
5.4.1析構(gòu)函數(shù)或終結(jié)器 130
5.4.2IDisposable接口 131
5.4.3using語句 132
5.4.4實現(xiàn)IDisposable接口和
析構(gòu)函數(shù) 133
5.4.5IDisposable和終結(jié)器的
規(guī)則 134
5.5 不安全的代碼 135
5.5.1用指針直接訪問內(nèi)存 135
5.5.2指針示例:
PointerPlayground 143
5.5.3使用指針優(yōu)化性能 147
5.6 平臺調(diào)用 150
5.7 小結(jié) 154
第6章 泛型 155
6.1 泛型概述 155
6.1.1性能 156
6.1.2類型安全 157
6.1.3二進制代碼的重用 157
6.1.4代碼的擴展 158
6.1.5命名約定 158
6.2 創(chuàng)建泛型類 158
6.3 泛型類的功能 162
6.3.1默認(rèn)值 163
6.3.2約束 163
6.3.3繼承 166
6.3.4靜態(tài)成員 167
6.4 泛型接口 167
6.4.1協(xié)變和抗變 168
6.4.2泛型接口的協(xié)變 169
6.4.3泛型接口的抗變 170
6.5 泛型結(jié)構(gòu) 171
6.6 泛型方法 173
6.6.1泛型方法示例 174
6.6.2帶約束的泛型方法 175
6.6.3帶委托的泛型方法 176
6.6.4泛型方法規(guī)范 176
6.7 小結(jié) 178
第7章 數(shù)組和元組 179
7.1 同一類型和不同類型的多個
對象 179
7.2 簡單數(shù)組 180
7.2.1數(shù)組的聲明 180
7.2.2數(shù)組的初始化 180
7.2.3訪問數(shù)組元素 181
7.2.4使用引用類型 182
7.3 多維數(shù)組 183
7.4 鋸齒數(shù)組 184
7.5Array類 185
7.5.1創(chuàng)建數(shù)組 185
7.5.2復(fù)制數(shù)組 186
7.5.3排序 187
7.6 數(shù)組作為參數(shù) 190
7.6.1數(shù)組協(xié)變 190
7.6.2ArraySegment 191
7.7 枚舉 191
7.7.1IEnumerator接口 192
7.7.2foreach語句 192
7.7.3yield語句 193
7.8 元組 197
7.9 結(jié)構(gòu)比較 198
7.10小結(jié) 201
第8章 運算符和類型強制轉(zhuǎn)換202
8.1 運算符和類型轉(zhuǎn)換 202
8.2 運算符 203
8.2.1運算符的簡化操作 204
8.2.2運算符的優(yōu)先級和關(guān)聯(lián)性 212
8.3 類型的安全性 213
8.3.1類型轉(zhuǎn)換 213
8.3.2裝箱和拆箱 217
8.4 比較對象的相等性 218
8.4.1比較引用類型的相等性 218
8.4.2比較值類型的相等性 219
8.5 運算符重載 219
8.5.1運算符的工作方式 220
8.5.2運算符重載的示例:Vector
結(jié)構(gòu) 221
8.5.3比較運算符的重載 225
8.5.4可以重載的運算符 227
8.6 實現(xiàn)自定義的索引運算符228
8.7 實現(xiàn)用戶定義的類型強制
轉(zhuǎn)換 230
8.7.1實現(xiàn)用戶定義的類型強制
轉(zhuǎn)換 231
8.7.2多重類型強制轉(zhuǎn)換 237
8.8 小結(jié) 240
第9章 委托、lambda表達式和
事件 241
9.1 引用方法 241
9.2 委托 242
9.2.1聲明委托 242
9.2.2使用委托 243
9.2.3簡單的委托示例 246
9.2.4Action和Func
委托 248
9.2.5BubbleSorter示例 248
9.2.6多播委托 251
9.2.7匿名方法 254
9.3lambda表達式 255
9.3.1參數(shù) 256
9.3.2多行代碼 256
9.3.3閉包 257
9.4 事件 258
9.4.1事件程序 258
9.4.2事件偵聽器 260
9.4.3弱事件 261
9.5 小結(jié) 263
第10章 字符串和正則表達式 264
10.1System.String類 265
10.1.1構(gòu)建字符串 266
10.1.2StringBuilder成員 269
10.2字符串格式 270
10.2.1字符串插值 270
10.2.2日期時間和數(shù)字的格式 272
10.2.3自定義字符串格式 274
10.3正則表達式 275
10.3.1正則表達式概述 275
10.3.2RegularExpressionsPlayaround
示例 276
10.3.3顯示結(jié)果 279
10.3.4匹配、組和捕獲 280
10.4小結(jié) 283
第11章 集合 284
11.1概述 284
11.2集合接口和類型 285
11.3列表 285
11.3.1創(chuàng)建列表 287
11.3.2只讀集合 294
11.4隊列 294
11.5棧 298
11.6鏈表 300
11.7有序列表 305
11.8字典 306
11.8.1字典初始化器 307
11.8.2鍵的類型 307
11.8.3字典示例 308
11.8.4Lookup類 312
11.8.5有序字典 313
11.9集 313
11.10性能 315
11.11小結(jié) 316
第12章 特殊的集合 317
12.1概述 317
12.2處理位 317
12.2.1BitArray類 318
12.2.2BitVector32結(jié)構(gòu) 320
12.3可觀察的集合 323
12.4不變的集合 324
12.4.1使用構(gòu)建器和不變的
集合 327
12.4.2不變集合類型和接口 327
12.4.3使用LINQ和不變的
數(shù)組 328
12.5并發(fā)集合 328
12.5.1創(chuàng)建管道 329
12.5.2使用BlockingCollection 332
12.5.3使用Concurrent-
Dictionary 333
12.5.4完成管道 334
12.6小結(jié) 335
第13章 LINQ 337
13.1LINQ概述 337
13.1.1列表和實體 338
13.1.2LINQ查詢 341
13.1.3擴展方法 342
13.1.4推遲查詢的執(zhí)行 343
13.2標(biāo)準(zhǔn)的查詢操作符 345
13.2.1篩選 347
13.2.2用索引篩選 347
13.2.3類型篩選 348
13.2.4復(fù)合的from子句 348
13.2.5排序 349
13.2.6分組 350
13.2.7LINQ 查詢中的變量 351
13.2.8對嵌套的對象分組 352
13.2.9內(nèi)連接 353
13.2.10左外連接 355
13.2.11組連接 355
13.2.12集合操作 358
13.2.13合并 360
13.2.14分區(qū) 360
13.2.15聚合操作符 362
13.2.16轉(zhuǎn)換操作符 363
13.2.17生成操作符 365
13.3并行LINQ 365
13.3.1并行查詢 365
13.3.2分區(qū)器 366
13.3.3取消 367
13.4表達式樹 367
13.5LINQ提供程序 370
13.6小結(jié) 371
第14章 錯誤和異常 372
14.1簡介 372
14.2異常類 373
14.3捕獲異常 374
14.3.1實現(xiàn)多個catch塊 377
14.3.2在其他代碼中捕獲異常 380
14.3.3System.Exception屬性 380
14.3.4異常過濾器 381
14.3.5重新拋出異常 382
14.3.6沒有處理異常時發(fā)生的
情況 386
14.4用戶定義的異常類 386
14.4.1捕獲用戶定義的異常 387
14.4.2拋出用戶定義的異常 389
14.4.3定義用戶定義的異常類 392
14.5調(diào)用者信息 394
14.6小結(jié) 396
第15章 異步編程 397
15.1異步編程的重要性 397
15.2異步模式 398
15.2.1同步調(diào)用 405
15.2.2異步模式 406
15.2.3基于事件的異步模式 407
15.2.4基于任務(wù)的異步模式 408
15.3異步編程的基礎(chǔ) 410
15.3.1創(chuàng)建任務(wù) 410
15.3.2調(diào)用異步方法 411
15.3.3延續(xù)任務(wù) 411
15.3.4同步上下文 412
15.3.5使用多個異步方法 412
15.3.6轉(zhuǎn)換異步模式 413
15.4錯誤處理 414
15.4.1異步方法的異常處理 415
15.4.2多個異步方法的異常
處理 415
15.4.3使用AggregateException
信息 416
15.5取消 417
15.5.1開始取消任務(wù) 417
15.5.2使用框架特性取消任務(wù) 417
15.5.3取消自定義任務(wù) 418
15.6小結(jié) 419
第16章 反射、元數(shù)據(jù)和動態(tài)編程420
16.1在運行期間檢查代碼和
動態(tài)編程 420
16.2自定義特性 421
16.2.1編寫自定義特性 422
16.2.2自定義特性示例:
WhatsNewAttributes 425
16.3反射 428
16.3.1System.Type類 428
16.3.2TypeView示例 430
16.3.3Assembly類 433
16.3.4完成WhatsNewAttributes
示例 434
16.4為反射使用動態(tài)語言擴展 438
16.4.1創(chuàng)建Calculator庫 438
16.4.2動態(tài)實例化類型 440
16.4.3用反射API調(diào)用成員 442
16.4.4使用動態(tài)類型調(diào)用成員 442
16.5dynamic類型 443
16.6DLR 448
16.7包含DLR ScriptRuntime 449
16.8DynamicObject和
ExpandoObject 451
16.8.1DynamicObject 451
16.8.2ExpandoObject 453
16.9小結(jié) 455
第Ⅱ部分 .NET Core與Windows
Runtime
第17章 Visual Studio 2015 458
17.1使用Visual Studio 2015 458
17.1.1Visual Studio的版本 461
17.1.2Visual Studio設(shè)置 461
17.2創(chuàng)建項目 462
17.2.1面向多個版本的.NET
Framework 463
17.2.2選擇項目類型 464
17.3瀏覽并編寫項目 469
17.3.1構(gòu)建環(huán)境:CLI和
MSBuild 469
17.3.2Solution Explorer 470
17.3.3使用代碼編輯器 477
17.3.4學(xué)習(xí)和理解其他窗口 481
17.3.5排列窗口 485
17.4構(gòu)建項目 485
17.4.1構(gòu)建、編譯和生成代碼 486
17.4.2調(diào)試版本和版本 486
17.4.3選擇配置 488
17.4.4編輯配置 488
17.5調(diào)試代碼 490
17.5.1設(shè)置斷點 490
17.5.2使用數(shù)據(jù)提示和調(diào)試器可
視化工具 491
17.5.3Live Visual Tree 492
17.5.4監(jiān)視和修改變量 493
17.5.5異常 494
17.5.6多線程 495
17.6重構(gòu)工具 495
17.7體系結(jié)構(gòu)工具 497
17.7.1代碼地圖 498
17.7.2層關(guān)系圖 499
17.8分析應(yīng)用程序 500
17.8.1診斷工具 500
17.8.2Concurrency Visualizer 504
17.8.3代碼分析器 505
17.8.4Code Metrics 506
17.9小結(jié) 506
第18章 .NET編譯器平臺 507
18.1簡介 507
18.2編譯器管道 509
18.3語法分析 509
18.3.1使用查詢節(jié)點 515
18.3.2遍歷節(jié)點 517
18.4