C#高級編程(第8版) ( 簡體 字) |
作者:Christian Nagel,Bill Evjen,Jay Glynn,Karli Watson,Morgan Skinner 著 | 類別:1. -> 程式設計 -> .NET -> C# |
譯者: 李銘 譯 |
出版社:清華大學出版社 | 3dWoo書號: 37022 詢問書籍請說出此書號!【缺書】 【不接受訂購】 |
出版日:10/10/2013 |
頁數: |
光碟數:0 |
|
站長推薦:  |
印刷:黑白印刷 | 語系: ( 簡體 版 ) |
|
【不接受訂購】 |
ISBN:9787302334118 |
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 序 |
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證) |
作者序: |
譯者序: |
前言:對于開發人員,把C#語言及其相關聯的.NET Framework環境描述為最重要的新技術一點都不夸張。.NET提供了一種環境。在這個環境中,可以開發在Windows上運行的幾乎所有應用程序,而C#是專門用于.NET Framework的編程語言。例如,使用C#可以編寫動態Web頁面、Windows Presentation Foundation應用程序、XML Web服務、分布式應用程序的組件、數據庫訪問組件、傳統的Windows桌面應用程序,甚或可以聯機/脫機運行的新型智能客戶端應用程序。本書介紹.NET Framework 4.5。如果讀者使用以前的版本編碼,本書的一些章節就不適用。本書將標注出專用于.NET Framework 4.5的新增內容。 不要被這個架構名稱中的.NET所迷惑,認為這是一個只關注Internet的架構。這個名稱中的.NET僅強調Microsoft相信分布式應用程序是未來的趨勢,即處理過程分布在客戶端和服務器上。理解C#不僅僅是編寫Internet或與網絡能識別的應用程序的一種語言也很重要。它還提供了一種編寫Windows平臺上幾乎任何類型的軟件或組件的方式。另外,C#和.NET都對開發人員編寫程序的方式進行了革新,更易于實現在Windows上的編程。 那么,.NET和C#有什么優點? .NET和C#的重要性 為了理解.NET的重要性,了解一下過去18年來出現的許多Windows技術的本質會有一定的幫助。盡管所有Windows操作系統在表面上看來完全不同,但從Windows 3.1(1992年引入)到Windows 8和Windows Server 2012,在內核上都有相同的Windows API用于Windows桌面和服務器應用程序。在我們轉而使用Windows的新版本時,雖然API中增加了非常多的新功能,但這是一個演化和擴展API的過程,并非替換它。 開發Windows軟件所使用的許多技術和架構也是這樣。例如,組件對象模型(Component Object Model,COM)源自對象鏈接和嵌入(Object Linking and Embedding,OLE)。最初,因為它在很大程度上僅把不同類型的Office文檔鏈接在一起,所以利用它,例如,可以把一個小型Excel電子表格放在Word文檔中。之后,它逐步演化為COM、DCOM(Distributed COM,分布式組件對象模型)和最終的COM+。COM+是一種復雜的技術,它是幾乎所有組件通信方式的基礎,實現了事務處理、消息傳輸服務和對象池。 Microsoft選擇這種軟件革新方法的原因非常明顯:它關注后向兼容性。在過去的這些年中,人們編寫了大量Windows第三方軟件,如果Microsoft每次都引入一項不遵循現有基本代碼的新技術,Windows就不會獲得今天的成功。 后向兼容性是Windows技術的極其重要的功能,也是Windows平臺的一個長處。但它有一個很大的缺點:每次某項技術更新換代,增加了新功能后,它都會比以前更復雜。 很明顯,對此必須進行改進。Microsoft不可能一直擴展相同的開發工具和語言,總是使它們越來越復雜,既要保證能跟上最新硬件的發展步伐,又要與20世紀90年代初開始流行的Windows產品向后兼容。如果要得到一系列簡單而專業的語言、環境和開發工具,讓開發人員輕松地編寫一流的軟件,就需要一個新的開端。 這就是C#和.NET的作用。粗略地說,.NET是一種在Windows平臺上編程的架構—— 一種API。C#是一種從頭開始設計的用于.NET的語言,它可以利用.NET Framework及其開發環境中的所有新增功能,以及在最近25年來出現的面向對象的編程方法。 在繼續介紹前,必須先說明,后向兼容性并沒有在這個演化進程中喪失。現有的程序仍可以使用,.NET也兼容現有的軟件。現在,在Windows上軟件組件之間的通信幾乎都使用COM實現。因此,.NET能夠提供現有COM組件的包裝器(wrapper),以便.NET組件與之通信。 我們不需要學習了C#才能給.NET編寫代碼,因為Microsoft已經擴展了C++,還對Visual Baisc進行了很多改進,把它轉變成了功能更強大的語言,并允許把用這些語言編寫的代碼用于.NET環境。但其他這些語言都因有多年演化的遺留痕跡,并非一開始就用現在的技術來編寫,導致它們不能用于.NET環境。 本書將介紹C#編程技術,同時提供.NET體系結構工作原理的必要背景知識。我們不僅會介紹C#語言的基礎,還會給出使用各種相關技術的應用程序對應的示例,包括數據庫訪問、動態的Web頁面、高級的圖形和目錄訪問等。 Windows API自從1993年發布的Windows NT以來一直在演化和擴展,但自從2002年以來,.NET Framework對程序編寫方式進行了重大的修改,2012年又進行了一次很大的改動。每10年就會發生這種改變嗎?Windows 8現在提供了一種新的API:用于Windows Store應用程序的Windows運行庫(WinRT)。這個運行庫是一個本機API(類似于Windows API),它沒有把.NET運行庫作為其核心,但提供了基于.NET理念的非常好的新功能。Windows 8包含這個API的第一個版本,可用于現代模式的應用程序。盡管它不基于.NET,但仍可以將.NET的一個子集應用于Windows Store應用程序,用C#編寫該應用程序。這個新的運行庫在未來的幾年中會演化,隨Windows的未來版本一起發布。本書也討論了如何使用C#和WinRT編寫Windows Store應用程序。 .NET的優點 前面闡述了.NET的優點,但并沒有說它會使開發人員的工作更易完成。本節將簡要討論.NET的改進功能。 ● 面向對象編程:.NET Framework和C#從一開始就完全基于面向對象的原則。 ● 優秀的設計:一個基類庫,它以一種非常直觀的方式設計出來。 ● 語言無關性:在.NET中,Visual Baisc、C#和托管C++等語言都可以編譯為通用的中間語言(Intermediate Language)。這說明,語言可以用以前沒有的方式交互操作。 ● 對動態Web頁面更好的支持:雖然經典ASP具有很大的靈活性,但效率不是很高,這是因為它使用了解釋性的腳本語言,且缺乏面向對象的設計,從而導致ASP代碼比較混亂。.NET使用ASP.NET,為Web頁面提供了一種集成支持。使用ASP.NET,可以編譯頁面中的代碼,這些代碼還可以使用.NET能識別的高級語言來編寫,如C#或Visual Basic 2010。.NET現在還添加了對最新Web技術的重要支持,如Ajax和jQuery。 ● 高效的數據訪問:一組.NET組件,統稱為ADO.NET,提供了對關系數據庫和各種數據源的高效訪問。這些組件也可用于訪問文件系統和目錄。尤其是,.NET內置了XML支持,可以處理從非Windows平臺導入或導出的數據。 ● 代碼共享:.NET引入了程序集的概念,替代了傳統的DLL,可以完美無暇地改進代碼在應用程序之間的共享方式。程序集是解決版本沖突的正式設備,程序集的不同版本可以并存。 ● 增強的安全性:每個程序集還可以包含內置的安全信息,這些信息可以準確地指出誰或哪種類型的用戶或進程可以調用什么類的哪些方法。這樣就可以非常準確地控制用戶部署的程序集的使用方式。 ● 對安裝沒有任何影響:有兩種類型的程序集,分別是共享程序集和私有程序集。共享程序集是可用于所有軟件的公共庫,而私有程序集只用于特殊軟件。由于私有程序集完全自包含,所以安裝過程非常簡單。沒有注冊表項,只需要把相應的文件放在文件系統的相應文件夾中即可。 ● Web服務的支持:.NET完全集成了對開發Web服務的支持,用戶可以輕松地開發任何類型的應用程序。 ● Visual Studio 2012:.NET附帶了一個Visual Studio 2012開發環境,它同樣可以很好地利用C++、C#、Visual Basic 2012和ASP.NET或XML進行編碼。Visual Studio 2012集成了這個IDE所有以前版本中的各種語言專用環境中的所有最佳功能。 ● C#:是使用.NET的一種面向對象的強大且流行的語言。 第1章將詳細討論.NET體系結構的優點。 .NET Framework 4.5中的新增特性 .NET Framework的第1版(1.0版)在2002年發布,贏得了許多人的喝彩。.NET Framework 2.0在2005年發布,是該架構的一個主要版本。2.0版本的主要新特性是C#和運行庫中對泛型的支持(為泛型修改了IL代碼)、新類和接口。.NET 3.0以2.0運行庫為基礎,引入了創建UI的新方式(WPF和XAML,基于矢量的圖形替代了基于像素的圖形)和一個新的通信技術(WCF)。.NET 3.5和C# 3.0引入了LINQ,這是可用于所有數據源的查詢語法。.NET Framework 4是該產品的另一個重要的版本,也引入了運行庫的一個新版本4.0和C#的新版本4.0,提供了動態語言集成和大量用于并行編程的新庫。.NET Framework 4.5基于4.0運行庫的更新版本,包含了許多重要的新功能。 對于.NET Framework的每個版本,Microsoft總是試圖確保對已開發出的代碼進行盡可能少的不兼容的更改。到目前為止,Microsoft在這方面做得很成功。 下面將詳細描述C# 2012和.NET Framework 4.5中的一些新變化。 異步編程 阻塞UI對用戶并不友好,如果UI不響應,用戶就會不耐煩。也許讀者在Visual Studio中也有這種經歷。而Visual Studio在這方面好了許多,在許多情形下響應得更快。 .NET Framework總是提供方法的異步調用。但是,使用同步方法比調用其異步變體容易得多。這在C# 5.0版本中有了改變。異步編程與編寫同步程序一樣容易。新的C#關鍵字基于自從.NET 4.0以來就有的.NET并行庫,現在該語言提供了高效功能。 Windows Store應用程序和Windows運行庫 Windows Store應用程序可以使用C#、Windows運行庫和.NET Framework的一個子集編寫,Windows運行庫是一個新的本機API,提供了類似于.NET的類、方法、屬性和事件。使用語言投射功能,改善了.NET運行庫。在.NET 4.5中,.NET 4.0運行庫進行了就地更新。 數據訪問的改善 ADO.NET Entity Framework提供了重要的新功能。其版本從.NET 4.0的4.0改為.NET 4.5的5.0。.NET 4.0發布后,Entity Framework已經在4.1、4.2和4.3中接受了更新。現在新功能,例如Code First、空間類型、使用枚舉、表值功能等,都可以使用了。 WPF的改善 WPF進行了改進,以編寫Windows桌面應用程序。現在可以在非UI線程中填充集合,功能區控件現在是架構的一部分,通過事件的弱引用也更容易實現,數據驗證可以用INotifyDataErrorInfo接口異步完成;實時繪圖功能可以方便地動態排序、分組修改了的數據。 ASP.NET MVC Visual Studio 2010包含ASP.NET MVC 2.0。Visual Studio 2012發布后,就可以使用ASP.NET MVC 4.0了。ASP.NET MVC提供了許多開發人員期待的、使用模型-視圖-控制器來創建ASP.NET應用程序的方式。ASP.NET MVC在開發人員構建的應用程序中提供了可測試性、靈活性和可維護性。ASP.NET MVC不是ASP.NET Web窗體的替代品,而只是構建應用程序的另一種方式。 C#的優點 C#在某種程度上可以看作是.NET面向Windows環境的一種編程語言。在過去的15年中,Microsoft給Windows和 Windows API添加了許多功能,Visual Baisc 2010和C++也進行了許多擴展。雖然Visual Baisc和C++最終已成為非常強大的語言,但這兩種語言也存在問題,因為它們保留了原來的一些遺留內容。 對于Visual Basic 6及其早期版本,它的主要優點是很容易理解,許多編程工作都很容易完成,從很大程度上對開發人員隱藏了Windows API和COM組件結構的詳細信息。其缺點是因為Visual Basic從來沒有實現真正意義上的面向對象,所以大型應用程序很難分解和維護。另外,因為Visual Basic的語法繼承自BASIC的早期版本(BASIC主要是為了讓剛入門的程序員更容易理解,而不是為了編寫大型商業應用程序),所以不能真正成為結構良好或面向對象的編程語言。 另一方面,C++基于ANSI C++語言定義。它與ANSI不完全兼容,因為Microsoft在ANSI定義標準化之前編寫其C++編譯器,但它已經相當接近。但是,這導致了兩個問題。首先,ANSI C++是在十幾年前的技術條件下開發的,因此它不支持現在的概念(如Unicode字符串和生成XML文檔),某些古老的語法結構是為以前的編譯器設計的(如成員函數的聲明和定義是分開的)。其次,Microsoft同時還試圖把C++演變為一種用于在Windows上執行高性能任務的語言,為此不得不在語言中添加大量Microsoft專用的關鍵字和各種庫。其結果是在Windows上,該語言非常雜亂。讓C++開發人員描述字符串有多少種定義就可以證明這一點:char*、LPTSTR、string、CString(MFC版本)、CString(WTL版本)、wchar_t*、OLECHAR*等。 現在進入.NET時代—— 一種全新的環境,它對這兩種語言都進行了新的擴展。Microsoft給C++添加了許多Microsoft專用的關鍵字,并把Visual Baisc演變為Visual Baisc 2012,保留了一些基本的Visual Baisc語法,但在設計上完全不同于原始Visual Basic,從實際應用的角度來看,Visual Baisc 2012是一種新語言。 在這里,Microsoft決定給開發人員提供另一個選擇—— 專門用于.NET、具有新起點的一種語言,即C#。Microsoft在正式場合把C#描述為一種簡單、現代、面向對象、類型非常安全、派生自C和C++的編程語言。大多數獨立的評論員對C#的描述改為“派生自C、C++和Java”。這種描述在技術上非常準確,但沒有表達出該語言的真正優點。從語法上看,C#非常類似于C++和Java,許多關鍵字都相同,C#也使用類似于C++和Java的塊結構,并用花括號({})來標記代碼塊,用分號分隔各行語句。對C#代碼的第一印象是它非常類似于C++或Java代碼。但在這些表面的類似性后面,C#學習起來要比C++容易得多,但比Java難一些。其設計比其他語言更適合現代開發工具,它同時具有Visual Basic的易用性,以及C++的高性能、低級內存訪問。C#包括以下一些功能: ● 完全支持類和面向對象編程,包括接口和實現繼承、虛函數和運算符重載。 ● 一致且定義完善的基本類型集。 ● 對自動生成XML文檔的內置支持。 ● 自動清理動態分配的內存。 ● 可以用用戶定義的屬性來標記類或方法。這可以用于文檔,對編譯有一定的影響(例如,把方法標記為只在調試版本中編譯)。 ● 可以完全訪問.NET基類庫,并易于訪問Windows API(如果實際需要它,這就不常見)。 ● 可以使用指針和直接訪問內存,但C#語言可以在沒有它們的條件下訪問內存。 ● 以Visual Basic的風格支持屬性和事件。 ● 改變編譯器選項,可以把程序編譯為可執行文件或.NET組件庫,該組件庫可以用與ActiveX控件(COM組件)相同的方式由其他代碼調用。 ● C#可以用于編寫ASP.NET動態Web頁面和XML Web服務。 應該指出,對于上述大多數功能,Visual Basic 2012和Managed C++也具備。事實上,雖然C#從一開始就使用.NET,但對.NET功能的支持不僅更完整,而且在比其他語言更合適的語法環境中提供了這些功能。C#語言本身非常類似于Java,但其中有一些改進,尤其是,Java并不應用于.NET環境。 在結束這個主題前,還要指出C#的兩個局限性。一方面是該語言不適用于編寫時間急迫或性能非常高的代碼,例如一個要占用1000或1050個機器周期的循環,并在不需要這些資源時,立即清理它們。在這方面,C++可能仍是所有低級語言中的佼佼者。另一方面是C#缺乏性能極高的應用程序所需要的關鍵功能,包括能夠指定那些保證在代碼的特定地方運行的內聯函數和析構函數。但這類應用程序非常少。 編寫和運行C#代碼的環境 .NET Framework 4.5運行在Windows Vista/7/8和服務器操作系統Windows Server 2008、 2008 R2和2012上。要使用.NET編寫代碼,需要安裝.NET 4.5 SDK。 此外,除非要使用文本編輯器或其他第三方開發環境來編寫C#代碼,否則用戶幾乎肯定也希望使用Visual Studio 2012。運行托管代碼不需要安裝完整的SDK,但需要.NET運行庫。需要把.NET運行庫和代碼分布到還沒有安裝它的客戶端上。 本書內容 本書首先在第1章介紹.NET的整體體系結構,給出編寫托管代碼所需要的背景知識,此后本書分幾部分介紹C#語言及其在各個領域中的應用。 第Ⅰ部分—— C#語言 本部分給出C#語言的背景知識。盡管這一部分假定讀者是有經驗的編程人員,但它沒有假設讀者擁有任何特殊語言的知識。首先介紹 C#的基本語法和數據類型,再介紹C#的面向對象功能,之后是C#中的一些高級編程主題。 第Ⅱ部分—— Visual Studio 本部分介紹全世界C#開發人員都使用的主要IDE:Visual Studio 2012。本部分的兩章探討使用工具構建基于.NET Framework 4.5的應用程序的最佳方式,另外,本部分還討論項目的部署。 第Ⅲ部分—— 基礎 本部分介紹在.NET環境中編程的規則。特別是安全性、線程、本地化、事務、構建Windows服務的方式,以及將自己的庫生成為程序集的方式等主題。其中一部分介紹如何使用平臺調用和COM交互操作功能,與本地代碼和程序集進行交互操作。本部分還討論了Windows運行庫與.NET的區別,以及如何編寫Windows 8模式的程序。 第Ⅳ部分—— 數據 本部分介紹如何使用ADO.NET訪問數據庫,學習ADO.NET Entity Framework。我們可以使用核心ADO.NET獲得最佳性能,而使用ADO.NET Entity Framework可以方便地把對象映射到關系上。還討論了現在可以使用的Model First、Database First和Code First編程模型。我們還詳細說明.NET對XML的支持,以及如何使用LINQ查詢XML數據源。 第Ⅴ部分—— 顯示 本部分首先闡述如何編寫基于Windows Presentation Foundation的應用程序,介紹不同的控件類型、樣式、資源和數據綁定,以及如何創建固定的和流暢的文檔并打印出來。本部分還會介紹如何創建Windows Store應用程序,使用圖片生成更漂亮的UI、網格,以及與其他應用程序交互操作的協定。最后討論ASP.NET提供的許多新功能,用ASP.NET Web窗體創建Web站點、ASP.NET MVC和動態數據。 第Ⅵ部分——通信 這一部分介紹通信,主要論述獨立于平臺使用Windows Communication Foundation(WCF)進行通信的服務,以及使用WCF數據服務訪問數據。通過消息隊列,揭示了斷開連接的異步通信。本部分還介紹如何利用Windows Workflow Foundation(WF)和對等網絡。 如何下載本書的示例代碼 在讀者學習本書中的示例時,可以手工輸入所有的代碼,也可以使用本書附帶的源代碼文件。本書使用的所有源代碼都可以從本書合作站點http://www.wrox.com/和http://www.tupwk.com.cn/downpage上下載。登錄到站點http://www.wrox.com/上,使用Search工具或書名列表就可以找到本書。接著單擊本書細目頁面上的Download Code鏈接,就可以獲得所有的源代碼。 注釋: 許多圖書的書名都很相似,所以通過ISBN查找本書是最簡單的,本書的ISBN是978-1-118-31442-5。 在下載了代碼后,只需用自己喜歡的解壓縮軟件對它進行解壓縮即可。另外,也可以進入http://www.wrox.com/dynamic/books/download.aspx上的Wrox代碼下載主頁,查看本書和其他Wrox圖書的所有代碼。 勘誤表 盡管我們已經盡了各種努力來保證文章或代碼中不出現錯誤,但是錯誤總是難免的,如果你在本書中找到了錯誤,例如拼寫錯誤或代碼錯誤,請告訴我們,我們將非常感激。通過勘誤表,可以讓其他讀者避免受挫,當然,這還有助于提供更高質量的信息。 要在網站上找到本書的勘誤表,可以登錄http://www.wrox.com,通過Search工具或書名列表查找本書,然后在本書的細目頁面上,單擊Book Errata鏈接。在這個頁面上可以查看Wrox編輯已提交和粘貼的所有勘誤項。完整的圖書列表還包括每本書的勘誤表,網址是www.wrox.com/misc-pages/ booklist.shtml。 如果在Book Errata頁面上沒有看到你找出的錯誤,請進入www.worx.com/contact/techsupport.shtml,填寫表單,發電子郵件,我們就會檢查你的信息,如果是正確的,就在本書的勘誤表中粘貼一個消息,我們將在本書的后續版本中采用。 p2p.wrox.com P2P郵件列表是為作者和讀者之間的討論而建立的。讀者可以在p2p.wrox.com上加入P2P論壇。該論壇是一個基于Web的系統,用于傳送與Wrox圖書相關的信息和相關技術,與其他讀者和技術用戶交流。該論壇提供了訂閱功能,當論壇上有新帖子時,會給你發送你選擇的主題。Wrox作者、編輯和其他業界專家和讀者都會在這個論壇上進行討論。 在http://p2p.wrox.com上有許多不同的論壇,幫助讀者閱讀本書,在讀者開發自己的應用程序時,也可以從這個論壇中獲益。要加入這個論壇,必須執行下面的步驟: (1) 進入p2p.wrox.com,單擊Register鏈接。 (2) 閱讀其內容,單擊Agree按鈕。 (3) 提供加入論壇所需的信息及愿意提供的可選信息,單擊Submit按鈕。 (4) 然后就可以收到一封電子郵件,其中的信息描述了如何驗證賬戶,完成加入過程。 提示: 不加入P2P也可以閱讀論壇上的信息,但只有加入論壇后,才能發送自己的信息。 加入論壇后,就可以發送新信息,回應其他用戶的帖子。可以隨時在Web上閱讀信息。如果希望某個論壇給自己發送新信息,可以在論壇列表中單擊該論壇對應的Subscribe to this Forum圖標。 對于如何使用Wrox P2P的更多信息,可閱讀P2P FAQ,了解論壇軟件的工作原理,以及許多針對P2P和Wrox圖書的常見問題解答。要閱讀FAQ,可以單擊任意P2P頁面上的FAQ鏈接。
|
內容簡介:《C#高級編程(第8版)》是C# 2012和.NET 4.5高級技術的 終極資源,旨在幫助讀者更新、提高用C# 2012和.NET 4.5編 寫Windows應用程序、Web應用程序、Windows 8樣式應用程 序的技巧。本書的頂級作者專家團隊首先介紹了C#的基礎知 識,之后全面探討了該語言和架構中的新增功能,以及新的 測試驅動的開發和并發編程特性。本書提供了學習C# 2012 和.NET 4.5所需的所有知識,使讀者可以最大限度地發揮出這 些動態技術的潛能。 主要內容 ◆ 介紹富有挑戰性的.NET特性,包括LINQ、LINQ to Equities、LINQ to XML、WCF、WPF、Workflow和泛型 ◆ 詳細論述了異步編程、模式、基礎和方法 ◆ 研究了Windows 8開發的新選項和接口、WinRT和 Windows 8樣式應用程序 ◆ 闡述了文件和注冊表的操作 ◆ 介紹了WPF編程,包括樣式、數據驅動的應用程序和文 檔、ASP.NET Web Forms以及ASP.NET MVC |
目錄:第Ⅰ部分 C# 語 言 第1章 .NET體系結構 2 1.1 C#與.NET的關系 2 1.2 公共語言運行庫 3 1.2.1 平臺無關性 3 1.2.2 提高性能 3 1.2.3 語言的互操作性 4 1.3 中間語言 5 1.3.1 面向對象和接口的支持 6 1.3.2 不同的值類型和引用類型 6 1.3.3 強數據類型化 7 1.3.4 通過異常處理錯誤 11 1.3.5 特性的使用 12 1.4 程序集 12 1.4.1 私有程序集 13 1.4.2 共享程序集 13 1.4.3 反射 14 1.4.4 并行編程 14 1.4.5 異步編程 14 1.5 .NET Framework類 14 1.6 名稱空間 15 1.7 用C#創建.NET應用程序 16 1.7.1 創建ASP.NET應用程序 16 1.7.2 使用WPF 18 1.7.3 Windows 8應用程序 18 1.7.4 Windows服務 18 1.7.5 WCF 19 1.7.6 Windows WF 19 1.8 C#在.NET企業體系結構中 的作用 19 1.9 小結 20 第2章 核心C# 22 2.1 C#基礎 23 2.2 第一個C#程序 23 2.2.1 代碼 23 2.2.2 編譯并運行程序 23 2.2.3 詳細介紹 24 2.3 變量 26 2.3.1 變量的初始化 26 2.3.2 類型推斷 27 2.3.3 變量的作用域 28 2.3.4 常量 30 2.4 預定義數據類型 31 2.4.1 值類型和引用類型 31 2.4.2 CTS類型 32 2.4.3 預定義的值類型 33 2.4.4 預定義的引用類型 35 2.5 流控制 37 2.5.1 條件語句 37 2.5.2 循環 41 2.5.3 跳轉語句 44 2.6 枚舉 45 2.7 名稱空間 46 2.7.1 using語句 47 2.7.2 名稱空間的別名 48 2.8 Main()方法 49 2.8.1 多個Main()方法 49 2.8.2 給Main()方法傳遞參數 50 2.9 有關編譯C#文件的更多內容 51 2.10 控制臺I/O 53 2.11 使用注釋 54 2.11.1 源文件中的內部注釋 54 2.11.2 XML文檔 55 2.12 C#預處理器指令 57 2.12.1 #define和 #undef 57 2.12.2 #if、#elif、#else和#endif 58 2.12.3 #warning和 # error 59 2.12.4 #region和#endregion 59 2.12.5 #line 60 2.12.6 #pragma 60 2.13 C#編程規則 60 2.13.1 關于標識符的規則 60 2.13.2 用法約定 61 2.14 小結 67 第3章 對象和類型 68 3.1 創建及使用類 68 3.2 類和結構 69 3.3 類 69 3.3.1 數據成員 70 3.3.2 函數成員 70 3.3.3 只讀字段 82 3.4 匿名類型 83 3.5 結構 84 3.5.1 結構是值類型 85 3.5.2 結構和繼承 86 3.5.3 結構的構造函數 86 3.6 弱引用 86 3.7 部分類 88 3.8 靜態類 89 3.9 Object類 89 3.9.1 System.Object()方法 90 3.9.2 ToString()方法 91 3.10 擴展方法 92 3.11 小結 93 第4章 繼承 94 4.1 繼承 94 4.2 繼承的類型 94 4.2.1 實現繼承和接口繼承 94 4.2.2 多重繼承 95 4.2.3 結構和類 95 4.3 實現繼承 95 4.3.1 虛方法 96 4.3.2 隱藏方法 97 4.3.3 調用函數的基類版本 98 4.3.4 抽象類和抽象函數 99 4.3.5 密封類和密封方法 99 4.3.6 派生類的構造函數 100 4.4 修飾符 105 4.4.1 可見性修飾符 105 4.4.2 其他修飾符 106 4.5 接口 106 4.5.1 定義和實現接口 107 4.5.2 派生的接口 110 4.6 小結 112 第5章 泛型 113 5.1 泛型概述 113 5.1.1 性能 114 5.1.2 類型安全 115 5.1.3 二進制代碼的重用 115 5.1.4 代碼的擴展 116 5.1.5 命名約定 116 5.2 創建泛型類 116 5.3 泛型類的功能 120 5.3.1 默認值 121 5.3.2 約束 122 5.3.3 繼承 124 5.3.4 靜態成員 125 5.4 泛型接口 125 5.4.1 協變和抗變 126 5.4.2 泛型接口的協變 127 5.4.3 泛型接口的抗變 128 5.5 泛型結構 129 5.6 泛型方法 132 5.6.1 泛型方法示例 132 5.6.2 帶約束的泛型方法 133 5.6.3 帶委托的泛型方法 134 5.6.4 泛型方法規范 135 5.7 小結 136 第6章 數組 137 6.1 同一類型和不同類型的 多個對象 137 6.2 簡單數組 138 6.2.1 數組的聲明 138 6.2.2 數組的初始化 138 6.2.3 訪問數組元素 139 6.2.4 使用引用類型 140 6.3 多維數組 141 6.4 鋸齒數組 142 6.5 Array類 143 6.5.1 創建數組 143 6.5.2 復制數組 144 6.5.3 排序 145 6.6 數組作為參數 148 6.6.1 數組協變 149 6.6.2 ArraySegment 149 6.7 枚舉 150 6.7.1 IEnumerator接口 150 6.7.2 foreach語句 151 6.7.3 yield語句 151 6.8 元組 156 6.9 結構比較 157 6.10 小結 160 第7章 運算符和類型強制轉換 161 7.1 運算符和類型轉換 161 7.2 運算符 161 7.2.1 運算符的簡化操作 163 7.2.2 運算符的優先級 167 7.3 類型的安全性 168 7.3.1 類型轉換 168 7.3.2 裝箱和拆箱 172 7.4 比較對象的相等性 172 7.4.1 比較引用類型的相等性 172 7.4.2 比較值類型的相等性 173 7.5 運算符重載 174 7.5.1 運算符的工作方式 175 7.5.2 運算符重載的示例: Vector結構 176 7.6 用戶定義的類型強制轉換 182 7.6.1 實現用戶定義的類型 強制轉換 184 7.6.2 多重類型強制轉換 189 7.7 小結 193 第8章 委托、Lambda表達式 和事件 194 8.1 引用方法 194 8.2 委托 195 8.2.1 聲明委托 195 8.2.2 使用委托 196 8.2.3 簡單的委托示例 199 8.2.4 Action和Func 委托 201 8.2.5 BubbleSorter示例 202 8.2.6 多播委托 204 8.2.7 匿名方法 208 8.3 Lambda表達式 209 8.3.1 參數 209 8.3.2 多行代碼 210 8.3.3 閉包 210 8.3.4 使用foreach語句的閉包 211 8.4 事件 212 8.4.1 事件發布程序 212 8.4.2 事件偵聽器 214 8.4.3 弱事件 215 8.5 小結 219 第9章 字符串和正則表達式 220 9.1 System.String類 221 9.1.1 創建字符串 222 9.1.2 StringBuilder成員 225 9.1.3 格式字符串 226 9.2 正則表達式 231 9.2.1 正則表達式概述 231 9.2.2 RegularExpressionsPlayaround 示例 232 9.2.3 顯示結果 235 9.2.4 匹配、組合和捕獲 236 9.3 小結 238 第10章 集合 239 10.1 概述 239 10.2 集合接口和類型 240 10.3 列表 241 10.3.1 創建列表 242 10.3.2 只讀集合 251 10.4 隊列 251 10.5 棧 255 10.6 鏈表 256 10.7 有序列表 262 10.8 字典 263 10.8.1 鍵的類型 264 10.8.2 字典示例 265 10.8.3 Lookup類 269 10.8.4 有序字典 270 10.9 集 270 10.10 可觀察的集合 272 10.11 位數組 273 10.11.1 BitArray類 274 10.11.2 BitVector32結構 276 10.12 并發集合 278 10.12.1 創建管道 279 10.12.2 使用Blocking- Collection 282 10.12.3 使用Concurrent- Dictionary 283 10.12.4 完成管道 285 10.13 性能 286 10.14 小結 288 第11章 LINQ 289 11.1 LINQ概述 289 11.1.1 列表和實體 289 11.1.2 LINQ查詢 293 11.1.3 擴展方法 294 11.1.4 推遲查詢的執行 295 11.2 標準的查詢操作符 297 11.2.1 篩選 299 11.2.2 用索引篩選 299 11.2.3 類型篩選 300 11.2.4 復合的from子句 300 11.2.5 排序 301 11.2.6 分組 302 11.2.7 對嵌套的對象分組 303 11.2.8 內連接 304 11.2.9 左外連接 305 11.2.10 組連接 306 11.2.11 集合操作 309 11.2.12 合并 310 11.2.13 分區 311 11.2.14 聚合操作符 312 11.2.15 轉換操作符 314 11.2.16 生成操作符 315 11.3 并行LINQ 316 11.3.1 并行查詢 316 11.3.2 分區器 317 11.3.3 取消 317 11.4 表達式樹 318 11.5 LINQ提供程序 320 11.6 小結 321 第12章 動態語言擴展 322 12.1 DLR 322 12.2 dynamic類型 323 12.3 包含DLR ScriptRuntime 327 12.4 DynamicObject和 ExpandoObject 330 12.4.1 DynamicObject 330 12.4.2 ExpandoObject 332 12.5 小結 333 第13章 異步編程 334 13.1 異步編程的重要性 334 13.2 異步模式 335 13.2.1 同步調用 342 13.2.2 異步模式 343 13.2.3 基于事件的異步模式 344 13.2.4 基于任務的異步模式 345 13.3 異步編程的基礎 347 13.3.1 創建任務 347 13.3.2 調用異步方法 348 13.3.3 延續任務 348 13.3.4 同步上下文 349 13.3.5 使用多個異步方法 349 13.3.6 轉換異步模式 350 13.4 錯誤處理 351 13.4.1 異步方法的異常處理 352 13.4.2 多個異步方法的 異常處理 352 13.4.3 AggregateException類 353 13.5 取消 353 13.5.1 開始取消任務 354 13.5.2 使用框架特性取消任務 354 13.5.3 取消自定義任務 355 13.6 小結 355 第14章 內存管理和指針 356 14.1 內存管理 356 14.2 后臺內存管理 356 14.2.1 值數據類型 357 14.2.2 引用數據類型 358 14.2.3 垃圾回收 359 14.3 釋放非托管的資源 361 14.3.1 析構函數 361 14.3.2 IDisposable接口 362 14.3.3 實現IDisposable接口和 析構函數 363 14.4 不安全的代碼 365 14.4.1 用指針直接訪問內存 365 14.4.2 指針示例: PointerPlayground 374 14.4.3 使用指針優化性能 378 14.5 小結 381 第15章 反射 382 15.1 在運行期間處理和檢查代碼 382 15.2 自定義特性 383 15.2.1 編寫自定義特性 383 15.2.2 自定義特性示例: WhatsNewAttributes 386 15.3 反射 389 15.3.1 System.Type類 389 15.3.2 TypeView示例 392 15.3.3 Assembly類 393 15.3.4 完成WhatsNewAttributes 示例 395 15.4 小結 398 第16章 錯誤和異常 399 16.1 簡介 399 16.2 異常類 400 16.3 捕獲異常 401 16.3.1 實現多個catch塊 403 16.3.2 在其他代碼中捕獲異常 407 16.3.3 System.Exception屬性 407 16.3.4 沒有處理異常時所 發生的情況 408 16.3.5 嵌套的 try塊 408 16.4 用戶定義的異常類 410 16.4.1 捕獲用戶定義的異常 411 16.4.2 拋出用戶定義的異常 412 16.4.3 定義用戶定義的異常類 415 16.5 調用者信息 417 16.6 小結 418 第Ⅱ部分 Visual Studio 第17章 Visual Studio 2012 420 17.1 用Visual Studio 2012進行 工作 420 17.1.1 項目文件的改進 423 17.1.2 Visual Studio的版本 423 17.1.3 Visual Studio設置 424 17.2 創建項目 424 17.2.1 面向多個版本的 .NET Framework 425 17.2.2 選擇項目類型 427 17.3 瀏覽并編寫項目 430 17.3.1 Solution Explorer 430 17.3.2 用代碼編輯器進行工作 436 17.3.3 學習和理解其他窗口 438 17.3.4 排列窗口 442 17.4 構建項目 442 17.4.1 構建、編譯和生成 442 17.4.2 調試版本和發布版本 443 17.4.3 選擇配置 445 17.4.4 編輯配置 445 17.5 調試代碼 446 17.5.1 設置斷點 446 17.5.2 使用數據提示和調試器 可視化工具 447 17.5.3 監視和修改變量 448 17.5.4 異常 449 17.5.5 多線程 450 17.5.6 IntelliTrace 451 17.6 重構工具 451 17.7 體系結構工具 453 17.7.1 依賴項關系圖 453 17.7.2 層關系圖 454 17.8 分析應用程序 456 17.8.1 序列圖 456 17.8.2 探查器 457 17.8.3 Concurrency Visualizer 459 17.8.4 Code Analysis 459 17.8.5 Code Metrics 460 17.9 單元測試 461 17.9.1 創建單元測試 461 17.9.2 運行單元測試 462 17.9.3 預期異常 463 17.9.4 測試全部代碼路徑 463 17.9.5 外部依賴 464 17.9.6 Fakes Framework 467 17.10 Windows 8、WCF、WF等 468 17.10.1 使用Visual Studio 2012 生成WCF應用程序 468 17.10.2 使用Visual Studio 2012 生成WF應用程序 470 17.10.3 使用Visual Studio 2012 生成Windows Store 應用程序 470 17.11 小結 472 第18章 部署 473 18.1 部署是應用程序生命周期的 一部分 473 18.2 部署的規劃 473 18.2.1 部署選項 474 18.2.2 部署要求 474 18.2.3 部署.NET運行庫 475 18.3 傳統的部署選項 475 18.3.1 xcopy部署 476 18.3.2 xcopy和Web應用程序 476 18.3.3 Windows Installer 476 18.4 ClickOnce 477 18.4.1 ClickOnce操作 477 18.4.2 發布ClickOnce 應用程序 477 18.4.3 ClickOnce設置 479 18.4.4 ClickOnce文件的 應用程序緩存 481 18.4.5 應用程序的安裝 481 18.4.6 ClickOnce部署API 482 18.5 Web部署 483 18.5.1 Web應用程序 483 18.5.2 配置文件 483 18.5.3 創建Web Deploy包 484 18.6 Windows 8應用程序 485 18.6.1 創建應用程序包 486 18.6.2 Windows App Certification Kit 487 18.6.3 旁加載 487 18.6.4 Windows部署API 488 18.7 小結 490 第Ⅲ部分 基 礎 第19章 程序集 492 19.1 程序集的含義 492 19.1.1 程序集的功能 493 19.1.2 程序集的結構 493 19.1.3 程序集清單 494 19.1.4 名稱空間、程序集和 組件 494 19.1.5 私有程序集和共享 程序集 495 19.1.6 附屬程序集 495 19.1.7 查看程序集 495 19.2 構建程序集 496 19.2.1 創建模塊和程序集 496 19.2.2 程序集的特性 497 19.2.3 創建和動態加載程序集 499 19.3 應用程序域 502 19.4 共享程序集 506 19.4.1 強名 506 19.4.2 使用強名獲得完整性 507 19.4.3 全局程序集緩存 508 19.4.4 創建共享程序集 509 19.4.5 創建強名 509 19.4.6 安裝共享程序集 510 19.4.7 使用共享程序集 511 19.4.8 程序集的延遲簽名 512 19.4.9 引用 513 19.4.10 本機映像生成器 513 19.5 配置.NET應用程序 514 19.5.1 配置類別 515 19.5.2 綁定程序集 516 19.6 版本問題 517 19.6.1 版本號 517 19.6.2 通過編程方式獲取版本 518 19.6.3 綁定到程序集版本 518 19.6.4 發行者策略文件 519 19.6.5 運行庫的版本 521 19.7 在不同的技術之間共享 程序集 522 19.7.1 共享源代碼 522 19.7.2 可移植類庫 523 19.8 小結 524 第20章 診斷 525 20.1 診斷概述 525 20.2 代碼協定 526 20.2.1 前提條件 527 20.2.2 后置條件 528 20.2.3 不變量 529 20.2.4 純粹性 529 20.2.5 接口的協定 529 20.2.6 簡寫 531 20.2.7 協定和遺留代碼 531 20.3 跟蹤 532 20.3.1 跟蹤源 533 20.3.2 跟蹤開關 534 20.3.3 跟蹤偵聽器 535 20.3.4 篩選器 537 20.3.5 相關性 538 20.3.6 使用ETW進行跟蹤 541 20.4 事件日志 542 20.4.1 事件日志體系結構 542 20.4.2 事件日志類 544 20.4.3 創建事件源 545 20.4.4 寫入事件日志 546 20.4.5 資源文件 546 20.5 性能監視 550 20.5.1 性能監視類 550 20.5.2 性能計數器生成器 550 20.5.3 添加PerformanceCounter 組件 553 20.5.4 perfmon.exe 555 20.6 小結 556 第21章 任務、線程和同步 557 21.1 概述 557 21.2 Parallel類 558 21.2.1 用Parallel.For()方法 循環 559 21.2.2 使用Parallel.ForEach() 方法循環 562 21.2.3 通過Parallel.Invoke()方法 調用多個方法 563 21.3 任務 563 21.3.1 啟動任務 563 21.3.2 Future—— 任務的結果 566 21.3.3 連續的任務 567 21.3.4 任務層次結構 568 21.4 取消架構 568 21.4.1 Parallel.For()方法的取消 569 21.4.2 任務的取消 570 21.5 線程池 571 21.6 Thread類 573 21.6.1 給線程傳遞數據 574 21.6.2 后臺線程 575 21.6.3 線程的優先級 576 21.6.4 控制線程 576 21.7 線程問題 577 21.7.1 爭用條件 577 21.7.2 死鎖 579 21.8 同步 581 21.8.1 lock語句和線程安全 582 21.8.2 Interlocked類 587 21.8.3 Monitor類 588 21.8.4 SpinLock結構 589 21.8.5 WaitHandle基類 589 21.8.6 Mutex類 590 21.8.7 Semaphore類 591 21.8.8 Events類 593 21.8.9 Barrier類 596 21.8.10 ReaderWriterLockSlim 類 598 21.9 Timer類 601 21.10 數據流 602 21.10.1 使用動作塊 602 21.10.2 源和目標數據塊 603 21.10.3 連接塊 604 21.11 小結 606 第22章 安全性 608 22.1 概述 608 22.2 身份驗證和授權 609 22.2.1 標識和Principal 609 22.2.2 角色 610 22.2.3 聲明基于角色的安全性 611 22.2.4 聲稱 612 22.2.5 客戶端應用程序服務 613 22.3 加密 618 22.3.1 簽名 619 22.3.2 交換密鑰和安全傳輸 621 22.4 資源的訪問控制 624 22.5 代碼訪問安全性 627 22.5.1 第2級安全透明性 627 22.5.2 權限 628 22.6 使用證書發布代碼 632 22.7 小結 633 第23章 互操作 634 23.1 .NET和COM技術 634 23.1.1 元數據 635 23.1.2 釋放內存 635 23.1.3 接口 636 23.1.4 方法綁定 637 23.1.5 數據類型 637 23.1.6 注冊 638 23.1.7 線程 638 23.1.8 錯誤處理 640 23.1.9 事件 640 23.1.10 封送 640 23.2 在.NET客戶端中使用 COM組件 641 23.2.1 創建一個COM組件 641 23.2.2 創建運行庫可調用包裝 647 23.2.3 使用RCW 648 23.2.4 通過動態語言擴展使用 COM服務 649 23.2.5 線程問題 650 23.2.6 添加連接點 650 23.3 在COM客戶端中使用 .NET組件 652 23.3.1 COM可調用包裝 653 23.3.2 創建.NET組件 653 23.3.3 創建一個類型庫 654 23.3.4 COM互操作特性 656 23.3.5 COM注冊 658 23.3.6 創建COM客戶端 應用程序 659 23.3.7 添加連接點 660 23.3.8 使用sink對象創建 客戶端 661 23.3.9 平臺調用 663 23.4 小結 667 第24章 文件和注冊表操作 668 24.1 文件和注冊表 668 24.2 管理文件系統 669 24.2.1 表示文件和文件夾的 .NET類 670 24.2.2 Path類 672 24.2.3 FileProperties示例 672 24.3 移動、復制和刪除文件 677 24.3.1 FilePropertiesAndMovement 示例 677 24.3.2 FilePropertiesAndMovement 示例的代碼 678 24.4 讀寫文件 681 24.4.1 讀取文件 681 24.4.2 寫入文件 683 24.4.3 流 684 24.4.4 緩存的流 686 24.4.5 使用FileStream類讀寫 二進制文件 686 24.4.6 讀寫文本文件 691 24.5 映射內存的文件 697 24.6 讀取驅動器信息 698 24.7 文件的安全性 700 24.7.1 從文件中讀取ACL 700 24.7.2 從目錄中讀取ACL 701 24.7.3 添加和刪除文件中的 ACL項 703 24.8 讀寫注冊表 704 24.8.1 注冊表 705 24.8.2 .NET注冊表類 706 24.9 讀寫獨立存儲器 709 24.10 小結 713 第25章 事務處理 714 25.1 簡介 714 25.2 概述 715 25.2.1 事務處理階段 715 25.2.2 ACID屬性 716 25.3 數據庫和實體類 716 25.4 傳統的事務 718 25.4.1 ADO.NET事務 718 25.4.2 System.Enterprise- Services 719 25.5 System.Transactions 720 25.5.1 可提交的事務 722 25.5.2 事務處理的升級 724 25.5.3 依賴事務 726 25.5.4 環境事務 728 25.6 隔離級別 735 25.7 自定義資源管理器 736 25.8 文件系統事務 742 25.9 小結 746 第26章 網絡 747 26.1 網絡 747 26.2 WebClient類 748 26.2.1 下載文件 748 26.2.2 基本的WebClient示例 748 26.2.3 上傳文件 750 26.3 WebRequest類和 WebResponse類 750 26.3.1 身份驗證 752 26.3.2 使用代理 752 26.3.3 異步頁面請求 753 26.4 把輸出結果顯示為HTML 頁面 753 26.4.1 從應用程序中進行簡單的 Web瀏覽 754 26.4.2 啟動Internet Explorer 實例 755 26.4.3 給應用程序提供更多IE 類型的功能 756 26.4.4 使用WebBrowser 控件打印 761 26.4.5 顯示所請求頁面的代碼 761 26.4.6 WebRequest類和 WebResponse類的 層次結構 762 26.5 實用工具類 763 26.5.1 URI 763 26.5.2 IP地址和DNS名稱 764 26.6 較低層的協議 766 26.6.1 使用SmtpClient 767 26.6.2 使用TCP類 768 26.6.3 TcpSend和TcpReceive 示例 769 26.6.4 TCP和UDP 771 26.6.5 UDP類 771 26.6.6 Socket類 772 26.6.7 WebSocket 775 26.7 小結 779 第27章 Windows服務 780 27.1 Windows服務 780 27.2 Windows服務的體系結構 781 27.2.1 服務程序 782 27.2.2 服務控制程序 783 27.2.3 服務配置程序 783 27.2.4 Windows服務的類 783 27.3 創建Windows服務程序 783 27.3.1 創建服務的核心功能 784 27.3.2 QuoteClient示例 787 27.3.3 Windows服務程序 791 27.3.4 線程化和服務 795 27.3.5 服務的安裝 795 27.3.6 安裝程序 795 27.4 Windows服務的監控和 控制 799 27.4.1 MMC管理單元 800 27.4.2 net.exe實用程序 801 27.4.3 sc.exe實用程序 801 27.4.4 Visual Studio Server Explorer 801 27.4.5 編寫自定義 ServiceController類 801 27.5 故障排除和事件日志 809 27.6 小結 810 第28章 本地化 811 28.1 全球市場 811 28.2 System.Globalization 名稱空間 812 28.2.1 Unicode問題 812 28.2.2 區域性和區域 813 28.2.3 使用區域性 817 28.2.4 排序 823 28.3 資源 824 28.3.1 創建資源文件 824 28.3.2 資源文件生成器 825 28.3.3 ResourceWriter 825 28.3.4 使用資源文件 826 28.3.5 System.Resources 名稱空間 830 28.4 使用Visual Studio的Windows Forms本地化 831 28.4.1 通過編程方式修改 區域性 836 28.4.2 使用自定義資源消息 837 28.4.3 資源的自動回退 838 28.4.4 外包翻譯 838 28.5 ASP.NET Web Forms的 本地化 839 28.6 用WPF本地化 841 28.6.1 用于WPF的.NET資源 842 28.6.2 XAML資源字典 843 28.7 自定義資源讀取器 846 28.7.1 創建DatabaseResource- Reader類 847 28.7.2 創建DatabaseResource- Set類 848 28.7.3 創建DatabaseResource- Manager類 849 28.7.4 DatabaseResourceReader 的客戶端應用程序 850 28.8 創建自定義區域性 850 28.9 用Windows Store應用程序 進行本地化 852 28.9.1 使用資源 852 28.9.2 使用多語言應用程序 工具集進行本地化 853 28.10 小結 854 第29章 核心XAML 855 29.1 XAML的作用 855 29.2 概述 855 29.2.1 元素如何映射到.NET 對象上 856 29.2.2 使用自定義.NET類 857 29.2.3 把屬性用作特性 859 29.2.4 把屬性用作元素 859 29.2.5 基本的.NET類型 860 29.2.6 使用集合和XAML 860 29.2.7 用XAML代碼調用 構造函數 861 29.3 依賴屬性 861 29.3.1 創建依賴屬性 862 29.3.2 強制值回調 863 29.3.3 值變更回調和事件 864 29.3.4 事件的冒泡和隧道 864 29.4 附加屬性 867 29.5 標記擴展 870 29.6 創建自定義標記擴展 870 29.7 XAML定義的標記擴展 872 29.8 讀寫XAML 872 29.9 小結 873 第30章 Managed Extensibility Framework 874 30.1 概述 874 30.2 MEF的體系結構 875 30.2.1 使用屬性的MEF 876 30.2.2 基于約定的部件注冊 881 30.3 定義協定 883 30.4 導出部件 884 30.4.1 創建部件 884 30.4.2 導出屬性和方法 889 30.4.3 導出元數據 891 30.4.4 使用元數據進行 惰性加載 893 30.5 導入部件 894 30.5.1 導入連接 896 30.5.2 部件的惰性加載 898 30.5.3 用惰性實例化的部件 讀取元數據 898 30.6 容器和出口提供程序 901 30.7 類別 903 30.8 小結 905 第31章 Windows運行庫 906 31.1 概述 906 31.1.1 .NET與Windows運行庫 的比較 907 31.1.2 名稱空間 907 31.1.3 元數據 909 31.1.4 語言投射 910 31.1.5 Windows運行庫中 的類型 912 31.2 Windows運行庫組件 913 31.2.1 集合 913 31.2.2 流 914 31.2.3 委托與事件 915 31.2.4 異步操作 915 31.3 Windows 8應用程序 916 31.4 Windows 8應用程序的 生命周期 918 31.4.1 Windows 8應用程序的 執行狀態 919 31.4.2 SuspensionManager 920 31.4.3 導航狀態 921 31.4.4 測試暫停 922 31.4.5 頁面狀態 922 31.5 Windows 8應用程序的設置 924 31.6 攝像頭功能 926 31.7 小結 928 第Ⅳ部分 數 據 第32章 核心ADO.NET 930 32.1 ADO.NET概述 930 32.1.1 名稱空間 931 32.1.2 共享類 932 32.1.3 數據庫專用類 932 32.2 使用數據庫連接 933 32.2.1 管理連接字符串 934 32.2.2 高效地使用連接 935 32.2.3 事務 937 32.3 命令 938 32.3.1 執行命令 939 32.3.2 調用存儲過程 942 32.4 快速數據訪問:數據讀取器 944 32.5 異步數據訪問:使用Task和 await 947 32.6 管理數據和關系: DataSet類 949 32.6.1 數據表 949 32.6.2 數據列 950 32.6.3 數據關系 955 32.6.4 數據約束 956 32.7 XML架構:用XSD 生成代碼 959 32.8 填充DataSet類 965 32.8.1 用數據適配器填充 DataSet 965 32.8.2 從XML中填充 DataSet類 967 32.9 持久化DataSet類的修改 967 32.9.1 通過數據適配器 進行更新 967 32.9.2 寫入XML輸出結果 969 32.10 使用ADO.NET 971 32.10.1 分層開發 971 32.10.2 生成SQL Server的鍵 972 32.10.3 命名約定 974 32.11 小結 976 第33章 ADO.NET Entity Framework 977 33.1 用Entity Framework編程 977 33.2 Entity Framework映射 979 33.2.1 邏輯層 979 33.2.2 概念層 981 33.2.3 映射層 983 33.2.4 連接字符串 983 33.3 實體 984 33.4 對象上下文 988 33.5 關系 990 33.5.1 一個層次結構一個表 990 33.5.2 一種類型一個表 992 33.5.3 懶惰加載、延遲加載和 預先加載 993 33.6 查詢數據 994 33.6.1 Entity SQL 994 33.6.2 對象查詢 995 33.6.3 LINQ to Entities 998 33.7 把數據寫入數據庫 999 33.7.1 對象跟蹤 999 33.7.2 改變信息 1000 33.7.3 附加和分離實體 1001 33.7.4 存儲實體的變化 1002 33.8 使用POCO對象 1003 33.8.1 定義實體類型 1003 33.8.2 創建數據上下文 1004 33.8.3 查詢和更新 1004 33.9 使用Code First編程模型 1005 33.9.1 定義實體類型 1005 33.9.2 創建數據上下文 1006 33.9.3 創建數據庫,存儲實體 1006 33.9.4 數據庫 1007 33.9.5 查詢數據 1007 33.9.6 定制數據庫的生成 1008 33.10 小結 1009 第34章 處理XML 1010 34.1 XML 1010 34.2 .NET支持的XML標準 1011 34.3 System.Xml名稱空間 1011 34.4 使用System.Xml類 1012 34.5 讀寫流格式的XML 1013 34.5.1 使用 XmlReader類 1013 34.5.2 使用XmlReader類 進行驗證 1017 34.5.3 使用XmlWriter類 1019 34.6 在.NET中使用DOM 1020 34.7 使用XPathNavigator類 1025 34.7.1 System.Xml.XPath 名稱空間 1025 34.7.2 System.Xml.Xsl 名稱空間 1030 34.7.3 調試XSLT 1034 34.8 XML和ADO.NET 1036 34.8.1 將ADO.NET數據轉換為 XML文檔 1036 34.8.2 把XML文檔轉換為 ADO.NET數據 1042 34.9 在XML中序列化對象 1044 34.10 LINQ to XML和.NET 1053 34.11 使用不同的XML對象 1053 34.11.1 XDocument對象 1053 34.11.2 XElement對象 1054 34.11.3 XNamespace對象 1055 34.11.4 XComment對象 1057 34.11.5 XAttribute對象 1058 34.12 使用LINQ查詢XML 文檔 1059 34.12.1 查詢靜態的XML 文檔 1059 34.12.2 查詢動態的XML 文檔 1060 34.13 XML文檔的更多 查詢技術 1062 34.13.1 讀取XML文檔 1062 34.13.2 寫入XML文檔 1063 34.14 小結 1065 第Ⅴ部分 顯 示 第35章 核心WPF 1068 35.1 理解WPF 1069 35.1.1 名稱空間 1069 35.1.2 類層次結構 1070 35.2 形狀 1072 35.3 幾何圖形 1073 35.4 變換 1075 35.5 畫筆 1077 35.5.1 SolidColorBrush 1077 35.5.2 LinearGradientBrush 1077 35.5.3 RadialGradientBrush 1078 35.5.4 DrawingBrush 1078 35.5.5 ImageBrush 1079 35.5.6 VisualBrush 1079 35.6 控件 1081 35.6.1 簡單控件 1081 35.6.2 內容控件 1081 35.6.3 帶標題的內容控件 1083 35.6.4 項控件 1084 35.6.5 帶標題的項控件 1084 35.6.6 修飾 1085 35.7 布局 1086 35.7.1 StackPanel 1086 35.7.2 WrapPanel 1086 35.7.3 Canvas 1087 35.7.4 DockPanel 1088 35.7.5 Grid 1089 35.8 樣式和資源 1090 35.8.1 樣式 1090 35.8.2 資源 1092 35.8.3 系統資源 1093 35.8.4 從代碼中訪問資源 1093 35.8.5 動態資源 1094 35.8.6 資源字典 1095 35.9 觸發器 1096 35.9.1 屬性觸發器 1096 35.9.2 多觸發器 1098 35.9.3 數據觸發器 1098 35.10 模板 1100 35.10.1 控件模板 1100 35.10.2 數據模板 1103 35.10.3 樣式化列表框 1105 35.10.4 ItemTemplate 1106 35.10.5 列表框元素的 控件模板 1107 35.11 動畫 1108 35.11.1 時間軸 1109 35.11.2 非線性動畫 1112 35.11.3 事件觸發器 1112 35.11.4 關鍵幀動畫 1115 35.12 可見狀態管理器 1116 35.12.1 可見的狀態 1117 35.12.2 變換 1118 35.13 3-D 1119 35.13.1 模型 1120 35.13.2 照相機 1121 35.13.3 光線 1122 35.13.4 旋轉 1122 35.14 小結 1123 第36章 用WPF編寫業務 應用程序 1124 36.1 概述 1124 36.2 菜單和功能區控件 1125 36.2.1 菜單控件 1125 36.2.2 功能區控件 1126 36.3 Commanding 1128 36.3.1 定義命令 1129 36.3.2 定義命令源 1130 36.3.3 命令綁定 1130 36.4 數據綁定 1131 36.4.1 BooksDemo應用程序 內容 1132 36.4.2 用XAML綁定 1133 36.4.3 簡單對象的綁定 1135 36.4.4 更改通知 1137 36.4.5 對象數據提供程序 1140 36.4.6 列表綁定 1142 36.4.7 主從綁定 1145 36.4.8 多綁定 1145 36.4.9 優先綁定 1147 36.4.10 值的轉換 1149 36.4.11 動態添加列表項 1150 36.4.12 動態添加選項卡中的 項 1151 36.4.13 數據模板選擇器 1152 36.4.14 綁定到XML上 1154 36.4.15 綁定的驗證 1156 36.5 TreeView 1164 36.6 DataGrid 1168 36.6.1 自定義列 1170 36.6.2 行的細節 1171 36.6.3 用DataGrid進行分組 1171 36.6.4 實時成型 1174 36.7 小結 1180 第37章 用WPF創建文檔 1181 37.1 簡介 1181 37.2 文本元素 1182 37.2.1 字體 1182 37.2.2 TextEffect 1183 37.2.3 內聯 1184 37.2.4 塊 1186 37.2.5 列表 1188 37.2.6 表 1188 37.2.7 塊的錨定 1189 37.3 流文檔 1191 37.4 固定文檔 1195 37.5 XPS文檔 1199 37.6 打印 1200 37.6.1 用PrintDialog打印 1201 37.6.2 打印可見元素 1201 37.7 小結 1203 第38章 Windows 8應用程序 1204 38.1 概述 1204 38.2 Windows 8的現代UI設計 1204 38.2.1 內容,不是chrome 設計 1205 38.2.2 快速流暢 1206 38.2.3 可讀性 1206 38.3 示例應用程序的核心功能 1206 38.3.1 文件和目錄 1207 38.3.2 應用程序數據 1208 38.3.3 應用程序頁面 1213 38.4 應用程序工具欄 1218 38.5 啟動與導航 1219 38.6 布局的變化 1222 38.7 存儲 1225 38.7.1 定義數據協定 1226 38.7.2 寫入移動數據 1227 38.7.3 讀取數據 1229 38.7.4 寫入圖像 1230 38.7.5 讀取圖像 1232 38.8 選擇器 1233 38.9 共享協定 1234 38.9.1 共享源 1234 38.9.2 共享目標 1237 38.10 Tile 1239 38.11 小結 1241 第39章 核心ASP.NET 1242 39.1 用于Web應用程序的.NET Framework 1242 39.1.1 ASP.NET Web Forms 1243 39.1.2 ASP.NET Web Pages 1243 39.1.3 ASP.NET MVC 1244 39.2 Web技術 1244 39.2.1 HTML 1244 39.2.2 CSS 1245 39.2.3 JavaScript和jQuery 1245 39.3 托管和配置 1246 39.4 處理程序和模塊 1248 39.4.1 創建自定義處理程序 1249 39.4.2 ASP.NET處理程序 1250 39.4.3 創建自定義模塊 1251 39.4.4 通用模塊 1253 39.5 全局的應用程序類 1254 39.6 請求和響應 1254 39.6.1 使用HttpRequest對象 1255 39.6.2 使用HttpResponse 對象 1256 39.7 狀態管理 1256 39.7.1 視圖狀態 1257 39.7.2 cookie 1258 39.7.3 會話 1259 39.7.4 應用程序狀態 1261 39.7.5 緩存 1262 39.7.6 配置文件 1263 39.8 成員和角色 1267 39.8.1 配置成員 1267 39.8.2 使用成員API 1269 39.8.3 啟用角色API 1270 39.9 小結 1270 第40章 ASP.NET Web Forms 1271 40.1 概述 1271 40.2 ASPX頁面模型 1272 40.2.1 添加控件 1272 40.2.2 使用事件 1273 40.2.3 使用回送 1274 40.2.4 使用自動回送 1275 40.2.5 回送到其他頁面 1275 40.2.6 定義強類型化的 跨頁面回送 1276 40.2.7 使用頁面事件 1277 40.2.8 ASPX代碼 1278 40.2.9 服務器端控件 1280 40.3 母版頁 1281 40.3.1 創建母版頁 1281 40.3.2 使用母版頁 1283 40.3.3 在內容頁中定義 母版頁內容 1284 40.4 導航 1285 40.4.1 站點地圖 1286 40.4.2 Menu控件 1286 40.4.3 菜單路徑 1287 40.5 驗證用戶輸入 1287 40.5.1 使用驗證控件 1287 40.5.2 使用驗證摘要 1289 40.5.3 驗證組 1289 40.6 訪問數據 1290 40.6.1 使用Entity Framework 1291 40.6.2 使用Entity Data Source 1291 40.6.3 排序和編輯 1293 40.6.4 定制列 1294 40.6.5 在網格中使用模板 1295 40.6.6 定制對象上下文的 創建過程 1297 40.6.7 對象數據源 1298 40.7 安全性 1299 40.7.1 啟用表單身份驗證 1299 40.7.2 登錄控件 1300 40.8 Ajax 1301 40.8.1 ASP.NET AJAX的 概念 1302 40.8.2 ASP.NET AJAX 網站示例 1305 40.8.3 支持ASP.NET AJAX 的網站配置 1308 40.8.4 添加ASP.NET AJAX 功能 1308 40.9 小結 1315 第41章 ASP.NET MVC 1316 41.1 ASP.NET MVC概述 1316 41.2 定義路由 1318 41.2.1 添加路由 1319 41.2.2 路由約束 1319 41.3 創建控制器 1320 41.3.1 動作方法 1321 41.3.2 參數 1321 41.3.3 返回數據 1322 41.4 創建視圖 1323 41.4.1 向視圖傳遞數據 1325 41.4.2 Razor語法 1325 41.4.3 強類型視圖 1326 41.4.4 布局 1327 41.4.5 部分視圖 1330 41.5 從客戶端提交數據 1334 41.5.1 模型綁定器 1335 41.5.2 注釋和驗證 1337 41.6 HTML Helper 1338 41.6.1 簡單的Helper 1338 41.6.2 使用模型數據 1339 41.6.3 定義HTML特性 1340 41.6.4 創建列表 1340 41.6.5 強類型化的Helper 1341 41.6.6 編輯器擴展 1342 41.6.7 創建自定義Helper 1342 41.6.8 模板 1343 41.7 創建數據驅動的應用程序 1344 41.7.1 定義模型 1344 41.7.2 創建控制器和視圖 1345 41.8 動作過濾器 1350 41.9 身份驗證和授權 1352 41.9.1 登錄模型 1352 41.9.2 登錄控制器 1352 41.9.3 登錄視圖 1354 41.10 ASP.NET Web API 1355 41.10.1 使用Entity Framework Code-First進行 數據訪問 1355 41.10.2 為ASP.NET Web API 定義路由 1357 41.10.3 控制器實現 1357 41.10.4 使用jQuery的客戶端 應用程序 1358 41.11 小結 1360 第42章 ASP.NET動態數據 1361 42.1 概述 1361 42.2 創建動態數據Web 應用程序 1362 42.2.1 配置Scaffolding 1363 42.2.2 查看結果 1364 42.3 定制動態數據網站 1366 42.3.1 控制框架 1367 42.3.2 定制模板 1368 42.3.3 配置路由 1373 42.4 小結 1374 第Ⅵ部分 通 信 第43章 WCF 1376 43.1 WCF概述 1376 43.1.1 SOAP 1378 43.1.2 WSDL 1378 43.1.3 REST 1379 43.1.4 JSON 1379 43.2 創建簡單的服務和客戶端 1379 43.2.1 定義服務和數據協定 1380 43.2.2 數據訪問 1382 43.2.3 服務的實現 1383 43.2.4 WCF服務宿主和WCF 測試客戶端 1384 43.2.5 自定義服務宿主 1386 43.2.6 WCF客戶端 1388 43.2.7 診斷 1390 43.2.8 與客戶端共享協定 程序集 1392 43.3 協定 1393 43.3.1 數據協定 1394 43.3.2 版本問題 1394 43.3.3 服務協定 1395 43.3.4 消息協定 1396 43.3.5 錯誤協定 1396 43.4 服務的行為 1398 43.5 綁定 1401 43.5.1 標準的綁定 1401 43.5.2 標準綁定的特性 1402 43.5.3 Web套接字 1404 43.6 宿主 1407 43.6.1 自定義宿主 1407 43.6.2 WAS宿主 1408 43.6.3 預配置的宿主類 1408 43.7 客戶端 1410 43.7.1 使用元數據 1410 43.7.2 共享類型 1411 43.8 雙工通信 1411 43.8.1 雙工通信的協定 1412 43.8.2 雙工通信的服務 1412 43.8.3 雙工通信的客戶端 應用程序 1413 43.9 路由 1414 43.9.1 示例應用程序 1415 43.9.2 路由接口 1416 43.9.3 WCF路由服務 1416 43.9.4 為失敗使用路由器 1417 43.9.5 改變協定的橋梁 1418 43.9.6 過濾器的類型 1419 43.10 小結 1419 第44章 WCF數據服務 1420 44.1 概述 1420 44.2 包含CLR對象的 自定義宿主 1421 44.2.1 CLR對象 1422 44.2.2 數據模型 1424 44.2.3 數據服務 1424 44.2.4 駐留服務 1425 44.2.5 其他服務操作 1426 44.3 HTTP客戶端應用程序 1426 44.4 使用WCF數據服務和 ADO.NET Entity Framework 1431 44.4.1 ASP.NET宿主和EDM 1432 44.4.2 使用WCF數據服務 客戶庫 1433 44.5 小結 1441 第45章 Windows WF 4 1442 45.1 工作流概述 1442 45.2 Hello World示例 1443 45.3 活動 1444 45.3.1 If活動 1445 45.3.2 InvokeMethod活動 1446 45.3.3 Parallel活動 1446 45.3.4 Delay活動 1447 45.3.5 Pick活動 1447 45.4 自定義活動 1448 45.4.1 活動的驗證 1449 45.4.2 設計器 1450 45.4.3 自定義復合活動 1452 45.5 工作流 1454 45.5.1 實參和變量 1455 45.5.2 WorkflowApplication 1455 45.5.3 存放WCF工作流 1459 45.5.4 工作流的版本 1463 45.5.5 駐留設計器 1464 45.6 小結 1468 第46章 對等網絡 1469 46.1 P2P網絡概述 1469 46.1.1 客戶端-服務器 體系結構 1469 46.1.2 P2P體系結構 1470 46.1.3 P2P體系結構的挑戰 1471 46.1.4 P2P術語 1472 46.1.5 P2P解決方案 1472 46.2 PNRP 1472 46.3 構建P2P應用程序 1475 46.4 小結 1481 第47章 消息隊列 1482 47.1 概述 1482 47.1.1 使用消息隊列的場合 1483 47.1.2 消息隊列功能 1484 47.2 Message Queuing產品 1485 47.3 消息隊列體系結構 1486 47.3.1 消息 1486 47.3.2 消息隊列 1486 47.4 Message Queuing管理工具 1487 47.4.1 創建消息隊列 1487 47.4.2 消息隊列屬性 1488 47.5 消息隊列的編程實現 1489 47.5.1 創建消息隊列 1489 47.5.2 查找隊列 1490 47.5.3 打開已知隊列 1490 47.5.4 發送消息 1492 47.5.5 接收消息 1494 47.6 課程訂單應用程序 1496 47.6.1 課程訂單類庫 1496 47.6.2 課程訂單消息發送 程序 1499 47.6.3 發送優先級和可恢復 的消息 1501 47.6.4 課程訂單消息接收 應用程序 1502 47.7 接收結果 1508 47.7.1 確認隊列 1508 47.7.2 響應隊列 1509 47.8 事務隊列 1509 47.9 消息隊列和WCF 1510 47.9.1 帶數據協定的實體類 1511 47.9.2 WCF服務協定 1512 47.9.3 WCF消息接收 應用程序 1513 47.9.4 WCF消息發送 應用程序 1515 47.10 消息隊列的安裝 1517 47.11 小結 1517
|
序: |