內容簡介
C#作為微軟的旗艦編程語言,深受程序員喜愛,是編寫高效應用程序的首選語言。Visual C# 2015提供了大量新功能,本書圍繞語言的基礎知識和這些新功能全面介紹了如何利用Visual Studio 2015和.NET Framework 4.6編寫C#應用程序。本書沿襲深受讀者歡迎的Step by Step風格,通過合理的練習引導讀者逐步構建在Windows 10上運行的應用程序、訪問SQL Server數據庫以及開發多線程應用等。
全書共27章,結構清晰,敘述清楚。所有練習均在Visual Studio 2015簡體中文版上進行過全面演練。無論是剛開始接觸面向對象編程的新手,還是打算遷移到C#的C、C++或Java程序員,都可以從本書汲取到新的知識。迅速掌握C#編程技術。
前 言
Microsoft Visual C#是一種功能強大、使用簡單的語言,主要面向需要使用Microsoft .NET Framework來創建應用程序的開發者。它在C++和Microsoft Visual Basic的基礎上去蕪存菁,最終形成一種更加清晰、更富有邏輯的語言。C# 1.0于2001年亮相。幾年后隨著C# 2.0和Visual Studio 2005的問世,語言新增了幾個重要功能,包括泛型、迭代器和匿名方法等。隨同Visual Studio 2008發布的C# 3.0添加了更多功能,包括擴展方法、Lambda表達式以及語言集成查詢(Language Integrated Query,LINQ)。2010年發布的C# 4.0繼續增強,改善了與其他語言和技術的互操作性。新增功能包括具名參數和可選參數,另外還有dynamic類型(指示語言的"運行時"對對象進行晚期綁定)。在隨同C# 4.0發布的.NET Framework中,最重要的新功能就是"任務并行庫"(Task Parallel Library,TPL)?捎肨PL構建具有良好伸縮性的應用程序,從而快速和簡單地發揮出多核處理器的潛力。C# 5.0則通過async方法修飾符和await操作符提供了對異步任務的原生支持。C# 6.0是一次增量式升級,提供了許多有利于簡化開發的功能,包括字符串插值(再也不需要String.Format了),改進的屬性實現方式,表達式主體方法等。本書將一一闡述。
Microsoft的另一個里程碑事件是Windows 10的發布。新的操作系統集成了以前版本的Windows最好(和最受人喜愛)的元素,支持高交互性的應用。這些應用實現了數據共享和協作,還能連接在云端運行的服務。Windows 10最引人注目的是對(通用Windows平臺,Universal Windows Platform,UWP)應用的支持。這種應用設計在任何Windows 10設備上運行,無論是全功能的桌面系統、筆記本和平板,還是資源有限的智能手機和物聯網設備。熟悉C#的核心功能后,下一步就是掌握如何開發能在所有這些平臺上運行的應用。
語音激活是另一個值得關注的功能。Windows 10提供了Cortana(小娜)--你的個人語音數字助理?蓪⒆约旱膽煤虲ortana集成來實現數據搜索和其他操作。雖然自然語音分析天生就很復雜,但讓應用響應Cortana的請求卻令人驚訝地簡單。詳情將在第26章描述。另外,從大規模企業應用程序到手機上運行的移動應用,云已成為許多系統架構的重要元素,本書最后一章會講解如何開發基于云的應用。
Visual Studio 2015開發環境使這些強大功能變得容易使用,大量新向導和增強顯著提高了開發效率。寫作這本書給我帶來了許多樂趣,希望你的閱讀亦是如此!
下面列出和本書上一版《Visual C# 2013從入門到精通》相比的主要變化:
* 代碼字體改用Consolas,可以更好地保護程序員的視力
* 針對Windows 10上的UWP應用開發進行了全面重寫,不需要針對不同Windows平臺維護不同代碼庫
* 字符串插值,所有代碼都修改為可以利用該技術,參見2.5.1節
* 表達式主體方法,參見3.1.3節
* 異常過濾器,參見6.2.3節
* using static語句,參見7.5.4節
* 可以創建只讀的自動屬性了,參見15.5節
* 索引器風格的對象初始化列表,聲明并初始化字典時特別好用,參見18.2節
* 利用可視狀態觸發器大幅簡化視圖大小自適應代碼,參見25.2.1節
* nameof操作符,參見26.1.2節
* 和小娜一起玩語音搜索,參見26.2節
* 與時俱進使用Microsoft Azure創建云端數據庫,參見第27章
本書面向的讀者
本書假定你要使用Visual Studio 2015和.NET Framework 4.6學習基礎的C#編程知識。學完本書后,會對C#有一個全面和透徹的理解,會用它開發響應靈敏、易于伸縮的Windows 10應用程序。
本書不面向的讀者
本書面向剛開始用C#進行開發的人士,重點放在C#語言上面。本書不涉及企業級Windows應用程序的開發技術,比如ADO.NET、ASP.NET、Windows Communication Foundation或者Workflow Foundation。要了解這些方面的知識,可參考微軟出版社的其他書籍。
本書的組織
全書分為四部分。
* 第I部分"Visual C#和Visual Studio 2015概述"介紹C#語言的核心語法,還演示了Visual Studio編程環境。
* 第II部分"理解C#對象模型"深入探討如何用C#創建和管理新類型,如何管理這些類型引用的資源。
* 第III部分"用C#定義可擴展類型"全面討論如何利用C#語言元素來構建能在多個應用程序中重用的類型。
* 第IV部分"用C#構建UWP應用"描述通用Windows 10編程模型,以及如何用C#為新模型構建交互式應用程序。
導讀
本書幫助你掌握多個基本領域的開發技能。無論剛開始學習編程,還是從另一種語言(C、C++、Java或Visual Basic)轉向C#,本書都能提供幫助。參考下表找到最佳起點。
讀者類型 步驟
面向對象編程的新手 1. 按照“示例代碼”一節的步驟安裝練習文件
2. 順序閱讀第Ⅰ部分、第Ⅱ部分和第Ⅲ部分
3. 有了一定經驗后,如果有興趣,繼續完成
第Ⅳ部分的學習
熟悉C語言等過程編程 1. 按照“示例代碼”一節的步驟安裝練習文件
語言,但新涉足C# 2. 略讀前5章來獲得對C#和Visual Studio 2015的大致印
象,重點閱讀第6章~第22章
3. 閱讀第Ⅳ部分了解如何構建可伸縮的
Windows 8.1應用程序
從面向對象語言C++或 1. 按照“示例代碼”一節的步驟安裝練習文件
Java等遷移到C#
2. 略讀前7章,獲得對C#語言和Visual Studio 2015的大
致印象,重點閱讀第8~22章
3. 閱讀第Ⅳ部分了解如何構建UWP應用
從Visual Basic遷移到C# 1. 按照“示例代碼”一節的步驟安裝練習文件
2. 順序閱讀第Ⅰ部分、第Ⅱ部分和第Ⅲ部分
3. UWP應用的開發請閱讀第Ⅳ部分
4. 閱讀每章末尾的“快速參考”小節,
了解C#和Visual Studio 2015特有的構造
做完所有練習后再將 1. 按目錄查主題
本書用作為參考書 2. 閱讀章末“快速參考”,查看語法和技術要點歸納
本書大多數章節都通過實例方便讀者鞏固剛學到的知識。無論感興趣的是哪個主題,都注意先下載并安裝好示例代碼。
本書的約定和特色
本書通過一些約定來增強內容的可讀性,以便于讀者理解。
* 每個練習都用編號的操作步驟來完成。
* "注意"等特色段落提供了成功完成一個步驟需要了解的額外信息或替代方案。
* 要求讀者輸入的文本加粗顯示。
* 兩個鍵名之間的加號(+)意味著必須同時按下這兩個鍵。例如,"按組合鍵Alt+ Tab"意味著按住Alt鍵,再按Tab鍵。
* 描述菜單操作時,采用"文件"|"打開"的形式,意思是從"文件"菜單中選擇"打開"命令。
系統需求
為了完成本書的練習,需準備以下硬件和軟件:
* Windows 10專業版或更高版本
* Visual Studio 2015社區版、專業版或企業版
重要提示 需要在Visual Studio 2015中安裝Windows 10開發工具。
* 1.6 GHz或更快的處理器(推薦2 GHz以上)
* 32位操作系統至少1 GB RAM,64位至少2 GB RAM。在虛擬機中運行再加512 MB
* 10 GB可用硬盤空間
* 支持DirectX 9的顯示卡,1024 × 768或更高分辨率
* 光盤驅動器(如果從光盤安裝Visual Studio)
* 下載軟件和示例代碼需要Internet連接
取決于Windows配置,可能需要以管理員身份安裝和配置Visual Studio 2015。
計算機需啟用開發人員模式以創建和運行UWP應用。詳情參考"啟用設備進行開發"(https://msdn.microsoft.com/library/windows/apps/dn706236.aspx)
示例代碼
本書大多數章節都包含互動練習供你練手。從以下網址下載所有示例項目(包括練習前后兩種格式):
http://aka.ms/sharp8e/companioncontent
http://pan.baidu.com/s/1yd43W
http//transbot.ys168.com
安裝示例代碼很簡單,將下載的CSharpSBS.zip文件解壓到"文檔"文件夾即可。①
使用示例代碼
本書每一章都解釋了在什么時候以及如何使用練習文件。需要練習文件時,書中會給出相應的指示,幫助你打開正確文件。
重要提示 許多例子都依賴NuGet包。這些包在首次生成項目時自動下載。所以如果首次打開一個項目而且不進行生成,Visual Studio可能報告大量引用無法解析的錯誤。生成一次項目即可完成引用的解析,錯誤會消失不見。
下表總結了本書用到的所有Visual Studio 2015項目和解決方案,它們以文件夾的形式進行分組以便查找。練習通常會為同一個項目提供初始文件和完成之后的版本。已完成的項目存儲在帶有- Complete后綴的文件夾中。
項目/解決方案 說明
第1章
TextHello 作為第一個項目,它指導你創建一個簡單程序來顯示歡迎文本
Hello 打開一個窗口,提示用戶輸入姓名并顯示個性化的歡迎辭
第2章
PrimitiveDataTypes 演示如何使用基元類型聲明變量,如何向變量賦值,如何在窗口中顯示值
MathsOperators 演示算術操作符(+、–、*、/、%)
第3章
Methods 改進上個項目的代碼,體會如何使用方法來建立代碼的結構
DailyRate 指導你寫自己的方法,執行方法,使用Visual Studio 2015調試器來單步執行方法
DailyRate Using
Optional Parameters 演示如何讓方法獲取可選參數,如何使用具名參數來調用方法
第4章
Selection 演示如何用嵌套if語句實現復雜邏輯,例如比較兩個日期的相等性
SwitchStatement 這個簡單的程序使用一個switch語句將字符轉換成相應的XML形式
第5章
WhileStatement 用while語句逐行讀取源文件,在窗體上的文本框中顯示每一行
DoStatement 使用do語句將十進制數轉換成八進制
第6章
MathsOperators 改進第2章的MathsOperators項目,試驗會造成程序執行失敗的各種未處理異常。
然后用try和catch關鍵字使應用程序更健壯,防止因為錯誤輸入或操作而失敗
第7章
Classes 演示如何定義自己的類,為它添加公共構造器、方法和私有字段;還演示如何用new關鍵字創建類的實例,如何定義靜態方法和字段
第8章
Parameters 演示值類型和引用類型的參數的區別,還演示如何使用ref和out關鍵字
第9章
StructsAndEnums 定義結構來表示日期
第10章
Cards 使用數組建模紙牌游戲中的一手牌
第11章
ParamsArrays 演示如何使用params關鍵字使方法能接受任意數量的實參
第12章
Vehicles 用繼承創建簡單交通工具類,還演示如何定義虛方法
ExtensionMethod 演示如何為int類型創建擴展方法,允許將整數從十進制轉換成其他進制
第13章
Drawing 實現圖形繪圖包的一部分。用接口定義要由幾何圖形對象公開并實現的方法
Drawing Using Interfaces 擴展Drawing項目,將幾何圖形對象的常用功能集成到抽象類中
第14章
GarbageCollectionDemo 演示如何使用Dispose模式實現異常安全的資源清理
第15章
Drawing Using
Properties 擴展第13章的Drawing項目,用屬性封裝類的數據
AutomaticProperties 演示如何為類創建自動屬性,如何用它們初始化類的實例
第16章
Indexers 該項目使用了兩個索引器,一個根據姓名查找電話號碼,另一個根據電話號碼查找姓名
第17章
BinaryTree 演示如何使用泛型生成類型安全的結構,可包含任何類型的元素
BuildTree 演示如何使用泛型實現類型安全的方法,可獲取任何類型的參數
第18章
Cards 升級第10章的代碼,演示如何用集合建模一手牌
第19章
BinaryTree 演示如何實現泛型IEnumerator<T>接口,為泛型Tree類創建枚舉器
IteratorBinaryTree 用迭代器為泛型Tree類生成枚舉器
第20章
Delegates 演示如何通過委托調用方法,將方法的邏輯和調用方法的應用程序分開。然后對項目進行擴展,演示如何用事件提醒對象發生了某事,以及如何捕捉事件并執行必要的處理
第21章
QueryBinaryTree 演示如何通過LINQ查詢從二叉樹對象獲取數據
第22章
ComplexNumbers 定義新類型來建模復數,并為這種類型實現常用的操作符
第23章
GraphDemo 生成并在UWP窗體上顯示復雜圖表。用單線程執行計算
Parallel GraphDemo 使用Parallel類對創建和管理任務的過程進行抽象
GraphDemo With
Cancellation 中途得體地取消任務
ParallelLoop 演示何時不該使用Parallel類創建和運行任務
第24章
GraphDemo 修改第23章的同名項目,使用async關鍵字和await操作符異步計算圖表數據
PLINQ 使用并行任務,用PLINQ查詢數據
CalculatePI 使用統計學采樣計算PI的近似值。使用了并行任務
第25章
Customers 實現能自動適應不同屏幕分辨率和設備大小的UI。UI使用XAML樣式更改字體和背景圖片
第26章
DataBinding 修改上一章的Customers項目,使用數據綁定在UI中顯示從數據源獲取的客戶資料;還演示了如何實現INotifyPropertyChanged接口,從而允許UI更新客戶資料,并將改動發送回數據源
ViewModel 這個版本的Customers項目通過實現Model-View-ViewModel模式,將UI同數據源訪問邏輯分開
Cortana 將Customers應用和Cortana集成。用戶可發出語音指令來搜索客戶
第27章
Web Service 該解決方案包含一個Web應用程序來提供ASP.NET Web API Web服務,使Customers應用能從SQL Server數據庫獲取客戶數據。Web服務通過由實體框架創建的實體模型來訪問數據庫
① 譯注:本書將路徑"C:\Users\YourName\Documents"簡稱為"文檔"文件夾。可在Windows文件資源管理器的地址欄輸入環境變量%UserProfile%\Documents打開該文件夾。
目 錄
第I部分 Visual C#和Visual Studio 2015概述第1章 歡迎進入C#編程世界 31.1 開始在Visual Studio 2015環境中編程 31.2 寫第一個程序 71.3 使用命名空間 111.4 創建圖形應用程序 141.4.1 探索通用Windows平臺應用程序 201.4.2 向圖形應用程序添加代碼 23小結 25第1章快速參考 25第2章 使用變量、操作符和表達式 272.1 理解語句 272.2 使用標識符 272.3 使用變量 292.3.1 命名變量 292.3.2 聲明變量 292.4 使用基元數據類型 302.4.1 未賦值的局部變量 312.4.2 顯示基元數據類型的值 312.5 使用算術操作符 362.5.1 操作符和類型 362.5.2 深入了解算術操作符 382.5.3 控制優先級 422.5.4 使用結合性對表達式進行求值 432.5.5 結合性和賦值操作符 432.6 變量遞增和遞減 442.7 聲明隱式類型的局部變量 45小結 46第2章快速參考 47第3章 方法和作用域 483.1 創建方法 483.1.1 聲明方法 483.1.2 從方法返回數據 493.1.3 使用表達式主體方法 503.1.4 調用方法 513.2 使用作用域 533.2.1 定義局部作用域 543.2.2 定義類作用域 543.2.3 重載方法 553.3 編寫方法 563.4 使用可選參數和具名參數 633.4.1 定義可選參數 643.4.2 傳遞具名參數 643.4.3 消除可選參數和具名參數的歧義 65小結 69第3章快速參考 70第4章 使用判斷語句 724.1 聲明布爾變量 724.2 使用布爾操作符 724.2.1 理解相等和關系操作符 734.2.2 理解條件邏輯操作符 734.2.3 短路求值 744.2.4 操作符的優先級和結合性總結 744.3 使用if語句做出判斷 754.3.1 理解if語句的語法 754.3.2 使用代碼塊分組語句 764.3.3 嵌套if語句 774.4 使用switch語句 824.4.1 理解switch語句的語法 834.4.2 遵守switch語句的規則 84小結 87第4章快速參考 87第5章 使用復合賦值和循環語句 895.1 使用復合賦值操作符 895.2 使用while語句 905.3 編寫for語句 945.4 編寫do語句 96小結 103第5章快速參考 104第6章 管理錯誤和異常 1056.1 處理錯誤 1056.2 嘗試執行代碼和捕捉異常 1056.2.1 未處理的異常 1076.2.2 使用多個catch處理程序 1086.2.3 捕捉多個異常 1086.2.4 傳播異常 1136.3 使用checked和unchecked整數運算 1156.3.1 編寫checked語句 1156.3.2 編寫checked表達式 1166.4 拋出異常 1186.5 使用finally塊 122小結 123第6章快速參考 124第II部分 理解C#對象模型第7章 創建并管理類和對象 1277.1 理解分類 1277.2 封裝的目的 1277.3 定義并使用類 1287.4 控制可訪問性 1297.4.1 使用構造器 1307.4.2 重載構造器 1317.5 理解靜態方法和數據 1387.5.1 創建共享字段 1397.5.2 使用const關鍵字創建靜態字段 1407.5.3 理解靜態類 1407.5.4 靜態using語句 1407.5.5 匿名類 143小結 144第7章快速參考 144第8章 理解值和引用 1468.1 復制值類型的變量和類 1468.2 理解null值和可空類型 1518.2.1 使用可空類型 1538.2.2 理解可空類型的屬性 1548.3 使用ref和out參數 1548.3.1 創建ref參數 1558.3.2 創建out參數 1568.4 計算機內存的組織方式 1588.5 System.Object類 1608.6 裝箱 1608.7 拆箱 1618.8 數據的安全轉型 1628.8.1 is操作符 1638.8.2 as操作符 163小結 165第8章快速參考 165第9章 使用枚舉和結構創建值類型 1679.1 使用枚舉 1679.1.1 聲明枚舉 1679.1.2 使用枚舉 1679.1.3 選擇枚舉字面值 1689.1.4 選擇枚舉的基礎類型 1699.2 使用結構 1719.2.1 聲明結構 1739.2.2 理解結構和類的區別 1749.2.3 聲明結構變量 1759.2.4 理解結構的初始化 1759.2.5 復制結構變量 179小結 183第9章快速參考 183第10章 使用數組 18510.1 聲明和創建數組 18510.1.1 聲明數組變量 18510.1.2 創建數組實例 18610.1.3 填充和使用數組 18610.1.4 創建隱式類型的數組 18710.1.5 訪問單獨的數組元素 18810.1.6 遍歷數組 18910.1.7 數組作為方法參數和返回值傳遞 19010.1.8 復制數組 19110.1.9 使用多維數組 19210.1.10 創建交錯數組 193小結 202第10章快速參考 202第11章 理解參數數組 20411.1 回顧重載 20411.2 使用數組參數 20511.2.1 聲明參數數組 20611.2.2 使用params object[] 20811.2.3 使用參數數組 20911.3 比較參數數組和可選參數 211小結 213第11章快速參考 214第12章 使用繼承 21512.1 什么是繼承 21512.2 使用繼承 21612.2.1 復習System.Object類 21712.2.2 調用基類構造器 21812.2.3 類的賦值 21912.2.4 聲明新方法 22012.2.5 聲明虛方法 22112.2.6 聲明重寫方法 22212.2.7 理解受保護的訪問 22512.3 理解擴展方法 230小結 234第12章快速參考 234第13章 創建接口和定義抽象類 23613.1 理解接口 23613.1.1 定義接口 23713.1.2 實現接口 23713.1.3 通過接口來引用類 23913.1.4 使用多個接口 23913.1.5 顯式實現接口 24013.1.6 接口的限制 24213.1.7 定義和使用接口 24213.2 抽象類 25013.3 密封類 25213.3.1 密封方法 25213.3.2 實現并使用抽象類 253小結 258第13章快速參考 259第14章 使用垃圾回收和資源管理 26014.1 對象的生存期 26014.1.1 編寫析構器 26114.1.2 為什么要使用垃圾回收器 26214.1.3 垃圾回收器的工作原理 26414.1.4 慎用析構器 26414.2 資源管理 26514.2.1 資源清理方法 26514.2.2 異常安全的資源清理 26614.2.3 using語句和IDisposable接口 26614.2.4 從析構器中調用Dispose方法 26814.3 實現異常安全的資源清理 270小結 276第14章快速參考 277第III部分 用C#定義可擴展類型第15章 實現屬性以訪問字段 28115.1 使用方法實現封裝 28115.2 什么是屬性 28315.2.1 使用屬性 28515.2.2 只讀屬性 28515.2.3 只寫屬性 28615.2.4 屬性的可訪問性 28615.3 理解屬性的局限性 28715.4 在接口中聲明屬性 28815.5 生成自動屬性 29415.6 用屬性初始化對象 296小結 299第15章快速參考 300第16章 使用索引器 30216.1 什么是索引器 30216.1.1 不用索引器的例子 30216.1.2 同一個例子改用索引器 30416.1.3 理解索引器的訪問器 30616.1.4 對比索引器和數組 30616.2 接口中的索引器 30816.3 在Windows應用程序中使用索引器 309小結 315第16章快速參考 315第17章 泛型概述 31717.1 object的問題 31717.2 泛型解決方案 32017.2.1 對比泛型類和常規類 32217.2.2 泛型和約束 32317.3 創建泛型類 32317.3.1 二叉樹理論 32317.3.2 使用泛型構造二叉樹類 32617.4 創建泛型方法 33417.5 可變性和泛型接口 33717.5.1 協變接口 33817.5.2 逆變接口 340小結 342第17章快速參考 342第18章 使用集合 34418.1 什么是集合類 34418.1.1 List<T>集合類 34518.1.2 LinkedList<T>集合類 34718.1.3 Queue<T>集合類 34918.1.4 Stack<T>集合類 35018.1.5 Dictionary<TKey, TValue>集合類 35118.1.6 SortedList<TKey, TValue>集合類 35218.1.7 HashSet<T>集合類 35318.2 使用集合初始化器 35518.3 Find方法、謂詞和Lambda表達式 35618.4 比較數組和集合 359小結 363第18章快速參考 363第19章 枚舉集合 36619.1 枚舉集合中的元素 36619.1.1 手動實現枚舉器 36719.1.2 實現IEnumerable接口 37119.2 用迭代器實現枚舉器 37319.2.1 一個簡單的迭代器 37319.2.2 使用迭代器為Tree<TItem>類定義枚舉器 375小結 377第19章快速參考 378第20章 分離應用程序邏輯并處理事件 37920.1 理解委托 37920.1.1 .NET Framework類庫的委托例子 38020.1.2 自動化工廠的例子 38220.1.3 不用委托實現工廠控制系統 38220.1.4 用委托實現工廠控制系統 38320.1.5 聲明和使用委托 38520.2 Lambda表達式和委托 39220.3 啟用事件通知 39320.3.1 聲明事件 39420.3.2 訂閱事件 39520.3.3 取消訂閱事件 39520.3.4 引發事件 39520.4 理解用戶界面事件 396小結 403第20章快速參考 403第21章 使用查詢表達式來查詢內存中的數據 40621.1 什么是LINQ 40621.2 在C#應用程序中使用LINQ 40721.2.1 選擇數據 40821.2.2 篩選數據 41121.2.3 排序、分組和聚合數據 41121.2.4 聯接數據 41321.2.5 使用查詢操作符 41521.2.6 查詢Tree<TItem>對象中的數據 41721.2.7 LINQ和推遲求值 422小結 425第21章快速參考 425第22章 操作符重載 42822.1 理解操作符 42822.1.1 操作符的限制 42822.1.2 重載的操作符 42922.1.3 創建對稱操作符 43022.2 理解復合賦值 43222.3 聲明遞增和遞減操作符 43322.4 比較結構和類中的操作符 43422.5 定義成對的操作符 43422.6 實現操作符 43522.7 理解轉換操作符 44122.7.1 提供內建轉換 44122.7.2 實現用戶自定義的轉換操作符 44222.7.3 再論創建對稱操作符 44322.7.4 添加隱式轉換操作符 444小結 446第22章快速參考 446第IV部分 用C#構建UWP應用第23章 使用任務提高吞吐量 45123.1 使用并行處理執行多任務處理 45123.2 用.NET Framework實現多任務處理 45223.2.1 任務、線程和線程池 45323.2.2 創建、運行和控制任務 45423.2.3 使用Task類實現并行處理 45723.2.4 使用Parallel類對任務進行抽象 46723.2.5 什么時候不要使用Parallel類 47123.3 取消任務和處理異常 47323.3.1 協作式取消的原理 47323.3.2 為Canceled和Faulted任務使用延續 485小結 485第23章快速參考 486第24章 通過異步操作提高響應速度 48924.1 實現異步方法 49024.1.1 定義異步方法:問題 49024.1.2 定義異步方法:解決方案 49224.1.3 定義返回值的異步方法 49724.1.4 異步方法注意事項 49824.1.5 異步方法和WindowsRuntime API 49924.2 用PLINQ進行并行數據訪問 50224.2.1 用PLINQ增強遍歷集合時的性能 50224.2.2 取消PLINQ查詢 50624.3 同步對數據的并發訪問 50624.3.1 鎖定數據 50924.3.2 用于協調任務的同步基元 51024.3.3 取消同步 51224.3.4 并發集合類 51224.3.5 使用并發集合和鎖實現線程安全的數據訪問 513小結 522第24章快速參考 522第25章 實現UWP應用的用戶界面 52525.1 UWP應用的特點 52625.2 使用空白模板構建UWP應用 52825.2.1 實現可伸縮的用戶界面 53025.2.2 向用戶界面應用樣式 556小結 565第25章快速參考 566第26章 在UWP應用中顯示和搜索數據 56726.1 實現Model-View-ViewModel模式 56726.1.1 通過數據綁定顯示數據 56826.1.2 通過數據綁定修改數據 57326.1.3 為ComboBox控件使用數據綁定 57726.1.4 創建ViewModel 57926.1.5 向ViewModel添加命令 58326.2 用Cortana搜索數據 592小結 606第26章快速參考 606第27章 在UWP應用中訪問遠程數據庫 60827.1 從數據庫獲取數據 60827.1.1 創建實體模型 61327.1.2 創建和使用REST Web服務 62027.2 通過REST Web服務插入、更新和刪除數據 634小結 651第27章快速參考 651譯者后記 653