第1章 .NET簡介
1.1 什麼是.NET
1.1.1 微軟軟件開發平颱
1.1.2 一組規範
1.1.3 .NET概覽
1.2 發展曆程
1.2.1 過去
1.2.2 現在
1.2.3 未來
1.3 微軟和Windows以外的.NET
1.3.1 ECMA組織與.NET
1.3.2 W3C聯盟
1.3.3 Mono項目
1.3.4 微軟SSCLI項目
1.4 .NET資源鏈接
1.4.1 網站
1.4.2 新聞組
1.4.3 博客
第一部分 .NET平颱
第2章 程序集、模塊和IL語言
2.1 程序集、模塊和資源文件
2.1.1 程序集和模塊
2.1.2 資源文件
2.1.3 程序集、模塊、類型和資源
2.1.4 為何對多模塊程序集感興趣
2.1.5 ILMerge工具
2.2 模塊的剖析
2.2.1 可移植的可執行文件簡介
2.2.2 模塊的結構
2.2.3 清單的結構
2.2.4 類型元數據段的結構
2.3 使用ildasm.exe和Reflector工具分析程序集
2.3.1 創建需要分析的程序集
2.3.2 使用ildasm.exe分析模塊
2.3.3 Reflector工具
2.4 程序集attribute和版本設定
2.4.1 程序集的標準attribute
2.4.2 程序集的版本設定
2.4.3 友元程序集
2.5 強名稱程序集
2.5.1 簡介
2.5.2 sn.exe工具
2.5.3 公鑰記號
2.5.4 為程序集簽名
2.5.5 具體示例
2.5.6 程序集的延遲簽名
2.6 國際化/本地化與衛星程序集
2.6.1 區域設置和本地化
2.6.2 資源文件
2.6.3 在代碼中使用資源
2.6.4 創建衛星程序集
2.6.5 部署和使用衛星程序集
2.6.6 避免在資源無法找到時引發異常
2.6.7 Visual Studio與衛星程序集
2.6.8 區域設置與字符串格式化
2.7 IL語言簡介
2.7.1 棧及其特殊的IL指令
2.7.2 示例1:局部變量與棧
2.7.3 示例2:方法調用與棧
2.7.4 用於比較、分支和跳轉的IL指令
2.7.5 IL的麵嚮對象特性
2.7.6 元數據符號
第3章 生成、部署以及配置.NET應用程序
3.1 用MSBuild生成應用程序
3.2 MSBuild:目標、任務、屬性、項與條件
3.2.1 .proj文件、目標與任務
3.2.2 屬性
3.2.3 項
3.2.4 條件
3.3 高級 MSBuild
3.3.1 增量生成與目標間的依賴
3.3.2 MSBuild轉換
3.3.3 將一個MSBuild項目分解到多個文件
3.3.4 Visual Studio 2005如何利用MSBuild
3.3.5 創建自定義MSBuild任務
3.4 配置文件
3.4.1 machine.config文件
3.4.2 標準配置參數
3.4.3 使用 appSettings 元素定義配置參數
3.4.4 使用配置節定義配置參數
3.4.5 使用Visual Studio 2005創建配置節
3.4.6 配置節的注意事項
3.5 程序集部署:XCopy與GAC
3.5.1 XCopy部署
3.5.2 共享程序集與GAC文件夾
3.5.3 GAC的並存存儲模型是如何解決DLL hell問題的
3.5.4 並存執行
3.5.5 查看及編輯GAC文件夾
3.6 發布者策略程序集
3.6.1 潛在的問題
3.6.2 解決方案
3.6.3 創建發布者策略程序集
3.7 .NET應用程序部署簡介
3.7.1 MSI、cab、XCopy、ClickOnce 和NTD之間的對比
3.7.2 MSI與ClickOnce的對比
3.8 使用cab文件部署應用程序
3.9 使用MSI技術部署應用程序
3.9.1 添加文件
3.9.2 安裝快捷方式
3.9.3 在GAC文件夾中添加一個共享程序集
3.9.4 安裝項目屬性
3.9.5 更新注冊錶
3.9.6 指定在安裝期間執行的自定義動作
3.9.7 為安裝提供一個自定義用戶界麵
3.10 使用ClickOnce技術部署應用程序
3.10.1 部署文件夾
3.10.2 為ClickOnce部署做準備
3.10.3 ClickOnce部署與移動代碼安全
3.10.4 按需安裝與下載組
3.10.5 更新一個使用ClickOnce安裝的應用程序
3.10.6 應用程序所需的CAS權限集的工作機製
3.10.7 ClickOnce應用程序安裝與執行的細節
3.11 使用無接觸部署(NTD)技術部署應用程序
3.12 如果目標機器上沒有安裝.NET運行庫怎麼辦
第4章 CLR
4.1 應用程序域
4.1.1 簡介
4.1.2 綫程與AppDomain
4.1.3 卸載AppDomain
4.1.4 AppDomain和孤立性
4.1.5 System.AppDomain類
4.1.6 在一個進程中承載多個應用程序
4.1.7 在其他AppDomain的上下文中運行代碼
4.1.8 AppDomain類的事件
4.1.9 在同一個進程的AppDomain之間共享信息
4.2 在Windows進程內通過運行庫宿主加載CLR
4.2.1 mscorsvr.dll和mscorwks.dll
4.2.2 mscorlib.dll程序集
4.2.3 運行庫宿主介紹
4.2.4 在同一颱計算機上承載多個版本的CLR
4.2.5 使用CorBindToRuntimeExO函數加載CLR
4.2.6 創建一個自定義的運行庫宿主
4.2.7 在自定義運行庫宿主中調整CLR
4.2.8 SQL Server 2005運行庫宿主的特性
4.3 剖析.NET應用程序的執行狀況
4.4 定位和加載程序集
4.4.1 CLR何時嘗試定位程序集
4.4.2 CLR使用的定位算法
4.4.3 配置文件的 assemblyBinding 元素
4.4.4 定位算法示意圖
4.4.5 影子復製機製
4.5 運行庫類型解析
4.5.1 顯式或隱式加載程序集
4.5.2 編譯時引用程序集
4.5.3 示例
4.5.4 類型解析算法示意圖
4.6 JIT(即時)編譯
4.6.1 可移植的二進製代碼
4.6.2 即時編譯技術簡介
4.6.3 ngen.exe工具
4.6.4 性能計數器與JIT編譯
4.7 垃圾收集器和托管堆
4.7.1 垃圾收集技術簡介
4.7.2 垃圾收集算法遇到的問題
4.7.3 .NET的GC
4.7.4 第一步:尋找根對象
4.7.5 第二步:建立活動對象樹
4.7.6 第三步:解除分配非活動對象
4.7.7 第四步:清理堆碎片
4.7.8 第五步:重新計算托管引用所使用的物理地址
4.7.9 推薦做法
4.7.10 針對大對象的特殊堆
4.7.11 多綫程環境下的垃圾收集
4.7.12 弱引用
4.7.13 使用System.GC類影響GC的行為
4.8 提高代碼可靠性的機製
4.8.1 異步異常及托管代碼可靠性
4.8.2 受約束執行區域
4.8.3 如何定義CER
4.8.4 內存門
4.8.5 可靠性契約
4.8.6 關鍵終結器
4.8.7 臨界區
4.9 CLI和CLS
4.9.1 .NET語言必須滿足的要求
4.9.2 從開發人員的觀點看CLI和CLS
第5章 進程、綫程與同步
5.1 簡介
5.2 進程
5.2.1 簡介
5.2.2 System.Diagnostics.Process類
5.2.3 創建和銷毀子進程
5.2.4 避免在一颱機器上同時運行同一應用程序的多個實例
5.2.5 終止當前進程
5.3 綫程
5.3.1 簡介
5.3.2 受托管的綫程與Windows綫程
5.3.3 搶占式多任務處理
5.3.4 進程與綫程的優先級
5.3.5 System.Threading.Thread類
5.3.6 創建與聯結綫程
5.3.7 掛起綫程
5.3.8 終止綫程
5.3.9 前颱綫程與後颱綫程
5.3.10 受托管綫程的狀態圖
5.4 訪問資源同步簡介
5.4.1 競態條件
5.4.2 死鎖
5.5 使用volatile字段與Interlocked類實現同步
5.5.1 volatile字段
5.5.2 System.Threading.Inter-locked類
5.5.3 Interlocked類提供的其他功能
5.6 使用System.Threading.Monitor類與C#的lock關鍵字實現同步
5.6.1 EnterO方法和ExitO方法
5.6.2 C#的lock關鍵字
5.6.3 SyncRoot模式
5.6.4 綫程安全類
5.6.5 Monitor.TryEnterO方法
5.6.6 Monitor類的WaitO方法、PulseO方法以及PulseAllO方法
5.7 使用Win32對象同步:互斥體、事件與信號量
5.7.1 共享Win32同步對象
5.7.2 互斥體
5.7.3 事件
5.7.4 信號量
5.8 利用System.Threading.Reader-WriterLock類實現同步 113
5.9 利用System.Runtime.Remoting.Contexts.SynchronizationAttr-ibute實現同步
5.9.1 同步域簡介
5.9.2 System.Runtime.Remoting.Contexts.Synchronization與同步域
5.9.3 重入與同步域
5.9.4 另一個名為Synchronization 的attribute
5.10 CLR的綫程池
5.10.1 簡介
5.10.2 使用綫程池
5.11 定時器
5.11.1 System.Timers.Timer類
5.11.2 System.Threading.Timer類
5.11.3 System.Windows.Forms.Timer類
5.12 異步方法調用
5.12.1 異步委托
5.12.2 迴調方法
5.12.3 嚮迴調方法傳遞狀態
5.12.4 one-way調用
5.13 綫程-資源親緣性
5.13.1 System.ThreadStatic-Attribute
5.13.2 綫程本地存儲(TLS)
5.13.3 System.ComponentModel. ISynchronizeInvoke接口
5.14 執行上下文簡介
第6章 安全性
6.1 代碼訪問安全性(CAS)概述
6.1.1 什麼是移動代碼
6.1.2 CAS:全局觀
6.1.3 給程序集代碼授予權限
6.1.4 在運行程序集的代碼時檢查權限
6.2 CAS:證據和權限
6.2.1 什麼是證據
6.2.2 .NET Framework所提供的標準證據
6.2.3 誰提供證據
6.2.4 權限
6.2.5 標準權限
6.2.6 標識權限
6.2.7 安全權限
6.2.8 自定義權限
6.3 CAS:通過應用安全策略根據證據授予權限
6.3.1 安全策略級彆
6.3.2 剖析安全策略
6.3.3 用於應用安全策略的算法
6.3.4 默認安全策略配置
6.3.5 配置安全策略
6.4 CAS:FullTrust權限
6.5 CAS:從源代碼進行命令式的權限檢查
6.5.1 CodeAccessPermissions類和PermissionSet類
6.5.2 DemandO方法
6.5.3 DenyO方法、RevertDenyO方法、PermitOnlyO方法和RevertPermitOnlyO方法
6.5.4 AssertO方法和RevertAssertO方法
6.5.5 FromXmlO方法和ToXmlO方法
6.5.6 System.Security.IPermission接口
6.6 CAS:使用attribute進行聲明式的權限檢查
6.6.1 加載程序集時調整所授權限集閤的attribute
6.6.2 命令式與聲明式的對比
6.7 CAS:測試和調試移動代碼的實用機製
6.8 CAS:獨立存儲區權限
6.9 .NET、Windows 用戶與角色
6.9.1 Windows安全簡介
6.9.2 IIdentity接口與IPrincipal接口
6.9.3 Windows 安全標識符
6.9.4 在底層Windows綫程中模擬用戶
6.10 .NET與Windows資源的訪問控製
6.10.1 Windows訪問控製簡介
6.10.2 在.NET代碼中使用特殊的SD
6.10.3 在.NET代碼中使用通用的SD
6.11 .NET與角色
6.11.1 定義應用程序域的主體策略
6.11.2 檢查用戶是否屬於某個特定角色
6.11.3 COM+角色
6.12 .NET與密碼學:對稱算法
6.12.1 對稱算法概述
6.12.2 .NET Framework與對稱算法
6.13 .NET與密碼學:非對稱算法(公鑰/私鑰)
6.13.1 非對稱算法概述
6.13.2 安全會話簡介
6.13.3 RSA 算法
6.13.4 非對稱算法與數字簽名
6.13.5 .NET Framework與RSA算法
6.14 數據保護API
6.14.1 Windows的數據保護API
6.14.2 System.Security.Crypto-graphy.ProtectedData類
6.14.3 System.Security.Crypto-graphy.ProtectedMemory類
6.14.4 System.Security.SecureString類
6.14.5 保護配置文件中的數據
6.14.6 確保網絡傳輸中數據的安全
6.15 使用Authenticode 技術與X.509證書驗證程序集
6.15.1 Authenticode與強名稱
6.15.2 證書與證書認證中心
6.15.3 根證書
6.15.4 Windows、.NET與Authenti- code技術
第7章 反射、後期綁定與attribute
7.1 反射
7.1.1 何時需要反射
7.1.2 .NET反射有何新意
7.1.3 對載入AppDomain的程序集的反射
7.1.4 從元數據獲取信息
7.2 後期綁定
7.2.1 “綁定類”的含義
7.2.2 早期綁定與動態綁定
7.2.3 後期綁定
7.2.4 在C#編譯到IL期間如何實例化一個未知的類
7.2.5 使用後期綁定
7.2.6 利用接口:使用後期綁定的正確方法
7.3 attribute
7.3.1 attribute是什麼
7.3.2 何時需要attribute
7.3.3 關於attribute應該知道的事
7.3.4 可以應用attribute的代碼元素
7.3.5 .NET Framework中的一些標準attribute
7.3.6 自定義的attribute的示例
7.3.7 條件attribute
7.4 動態生成程序集並在運行中使用
7.4.1 為什麼要考慮動態生成程序集
7.4.2 一個實際的問題 186
7.4.3 理想的第三種解決方案——動態創建程序集
7.4.4 將程序集保存到磁盤上的能力
7.4.5 結論
第8章 .NET與本機代碼/COM/COM+之間的互操作性
8.1 P/Invoke
8.1.1 DllImportAttribute
8.1.2 類型轉換
8.1.3 使用指針傳遞參數
8.1.4 傳遞字符串
8.1.5 傳遞結構與聯閤
8.1.6 方嚮attribute
8.1.7 委托與非托管的函數指針
8.2 C++/CLI語言互操作性簡介
8.2.1 IJW功能
8.2.2 托管類型與非托管類型共存
8.2.3 在本機代碼中使用托管對象
8.3 .NET與Win32句柄
8.3.1 簡介
8.3.2 HandleCollector類
8.3.3 SafeHandle類與Critical-Handle類
8.4 在.NET 中使用COM 對象
8.4.1 類型元數據與類型庫
8.4.2 Interop程序集與Runtime Callable Wrapper類
8.4.3 訪問不使用類型庫的COM組件中的COM類
8.4.4 使用Visual Studio導入ActiveX
8.4.5 使用RCW類時需要牢記的COM特性
8.4.6 COM類的顯式後期綁定
8.4.7 免注冊COM
8.5 將.NET對象包裝成CCW
8.5.1 CCW簡介
8.5.2 從.NET程序集中生成描述CCW類的COM類型庫
8.5.3 在操作係統上注冊CCW
8.5.4 將.NET程序集作為COM組件使用
8.5.5 .NET異常與CCW
8.5.6 處理對象生命周期
8.6 COM+簡介
8.6.1 COM+是什麼
8.6.2 在.NET中使用COM+:企業服務
8.7 COM+企業服務簡介
8.7.1 COM+企業服務的完整列錶
8.7.2 你需要COM+企業服務嗎
8.8 在.NET類中利用COM+服務
8.8.1 服務組件簡介
8.8.2 聲明服務組件使用的企業服務
8.8.3 COM+上下文與服務組件
8.8.4 COM+應用程序簡介
8.8.5 COM+目錄
8.8.6 COM+應用程序的激活模式
8.8.7 安裝服務組件
8.8.8 查看並操作COM+目錄
8.8.9 構建一個使用服務組件的客戶
第二部分 C#語言
第9章 語言基本概念
9.1 源代碼組織
9.1.1 命名空間
9.1.2 命名空間中可聲明的全套語法元素
9.1.3 C#項目的結構
9.1.4 命名空間和程序集的組織
9.2 編譯步驟
9.3 預處理器
9.3.1 預處理符號與條件編譯
9.3.2 預處理符號與條件attribute
9.3.3 #error指令和#warning指令
9.3.4 #pragma warning disable 指令和#pragma warning restore指令
9.3.5 #line指令
9.3.6 #region指令和#endregion指令
9.4 csc.exe編譯器
9.5 彆名機製
9.5.1 創建命名空間和類型的彆名
9.5.2 命名空間彆名限定符
9.5.3 全局限定符
9.5.4 外部彆名
9.6 注釋和自動文檔
9.6.1 注釋
9.6.2 使用Visual Studio的任務列錶
9.6.3 自動文檔
9.7 標識符
9.8 控製結構
9.8.1 條件語句(if/else、?:和switch)
9.8.2 循環語句(do、while、for和foreach)
9.8.3 goto語句
9.9 MainO方法
第10章 從C# 2.0的角度看.NET 2.0類型係統
10.1 對象在內存中的存儲
10.1.1 對象的分配和解除分配
10.1.2 托管綫程棧
10.1.3 托管堆
10.1.4 對象存儲:托管綫程棧與托管堆的比較
10.1.5 靜態分配與動態分配的比較
10.2 引用類型和值類型
10.3 公共類型係統(CTS)
10.3.1 .NET類型不與任何編程語言關聯
10.3.2 CTS:全局觀
10.4 System.Object類
10.5 對象比較
10.5.1 等價與恒等
10.5.2 自定義相等比較規則
10.5.3 相等性與散列錶
10.5.4 自定義大小比較規則
10.6 對象剋隆
10.7 裝箱和拆箱
10.7.1 裝箱
10.7.2 裝箱導緻的危險問題
10.7.3 拆箱
10.8 基本類型
10.8.1 整型
10.8.2 實型
10.8.3 布爾型
10.8.4 字符型
10.8.5 整數和字符串之間的轉換
10.9 基本類型的運算
10.9.1 同一基本類型上的算術運算
10.9.2 處理被零除的錯誤
10.9.3 處理溢齣
10.9.4 運算符的優先級
10.9.5 前綴和後綴遞增/遞減運算符
10.9.6 不同基本類型之間的算術運算
10.9.7 位運算
10.10 結構
10.11 枚舉
10.11.1 枚舉和整型
10.11.2 System.Enum類
10.11.3 位域(一組標誌)
10.12 字符串
10.12.1 System.String類
10.12.2 字符串字麵常量
10.12.3 無轉義字符串字麵常量
10.12.4 使用字符串
10.12.5 格式化字符串
10.12.6 System.Text.StringBui-lder類
10.13 委托類和委托對象
10.13.1 簡介
10.13.2 委托對象與靜態方法
10.13.3 C# 2.0編譯器的委托類推測功能
10.13.4 委托對象與實例方法
10.13.5 用一個委托對象引用多個方法
10.13.6 System.Delegate類
10.13.7 更改引用方法列錶
10.14 可空類型
10.14.1 值類型和空值範式
10.14.2 System.Nullable T 結構
10.14.3 C#語法革新:Nullable T 關鍵字和null關鍵字
10.14.4 C#語法革新:Nullable T 的等價寫法T?
10.14.5 C# 2.0中bool?的無差彆對待
10.14.6 可空類型與裝箱/拆箱
10.14.7 可空結構和可空枚舉
10.15 部分類型
10.15.1 必須在每個部分聲明上重復齣現的類型聲明元素
10.15.2 在每個部分聲明上可選重復齣現的類型聲明元素
10.15.3 在多個部分聲明上重復齣現就會纍積效果的類型聲明元素
10.15.4 僅在某個部分聲明上起作用的類型聲明元素
第11章 類和對象
11.1 簡介
11.2 術語
11.3 類的定義
11.4 字段
11.4.1 字段初始化
11.4.2 常數字段
11.4.3 字段初始化的潛在問題
11.5 方法
11.5.1 按值或按引用傳遞參數
11.5.2 C#的默認規則
11.5.3 按引用傳遞任意參數
11.5.4 在引用類型上使用ref關鍵字
11.5.5 參數初始化
11.5.6 輸齣參數
11.5.7 params關鍵字
11.5.8 方法重載
11.6 屬性
11.6.1 get訪問器
11.6.2 set訪問器
11.6.3 關於屬性的注釋
11.7 索引器
11.8 事件
11.8.1 介紹
11.8.2 C#語法
11.8.3 一個實際的例子
11.8.4 異步事件處理
11.8.5 在同步條件下保護代碼不受訂閱者方法所拋異常的影響
11.9 嵌套類型
11.10 封裝性和可見性
11.10.1 成員的可見性
11.10.2 類型的可見性
11.10.3 屬性和索引器訪問器的可見性
11.10.4 私有成員的附加說明
11.10.5 IL語言可見性的附加說明
11.11 this關鍵字
11.12 構造函數
11.12.1 構造函數的聲明
11.12.2 創建對象時訪問構造函數
11.13 對象終結和析構
11.13.1 析構函數、終結器和Object.FinalizeO方法
11.13.2 IDisposable接口和DisposeO方法
11.13.3 何時需要終結器和DisposeO方法
11.14 靜態成員
11.14.1 靜態字段、屬性和事件
11.14.2 靜態方法
11.14.3 靜態構造函數
11.14.4 靜態類
11.15 運算符重載
11.15.1 算術運算符的重載
11.15.2 類型轉換運算符的重載
11.15.3 比較運算符的重載
11.15.4 運算符重載和CLS
第12章 繼承、多態性與抽象性
12.1 目標:代碼重用
12.1.1 潛在問題
12.1.2 解決方案之一:類的繼承
12.2 類的繼承
12.2.1 語法
12.2.2 保護及內部或保護可見性級彆
12.2.3 類繼承圖
12.2.4 調用基類的構造函數
12.2.5 基類成員的可見性
12.2.6 封閉類
12.3 虛方法和多態性
12.3.1 潛在問題
12.3.2 解決方案之一:虛方法和多態性
12.3.3 示例一則
12.3.4 屏蔽多態性
12.4 抽象性
12.4.1 潛在的問題
12.4.2 解決方案之一:抽象類和抽象方法
12.4.3 示例一則
12.4.4 同時使用abstract關鍵字和override關鍵字
12.5 接口
12.5.1 強製代碼使用者使用抽象體代替實現體
12.5.2 解決方法命名的衝突
12.5.3 解決接口擴展帶來的衝突
12.5.4 覆寫接口的實現方法
12.5.5 接口與結構
12.6 虛擬或抽象屬性、事件和索引器
12.7 is和as運算符
12.7.1 is運算符
12.7.2 as運算符
12.8 代碼重用的解決方案
第13章 泛型
13.1 C# 1.0的一個問題以及使用C# 2.0 泛型的解決方法
13.1.1 C# 1.0中集閤項的類型化問題
13.1.2 C# 2.0泛型帶來的理想方案
13.2 .NET 2.0泛型概覽
13.2.1 聲明多個類型參數
13.2.2 開放和封閉泛型類型
13.2.3 .NET泛型與C++模闆的比較
13.2.4 泛型類型的可見性
13.2.5 泛型結構與接口
13.2.6 泛型類型與彆名
13.3 類型參數的約束
13.3.1 默認構造函數約束
13.3.2 派生約束
13.3.3 引用類型或值類型約束
13.4 泛型類型的成員
13.4.1 方法重載
13.4.2 靜態字段
13.4.3 靜態方法
13.4.4 類構造函數
13.4.5 運算符重載
13.4.6 嵌套類型
13.5 運算符與泛型
13.5.1 類型參數的相等、不等及比較運算符
13.5.2 typeof運算符與泛型
13.5.3 params及lock關鍵字與泛型
13.5.4 default運算符
13.6 類型轉換與泛型
13.6.1 基本規則
13.6.2 類型轉換與泛型數組
13.6.3 is和as運算符
13.7 繼承與泛型
13.7.1 基本規則
13.7.2 覆寫泛型類型的虛方法
13.8 泛型方法
13.8.1 簡介
13.8.2 泛型方法與約束
13.8.3 虛擬泛型方法
13.8.4 泛型方法類型參數的推測
13.8.5 C# 2.0語法的二義性
13.9 委托、事件與泛型
13.9.1 簡介
13.9.2 泛型委托與泛型方法
13.9.3 泛型與委托的協變性及反變性
13.9.4 事件和泛型委托
13.10 反射、attribute、IL與泛型
13.10.1 泛型與System.Type類
13.10.2 泛型與System.Reflection.MethodBase類及System.Reflection.MethodInfo類
13.10.3 attribute與泛型
13.10.4 IL語言與泛型
13.11 .NET Framework 2.0中的泛型
13.11.1 對象序列化與泛型
13.11.2 .NET Remoting與泛型
13.11.3 集閤與泛型
13.11.4 不支持泛型的領域
第14章 不安全代碼、異常、匿名方法和迭代器
14.1 指針和不安全代碼
14.1.1 允許不安全代碼的編譯器選項
14.1.2 在C#中聲明不安全代碼
14.2 在C#中使用指針
14.2.1 .NET中支持指針的類型
14.2.2 聲明指針
14.2.3 提領和間接運算符
14.2.4 取大小運算符
14.2.5 指針運算
14.2.6 指針類型轉換
14.2.7 雙重指針
14.2.8 定址對象
14.2.9 指針和數組
14.2.10 固定數組
14.2.11 使用stackalloc關鍵字在棧上分配內存
14.2.12 字符串與指針
14.3 利用異常處理錯誤
14.3.1 潛在問題:如何恰當處理運行時齣現的大多數錯誤
14.3.2 C#異常處理簡介
14.4 異常對象和定義自己的異常類
14.4.1 System.Exception類
14.4.2 定義自己的異常類
14.4.3 從自己的代碼中拋齣異常
14.4.4 C#的非檢查型異常
14.5 catch塊和finally塊
14.5.1 catch塊的一些說明(異常處理程序)
14.5.2 finally塊
14.5.3 增加異常語義
14.6 從構造函數或終結器中拋齣的異常
14.6.1 靜態構造函數所拋異常或靜態字段初始化時所拋異常
14.6.2 終結器所拋異常
14.7 異常處理與CLR
14.8 異常處理與Visual Studio
14.9 異常管理使用指南
14.9.1 何時考慮拋齣異常
14.9.2 在異常處理程序中做什麼
14.9.3 在何處放置異常處理程序
14.9.4 異常與返迴錯誤代碼的對比
14.9.5 永遠不要預測bug造成的後果能夠被異常處理程序所捕獲
14.10 匿名方法
14.10.1 C# 2.0匿名方法簡介
14.10.2 匿名方法可以接受參數
14.10.3 一個精妙的特殊語法
14.10.4 匿名方法與泛型
14.10.5 匿名方法的實際應用
14.11 C# 2.0編譯器與匿名方法
14.11.1 簡單的方式
14.11.2 捕獲局部變量
14.11.3 捕獲的局部變量與代碼復雜性
14.11.4 匿名方法訪問外圍方法的參數
14.11.5 匿名方法訪問外圍類的成員
14.12 匿名方法的高級用法
14.12.1 定義:閉包與詞法環境
14.12.2 漫談閉包
14.12.3 使用閉包代替類
14.12.4 委托與閉包
14.12.5 使用匿名方法處理集閤
14.13 C# 1.x迭代器
14.13.1 可枚舉對象、枚舉器和Iterator設計模式
14.13.2 實例一則
14.13.3 一個可枚舉對象對應多個枚舉器
14.13.4 C# 1.x迭代器的缺點
14.14 C# 2.0迭代器
14.14.1 yield return關鍵字
14.14.2 迭代器與泛型
14.14.3 一個可枚舉對象對應多個枚舉
14.14.4 yield break關鍵字
14.14.5 yield return關鍵字和yield break關鍵字的語法限製
14.14.6 遞歸迭代器實例
14.15 C# 2.0編譯器與迭代器
14.15.1 編譯器自動創建並使用的枚舉器類
14.15.2 關於生成類的說明
14.16 C# 2.0迭代器的高級用法
14.16.1 定義:協同例程和延拓
14.16.2 通過迭代器利用協同例程和延拓的威力
14.16.3 Pipeline模式
14.16.4 延拓與多綫程的比較
14.16.5 C# 2.0迭代器的一個限製
第三部分 .NET Framework
第15章 集閤
15.1 使用foreach和in關鍵字迭代訪問集閤中的項
15.1.1 在數組上使用foreach和in
15.1.2 交錯數組上的foreach語法
15.1.3 在自定義集閤類上支持foreach語法
15.2 數組
15.2.1 創建和引用數組
15.2.2 訪問數組的項和處理越界訪問
15.2.3 交錯數組
15.2.4 初始化數組的項
15.2.5 數組的協變
15.2.6 System.Array類
15.2.7 位數組
15.3 序列
15.3.1 System.Collections.Generic.ICollection T 接口
15.3.2 System.Collections.Generic.IList T 接口
15.3.3 System.Collections.Generic.List T 類
15.3.4 System.ComponentModel.IBindingList接口和System.ComponentModel.IListSource接口
15.3.5 System.Collections.Generic.LinkedList T 類
15.3.6 字符串列錶
15.3.7 System.Collections.Generic.Queue T 類
15.3.8 System.Collections.Generic.Stack T 類
15.4 字典
15.4.1 System.Collections.Generic.IDictionary K,V 接口
15.4.2 System.Collections.Generic.SortedDictionary K,V 類
15.4.3 System.Collections.Generic.Dictionary K,V 類
15.4.4 迭代訪問字典中的項
15.5 對集閤中的項進行排序
15.5.1 IComparer T 接口和Icom-parable T 接口
15.5.2 對數組中的項排序
15.5.3 對List T 實例中的元素排序
15.6 用於處理集閤的函數對象
15.6.1 特化的委托類型
15.6.2 使用匿名方法
15.6.3 List T 類和Array類支持函數對象
15.6.4 C# 2.0的迭代器和集閤
15.7 System.Collections.Generic和System.Collections之間的聯係
第16章 基類
16.1 數學
16.1.1 System.Math類
16.1.2 System.Random類
16.2 時間、日期和持續時間
16.2.1 System.DateTime結構
16.2.2 System.TimeSpan結構
16.2.3 System.Diagnostics. Stopwatch類
16.3 驅動器、目錄、文件和路徑
16.3.1 操作驅動器
16.3.2 操作目錄
16.3.3 操作文件
16.3.4 操作路徑
16.3.5 文件係統監視器
16.4 注冊錶
16.4.1 引言
16.4.2 注冊錶的結構
16.4.3 注冊錶的層級
16.4.4 用.NET讀/寫注冊錶
16.5 調試
16.5.1 用來自定義對象調試時的視圖的attribute
16.5.2 調試“僅我的代碼”
16.5.3 調試模式
16.5.4 解決調試問題
16.6 跟蹤
16.6.1 監聽器
16.6.2 跟蹤源和源級彆
16.6.3 篩選跟蹤源
16.6.4 跟蹤縮進
16.7 正則錶達式
16.7.1 引言
16.7.2 語法
16.7.3 示例
16.7.4 .NET和正則錶達式
16.7.5 優化正則錶達式的求值
16.8 控製颱
16.8.1 光標
16.8.2 顯示
16.8.3 大小與位置
16.8.4 顔色
16.8.5 數據輸入
16.8.6 重定嚮控製颱的流
16.8.7 雜項
第17章 輸入、輸齣和流
17.1 流的簡介
17.1.1 流的類層次結構
17.1.2 操作流的工具
17.1.3 流數據的類型化
17.1.4 字符串編碼
17.2 讀寫文件
17.2.1 簡單的文件讀寫
17.2.2 讀寫二進製數據文件
17.2.3 讀寫文本文件
17.2.4 以異步的方式操作流
17.3 用套接字來使用TCP/IP
17.3.1 套接字和TCP/IP簡介
17.3.2 以同步的方式操作套接字
17.3.3 以異步的方式操作套接字
17.4 獲取網絡接口和狀態的信息
17.4.1 發現可用網絡接口
17.4.2 Ping
17.4.3 網絡發生更改時所觸發的事件
17.4.4 網絡活動統計
17.5 HTTP和FTP客戶端
17.5.1 URI
17.5.2 WebClient類
17.5.3 通過URI訪問資源的其他類
17.6 在HTTP.SYS上用HttpListener編HTTP服務器代碼
17.6.1 HTTP.SYS簡介
17.6.2 System.Net.HttpListener類
17.6.3 以異步方式處理HTTP請求
17.7 支持郵件協議
17.8 緩衝和壓縮數據流
17.8.1 通過Decorator設計模式在流上應用服務
17.8.2 緩衝流數據
17.8.3 壓縮數據流
17.9 在串行端口上讀寫數據
17.10 支持安全通訊協議:SSL、NTLM和Kerberos
17.10.1 安全通訊協議簡介
17.10.2 安全通訊協議和System.Net.Security命名空間
17.10.3 SslStream類
17.10.4 NegociateStream類
17.10.5 加密數據流
第18章 Windows Forms應用程序
18.1 Windows用戶界麵
18.1.1 控製颱應用程序與窗口應用程序
18.1.2 Windows消息簡介
18.1.3 Windows應用程序開發的發展
18.1.4 System.Windows.Forms命名空間簡介
18.2 Windows Forms開發簡介
18.2.1 處理事件
18.2.2 編寫方法
18.2.3 沒有Visual Studio的Windows Forms開發
18.3 Windows Forms開發工具
18.3.1 模態/非模態對話框簡介
18.3.2 鼠標和鍵盤事件
18.3.3 Paint事件
18.3.4 異步處理
18.3.5 其他特性
18.4 標準控件
18.4.1 Windows Forms 2.0控件的層次結構
18.4.2 新增控件概述
18.5 創建自定義控件
18.6 顯示和編輯數據
18.6.1 Visual Studio 2005提供的工具
18.6.2 BindingSource控件
18.6.3 用BindingSource來利用數據源
18.6.4 用對象列錶作為數據源
18.7 Windows Forms和本地化
18.8 GDI+
18.8.1 System.Drawing.Graphics類
18.8.2 System.Drawing.Pen類
18.8.3 System.Drawing.Brush類
18.8.4 繪製文本
18.8.5 處理圖像
18.8.6 優化圖像的處理
18.8.7 動畫和雙緩衝
第19章 ADO.NET 2.0
19.1 數據庫簡介
19.1.1 DBMS
19.1.2 RDBMS
19.1.3 SQL語言
19.1.4 分布式架構的必要性
19.2 ADO.NET簡介
19.2.1 連接模式與非連接模式
19.2.2 數據提供程序
19.2.3 ADO.NET:全局觀
19.2.4 我們將在範例中使用的DB
19.3 連接與數據提供程序
19.3.1 解除應用程序與數據提供程序之間的耦閤
19.3.2 連接字符串
19.3.3 如何存儲連接字符串以及連接字符串存儲在哪裏
19.3.4 連接池
19.3.5 訪問數據源的元數據
19.4 使用DataReader在連接模式下工作
19.4.1 使用DataReader從數據庫中獲取數據
19.4.2 在數據庫端進行標量運算
19.4.3 使用SQL查詢來修改數據
19.5 使用DataSet在非連接模式下工作
19.5.1 使用來自數據庫的數據填充緩存
19.5.2 在DataSet中對多錶之間的關聯進行操作
19.5.3 將DataSet中更新的數據保存到數據庫
19.5.4 非連接模式與樂觀/悲觀並發策略
19.5.5 DataSet中數據錶的約束
19.5.6 DataView類
19.6 強類型DataSet
19.6.1 創建強類型DataSet類
19.6.2 TableAdapter和強類型SQL請求
19.7 連接模式和非連接模式之間的橋接器
19.8 對象與關係數據之間的橋接器
19.8.1 結構問題
19.8.2 行為問題
19.8.3 解決上述問題的途徑
19.8.4 用於對象關係映射的.NET工具
19.9 SQL Server數據提供程序的專有功能
19.9.1 異步請求
19.9.2 批量復製
19.9.3 SqlClient連接上的統計數據
19.9.4 SQL Server 2005 Express版本
第20章 事務
20.1 事務簡介
20.1.1 事務管理器、資源管理器和數據源
20.1.2 分布式事務以及2PC算法簡介
20.1.3 在SQL Server連接上進行的本地事務
20.1.4 分布式事務協調器
20.2 System.Transactions
20.2.1 LTM、持久RM和易變RM簡介
20.2.2 System.Transactions 實現的隱式事務
20.2.3 在事務中被觸發的事件
20.2.4 System.Transactions揭秘
20.2.5 事務隔離級彆簡介
20.2.6 事務作用域
20.2.7 System.Transactions 實現的顯式事務
20.3 System.Transactions的高級用法
20.3.1 在多個綫程中執行一個事務
20.3.2 以異步方式完成事務
20.3.3 System.Transactions和CAS
20.4 用於實現自定義RM的機製
第21章 XML
21.1 簡介
21.1.1 XML所解決的問題
21.1.2 統一文檔世界和數據世界
21.1.3 XML文檔的結構
21.2 XSD、XPath、XSLT和XQuery簡介
21.2.1 用XSD schema類型化XML文檔及其數據
21.2.2 Xpath
21.2.3 XSLT
21.2.4 XQuery
21.3 遍曆和編輯XML文檔的方法
21.4 使用XmlReader類和XmlWriter類的Cursor方法
21.4.1 使用XmlReader類讀取數據
21.4.2 在讀取數據時對其進行驗證
21.4.3 使用XmlWriter類編輯數據
21.5 使用XmlDocument類的Tree/DOM方法
21.5.1 使用XmlDocument類裝載和遍曆XML文檔
21.5.2 使用XmlDocument類編輯和保存XML數據
21.5.3 使用XmlDocument類驗證XML文檔
21.5.4 XmlDocument類的事件
21.6 使用XPath遍曆和編輯XML文檔
21.6.1 對內存中的DOM樹應用XPath錶達式
21.6.2 用XPathNavigator對象遍曆XPathDocument對象
21.6.3 用XPathNodeIterator對象遍曆XPath的選擇結果集
21.6.4 用XPathNavigator對象編輯XmlDocument對象
21.7 使用XSLT樣式錶轉換XML文檔
21.8 連接關係型數據與XML文檔的橋接器
21.8.1 從DataSet獲取XML文檔
21.8.2 用XML文檔填充DataSet
21.8.3 System.Xml.XmlDataDocument類
21.8.4 XML和SQL Server
21.9 連接對象與XML文檔的橋梁
21.9.1 System.Xml.XmlSerialization類
21.9.2 用於XML序列化的attribute
21.9.3 sgen.exe工具
21.9.4 xsd.exe工具
21.10 Visual Studio和XML
21.10.1 創建、查看以及編輯XML 文檔和XSD schema
21.10.2 用XSD schema驗證XML文檔
21.10.3 編輯和調試XSLT程序
第22章 .NET Remoting
22.1 簡介
22.1.1 什麼是.NET Remoting
22.1.2 FAQ
22.2 按引用封送
22.3 按值封送和二進製序列化
22.4 ObjectHandle類
22.5 對象的激活
22.5.1 分布式體係的組件
22.5.2 宿主概覽
22.5.3 信道概覽
22.5.4 同步方式、異步方式和單嚮方式調用
22.5.5 對象激活與對象創建
22.6 well-known對象的激活
22.7 客戶端激活的對象
22.7.1 使用new關鍵字激活對象
22.7.2 潛在的問題
22.8 Factory設計模式和soapsuds.exe工具
22.8.1 Factory設計模式
22.8.2 soapsuds.exe工具
22.9 well-known和客戶端激活的對象的生命周期
22.10 配置.NET Remoting
22.10.1 配置宿主
22.10.2 配置客戶端
22.10.3 聯閤使用接口和配置文件
22.11 .NET Remoting服務器的部署
22.11.1 Windows服務
22.11.2 IIS
22.12 安全的.NET Remoting信道
22.12.1 安全的TCP信道
22.12.2 安全的HTTP信道
22.13 代理和消息
22.13.1 把方法調用轉換成消息
22.13.2 IMessage接口的層次結構
22.13.3 透明代理、真實代理和ObjRef類
22.13.4 通過ObjRef類發布對象
22.13.5 消息接收器
22.13.6 為何考慮自定義真實代理
22.13.7 開發自定義真實代理
22.13.8 在類的所有實例上使用自定義真實代理
22.13.9 讀寫方法調用的參數
22.14 信道
22.14.1 簡介
22.14.2 發送方信道和代理
22.14.3 接收方信道和服務器對象
22.14.4 消息接收器、格式化程序和信道
22.14.5 信道接收器提供程序
22.14.6 示例:顯示網絡消息的大小
22.15 .NET上下文
22.15.1 簡介
22.15.2 上下文綁定和上下文靈活對象
22.15.3 上下文attribute和上下文屬性
22.15.4 消息接收器區域
22.15.5 使用區域的示例
22.15.6 調用上下文
22.16 小結
22.16.1 激活對象的方式
22.16.2 截獲消息
第23章 ASP.NET 2.0
23.1 簡介
23.1.1 曆史
23.1.2 ASP與ASP.NET
23.1.3 ASP.NET 1.x與ASP.NET 2.0
23.2 ASP.NET概覽
23.2.1 Web Form
23.2.2 運行期的ASP.NET、IIS和Web應用程序
23.2.3 在你自己的.NET應用程序中承載ASP.NET
23.2.4 基於HTTP.SYS使用ASP.NET
23.3 ASP.NET應用程序的源代碼
23.3.1 內聯代碼
23.3.2 服務器端腳本的代碼段
23.3.3 代碼隱藏
23.4 編譯和部署模型
23.4.1 動態編譯
23.4.2 就地預編譯
23.4.3 部署預編譯
23.5 Web Form和控件
23.5.1 服務器控件
23.5.2 客戶端和服務器端之間的交互
23.5.3 視圖狀態
23.5.4 迴發事件和非迴發事件
23.5.5 控件狀態
23.5.6 跨頁麵傳遞
23.5.7 HTML服務器控件與Web服務器控件
23.6 頁麵生命周期
23.7 ASP.NET應用程序配置
23.7.1 Web.Config文件的組織
23.7.2 Web.Config文件的部分
23.7.3 processModel 部分
23.7.4 更新配置
23.7.5 在運行期應用配置更新
23.8 HTTP管綫
23.8.1 簡介
23.8.2 HttpApplication類和Global.asax文件
23.8.3 HTTP上下文
23.8.4 HTTP模塊
23.8.5 HTTP處理程序
23.9 狀態和會話管理
23.9.1 會話管理
23.9.2 處理會話標識符
23.9.3 會話存儲的標準實現
23.9.4 為存儲會話提供自定義實現
23.10 Provider設計模式
23.11 錯誤處理
23.11.1 system .Web 配置元素和 customErrors 配置元素
23.11.2 Application_Error事件
23.11.3 ErrorPage屬性
23.12 跟蹤、診斷以及事件管理
23.12.1 trace.axd HTTP處理程序
23.12.2 ASP.NET性能計數器
23.12.3 ASP.NET狀態監視
23.13 輸入數據的校驗
23.13.1 校驗控件
23.13.2 實現自定義校驗
23.13.3 校驗組
23.13.4 ValidationSummary類
23.14 用戶控件
23.14.1 復閤用戶控件
23.14.2 用戶控件事件
23.14.3 用戶控件狀態
23.14.4 用戶控件與Visual Studio的設計時支持
23.15 緩存
23.15.1 頁麵緩存
23.15.2 緩存頁麵的多個版本
23.15.3 頁麵片段緩存
23.15.4 緩存後替換
23.15.5 數據緩存
23.15.6 緩存依賴
23.15.7 SQL Server緩存依賴
23.15.8 自定義緩存依賴
23.16 數據源
23.16.1 通過程序的方式綁定控件和數據源
23.16.2 聲明式綁定控件和數據源
23.16.3 平鋪數據源與層次數據源
23.16.4 ObjectDataSource類
23.16.5 利用數據源更新數據
23.17 查看並編輯數據
23.17.1 GridView控件
23.17.2 模闆
23.17.3 DetailsView控件
23.17.4 FormView控件
23.17.5 顯示XML數據
23.18 母版頁
23.18.1 母版頁和內容頁麵
23.18.2 嵌套母版頁
23.18.3 配置母版頁
23.18.4 從內容頁麵訪問母版頁
23.19 ASP.NET 2.0與本地化
23.20 站點導航
23.21 安全
23.21.1 通過IIS驗證Windows用戶
23.21.2 ASP.NET驗證
23.21.3 錶單驗證提供程序
23.21.4 管理用戶
23.21.5 管理角色
23.21.6 安全服務器控件
23.22 個性化與用戶配置
23.22.1 配置提供程序以及用戶數據的管理
23.22.2 匿名識彆
23.22.3 個性化與會話
23.23 樣式、主題與皮膚
23.23.1 CSS樣式和控件
23.23.2 主題
23.23.3 皮膚
23.23.4 命名的皮膚
23.24 WebPart
23.24.1 創建包含WebPart的頁麵
23.24.2 設計方式
23.24.3 WebPart目錄
23.24.4 編輯方式
23.24.5 連接WebPart
第24章 使用.NET進行Web服務開發
24.1 簡介
24.1.1 SOA:麵嚮服務架構
24.1.2 SOAP和WSDL
24.1.3 WS-I基本概要
24.1.4 消息交換模式
24.2 開發一個簡單的Web服務
24.2.1 不使用Visual Studio開發一個簡單的Web服務
24.2.2 使用Visual Studio開發一個簡單的Web服務
24.3 測試與調試Web服務
24.3.1 測試Web服務
24.3.2 調試Web服務
24.4 創建Web服務的.NET客戶端
24.4.1 不使用Visual Studio來創建Web服務的.NET客戶端
24.4.2 使用Visual Studio創建Web 服務的.NET客戶端
24.5 異步調用與消息交換模式
24.6 通過.NET Remoting客戶端使用Web服務
24.7 SOAP消息
24.7.1 簡介
24.7.2 定義以及處理SOAP首部
24.7.3 對SOAP消息體編碼
24.7.4 SOAP錯誤消息
24.7.5 SOAP與底層傳輸協議
24.8 Web服務契約與WSDL語言
24.8.1 WSDL能夠錶達什麼
24.8.2 剖析WSDL文檔
24.9 WSE與WS-*規範簡介
24.9.1 WSE簡介
24.9.2 WSE 3.0所支持的規範
24.9.3 安裝WSE
24.9.4 WSE是如何利用SOAP擴展的
24.9.5 使用WSE診斷的第一個測試
24.10 WSE尚未支持的WS-*規範
24.10.1 WS-PolicyAttachment與WS-MetadataExchange
24.10.2 WS-ReliableMessage
24.10.3 UDDI and WS-Discovery
24.10.4 WS-Federation
24.10.5 WS-Coordination
24.10.6 WS-AtomicTransaction與WS-BusinessActivity
24.10.7 WS-Enumeration
24.10.8 WS-Eventing
24.10.9 WS-Management
24.11 WCF簡介
附錄A C# 2.0的關鍵字
附錄B .NET 2.0的新增功能
附錄C 設計模式簡介
附錄D 針對.NET 2.0平颱的工具
· · · · · · (
收起)