 |
-- 會員 / 註冊 --
|
|
|
|
精通C#(第6版) ( 簡體 字) |
作者:[美] Andrew Troelsen | 類別:1. -> 程式設計 -> .NET -> C# |
譯者: |
出版社:人民郵電出版社 | 3dWoo書號: 36036 詢問書籍請說出此書號!【缺書】 NT售價: 795 元 |
出版日:7/1/2013 |
頁數:1192 |
光碟數:0 |
|
站長推薦:  |
印刷:黑白印刷 | 語系: ( 簡體 版 ) |
|
加入購物車 │加到我的最愛 (請先登入會員) |
ISBN:9787115321817 |
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 序 |
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證) |
作者序: |
譯者序: |
前言: |
內容簡介: 《精通C#(第6版)》是C#領域久負盛名的經典著作,深入全面地講解了C#編程語言和.NET平臺的核心內容,并結合大量示例剖析相關概念。全書分為八部分:C#和.NET平臺、C#核心編程結構、C#面向對象編程、高級C#編程結構、用.NET程序集編程、.NET基礎類庫、WPF和ASP.NET Web Forms。第6版是對第5版的進一步更新和完善,內容涵蓋了最先進的.NET編程技術和技巧,并準確呈現出C#編程語言的最新變化和.NET 4.5 Framework的新特性。 《精通C#(第6版)》由微軟C# MVP Andrew Troelsen編寫,第6版專門針對C# 5.0和.NET 4.5進行了細致入微的修訂,是各層次.NET開發人員的必讀之作。 |
目錄:第一部分 C#與.NET平臺
第1章 .NET之道 2 1.1 初識.NET平臺 2 1.2 .NET平臺構造塊(CLR、CTS和CLS)簡介 3 1.2.1 基礎類庫的作用 3 1.2.2 C#的優點 4 1.2.3 托管代碼與非托管代碼 5 1.3 其他支持.NET的編程語言 5 1.4 .NET程序集概覽 7 1.4.1 CIL的作用 8 1.4.2 .NET類型元數據的作用 10 1.4.3 程序集清單的作用 11 1.5 CTS 12 1.5.1 CTS類類型 12 1.5.2 CTS接口類型 12 1.5.3 CTS結構類型 13 1.5.4 CTS枚舉類型 13 1.5.5 CTS委托類型 13 1.5.6 CTS類型成員 14 1.5.7 內建的CTS數據類型 14 1.6 CLS 15 1.7 CLR 16 1.8 程序集/命名空間/類型的區別 17 1.8.1 Microsoft根命名空間的作用 20 1.8.2 以編程方式訪問命名空間 20 1.8.3 引用外部程序集 21 1.9 使用ildasm.exe探索程序集 22 1.9.1 查看CIL代碼 23 1.9.2 查看類型元數據 23 1.9.3 查看程序集元數據(即清單) 24 1.10 .NET的平臺無關性 24 1.11 Windows 8應用程序簡介 25 1.11.1 構建Windows 8應用程序 26 1.11.2 .NET在Windows 8中的作用 27 1.12 小結 28
第2章 構建C#應用程序 29 2.1 .NET Framework 4.5 SDK的作用 29 2.2 用csc.exe構建C#應用程序 30 2.2.1 指定輸入輸出目標 31 2.2.2 引用外部程序集 32 2.2.3 引用多個外部程序集 33 2.2.4 編譯多個源文件 33 2.2.5 使用C#響應文件 34 2.3 使用Notepad++構建.NET應用程序 35 2.4 使用SharpDevelop構建.NET應用程序 36 2.5 使用Visual C# Express構建.NET應用程序 38 2.6 使用Visual Studio構建.NET應用程序 39 2.6.1 Visual Studio的獨特功能 39 2.6.2 使用New Project對話框指向.NET Framework 40 2.6.3 解決方案資源管理器 40 2.6.4 Class View工具 42 2.6.5 Object Browser工具 43 2.6.6 集成對代碼重構的支持 43 2.6.7 代碼擴展和圍繞技術 45 2.6.8 可視化Class Designer 47 2.6.9 集成的.NET Framework 4.5 SDK文檔系統 50 2.7 小結 51
第二部分 C#核心編程結構
第3章 C#核心編程結構Ⅰ 54 3.1 一個簡單的C#程序 54 3.1.1 Main()方法的其他形式 55 3.1.2 指定應用程序錯誤代碼 56 3.1.3 處理命令行參數 57 3.1.4 使用Visual Studio指定命令行參數 59 3.2 有趣的題外話:System.Environment類的其他成員 59 3.3 System.Console類 61 3.3.1 使用Console類進行基本的輸入和輸出 61 3.3.2 格式化控制臺輸出 62 3.3.3 格式化數值數據 63 3.3.4 在控制臺應用程序外格式化數值數據 64 3.4 系統數據類型和相應的C#關鍵字 64 3.4.1 變量聲明和初始化 65 3.4.2 內建數據類型與new操作符 67 3.4.3 數據類型類的層次結構 67 3.4.4 數值數據類型的成員 69 3.4.5 System.Boolean的成員 69 3.4.6 System.Char的成員 69 3.4.7 從字符串數據中解析數值 70 3.4.8 System.DateTime和System.TimeSpan 70 3.4.9 System.Numerics.dll程序集 71 3.5 使用字符串數據 72 3.5.1 基本的字符串操作 73 3.5.2 字符串拼接 73 3.5.3 轉義字符 74 3.5.4 定義逐字字符串 75 3.5.5 字符串和相等性 75 3.5.6 字符串是不可變的 76 3.5.7 System.Text.StringBuilder類型 77 3.6 窄化和寬化數據類型轉換 78 3.6.1 checked關鍵字 80 3.6.2 設定項目級別的溢出檢測 81 3.6.3 unchecked關鍵字 82 3.7 隱式類型本地變量 82 3.7.1 隱式類型變量的限制 84 3.7.2 隱式類型數據是強類型數據 84 3.7.3 隱式類型本地變量的用途 85 3.8 C#迭代結構 86 3.8.1 for循環 86 3.8.2 foreach循環 87 3.8.3 while和do/while循環結構 87 3.9 條件結構和關系/相等操作符 88 3.9.1 if/else語句 88 3.9.2 關系/相等操作符 88 3.9.3 邏輯操作符 89 3.9.4 switch語句 89 3.10 小結 91
第4章 C#核心編程結構Ⅱ 92 4.1 方法和參數修飾符 92 4.1.1 默認的參數傳遞行為 93 4.1.2 out修飾符 94 4.1.3 ref修飾符 95 4.1.4 params修飾符 96 4.1.5 定義可選參數 97 4.1.6 使用命名參數調用方法 98 4.1.7 成員重載 99 4.2 C#數組 101 4.2.1 C#數組初始化語法 102 4.2.2 隱式類型本地數組 103 4.2.3 定義object數組 103 4.2.4 使用多維數組 104 4.2.5 數組作為參數(和返回值) 105 4.2.6 System.Array基類 106 4.3 枚舉類型 107 4.3.1 控制枚舉的底層存儲 108 4.3.2 聲明枚舉變量 109 4.3.3 System.Enum類型 110 4.3.4 動態獲取枚舉的名稱/值對 110 4.4 結構類型 112 4.5 值類型和引用類型 115 4.5.1 值類型、引用類型和賦值操作符 116 4.5.2 包含引用類型的值類型 117 4.5.3 按值傳遞引用類型 119 4.5.4 按引用傳遞引用類型 120 4.5.5 值類型和引用類型:最后的細節 121 4.6 C#可空類型 122 4.6.1 使用可空類型 123 4.6.2 ??操作符 124 4.7 小結 124
第三部分 C#面向對象編程
第5章 封裝 126 5.1 C#類類型 126 5.2 構造函數 129 5.2.1 默認構造函數的作用 129 5.2.2 定義自定義的構造函數 130 5.2.3 再談默認構造函數 131 5.3 this關鍵字的作用 132 5.3.1 使用this進行串聯構造函數調用 133 5.3.2 觀察構造函數流程 135 5.3.3 再談可選參數 137 5.4 static關鍵字 138 5.4.1 定義靜態數據 138 5.4.2 定義靜態方法 140 5.4.3 定義靜態構造函數 141 5.4.4 定義靜態類 143 5.5 定義OOP的支柱 144 5.5.1 封裝的作用 144 5.5.2 繼承的作用 144 5.5.3 多態的作用 146 5.6 C#訪問修飾符 147 5.6.1 默認的訪問修飾符 148 5.6.2 訪問修飾符和嵌套類型 148 5.7 第一個支柱:C#的封裝服務 149 5.7.1 使用傳統的訪問方法和修改方法執行封裝 149 5.7.2 使用.NET屬性進行封裝 151 5.7.3 使用類的屬性 154 5.7.4 只讀和只寫屬性 155 5.7.5 靜態屬性 156 5.8 自動屬性 156 5.8.1 與自動屬性交互 158 5.8.2 關于自動屬性和默認值 158 5.9 對象初始化語法 160 5.9.1 使用初始化語法調用自定義構造函數 161 5.9.2 初始化內部類型 162 5.10 常量數據 163 5.10.1 只讀字段 164 5.10.2 靜態只讀字段 165 5.11 分部類型 165 5.12 小結 167
第6章 繼承和多態 168 6.1 繼承的基本機制 168 6.1.1 指定既有類的父類 169 6.1.2 多個基類 170 6.1.3 sealed關鍵字 171 6.2 回顧Visual Studio類關系圖 172 6.3 OOP的第二個支柱:繼承 173 6.3.1 使用base關鍵字控制基類的創建 174 6.3.2 家族的秘密:protected關鍵字 176 6.3.3 增加密封類 177 6.4 包含/委托編程 178 6.5 OOP的第三個支柱:C#的多態支持 180 6.5.1 virtual和override關鍵字 181 6.5.2 使用Visual Studio IDE重寫虛方法 183 6.5.3 密封虛成員 184 6.5.4 抽象類 184 6.5.5 構建多態接口 186 6.5.6 成員投影 189 6.6 基類/派生類的轉換規則 191 6.6.1 C#的as關鍵字 192 6.6.2 C#的is關鍵字 193 6.7 超級父類:System.Object 193 6.7.1 重寫System.Object.ToString() 196 6.7.2 重寫System.Object.Equals() 196 6.7.3 重寫System.Object.GetHashCode() 197 6.7.4 測試修改后的Person類 198 6.7.5 System.Object的靜態成員 199 6.8 小結 199
第7章 結構化異常處理 200 7.1 錯誤、bug與異常 200 7.2 .NET異常處理的作用 201 7.2.1 .NET異常處理的四要素 202 7.2.2 System.Exception基類 202 7.3 最簡單的例子 203 7.3.1 引發普通的異常 205 7.3.2 捕獲異常 206 7.4 配置異常的狀態 207 7.4.1 TargetSite屬性 207 7.4.2 StackTrace屬性 208 7.4.3 HelpLink屬性 208 7.4.4 Data屬性 209 7.5 系統級異常 211 7.6 應用程序級異常 211 7.6.1 構建自定義異常,第一部分 212 7.6.2 構建自定義異常,第二部分 213 7.6.3 構建自定義異常,第三部分 214 7.7 處理多個異常 215 7.7.1 通用的catch語句 217 7.7.2 再次引發異常 218 7.7.3 內部異常 218 7.7.4 finally塊 219 7.8 誰在引發什么異常 220 7.9 未處理異常的后果 220 7.10 使用Visual Studio調試未處理的異常 221 7.11 小結 222
第8章 接口 223 8.1 接口類型 223 8.2 定義自定義接口 226 8.3 實現接口 227 8.4 在對象級別調用接口成員 229 8.4.1 獲取接口引用:as關鍵字 230 8.4.2 獲取接口引用:is關鍵字 230 8.5 接口作為參數 231 8.6 接口作為返回值 233 8.7 接口類型數組 233 8.8 使用Visual Studio實現接口 234 8.9 顯式接口實現 235 8.10 設計接口層次結構 238 8.11 構建可枚舉類型(IEnumerable和IEnumerator) 241 8.11.1 用yield關鍵字構建迭代器方法 243 8.11.2 構建命名迭代器 244 8.12 構建可克隆的對象(ICloneable) 245 8.13 構建可比較的對象(IComparable) 249 8.13.1 指定多個排序順序 252 8.13.2 自定義屬性、自定義排序類型 253 8.14 小結 253
第四部分 高級C#編程結構
第9章 集合與泛型 256 9.1 集合類的動機 256 9.1.1 System.Collections命名空間 257 9.1.2 System.Collections.Specialized命名空間 259 9.2 非泛型集合的問題 260 9.2.1 性能問題 260 9.2.2 類型安全問題 263 9.2.3 初識泛型集合 265 9.3 泛型類型參數的作用 266 9.3.1 為泛型類/結構指定類型參數 267 9.3.2 為泛型成員指定類型參數 268 9.3.3 為泛型接口指定類型參數 269 9.4 System.Collections.Generic命名空間 270 9.4.1 集合初始化語法 271 9.4.2 使用ListT類 272 9.4.3 使用StackT類 273 9.4.4 使用QueueT類 274 9.4.5 使用SortedSetT類 275 9.5 System.Collections.ObjectModel命名空間 277 9.6 創建自定義泛型方法 279 9.7 創建自定義泛型結構和類 282 9.8 類型參數的約束 284 9.8.1 使用where關鍵字的示例 284 9.8.2 操作符約束的不足 285 9.9 小結 286
第10章 委托、事件和Lambda表達式 287 10.1 .NET委托類型 287 10.1.1 在C#中定義委托類型 288 10.1.2 System.MulticastDelegate與System.Delegate基類 290 10.2 最簡單的委托示例 291 10.3 使用委托發送對象狀態通知 293 10.3.1 支持多路廣播 296 10.3.2 從委托的調用列表中移除成員 297 10.3.3 方法組轉換語法 298 10.4 泛型委托 300 10.5 C#事件 303 10.5.1 event關鍵字 304 10.5.2 揭開事件的神秘面紗 305 10.5.3 監聽傳入的事件 306 10.5.4 使用Visual Studio簡化事件注冊 307 10.5.5 創建自定義的事件參數 308 10.5.6 泛型EventHandlerT委托 309 10.6 C#匿名方法 310 10.7 Lambda表達式 313 10.7.1 剖析Lambda表達式 315 10.7.2 使用多個語句處理參數 316 10.7.3 含有多個(或零個)參數的Lambda表達式 317 10.7.4 使用Lambda表達式重新編寫CarEvents示例 318 10.8 小結 319
第11章 高級C#語言特性 320 11.1 索引器方法 320 11.1.1 使用字符串值索引對象 322 11.1.2 重載索引器方法 323 11.1.3 多維的索引器 323 11.1.4 在接口類型上定義索引器 324 11.2 操作符重載 325 11.2.1 重載二元操作符 325 11.2.2 +=與-=操作符 327 11.2.3 重載一元操作符 328 11.2.4 重載相等操作符 329 11.2.5 重載比較操作符 329 11.2.6 操作符重載的最后思考 330 11.3 自定義類型轉換 331 11.3.1 回顧:數值轉換 331 11.3.2 回顧:相關的類類型間的轉換 331 11.3.3 創建自定義轉換例程 332 11.3.4 Square類型的其他顯式轉換 334 11.3.5 定義隱式轉換例程 335 11.4 擴展方法 336 11.4.1 定義擴展方法 336 11.4.2 在實例層次上調用擴展方法 337 11.4.3 導入擴展方法 338 11.4.4 擴展方法的智能感知 339 11.4.5 擴展實現了指定接口的類型 339 11.5 匿名類型 340 11.5.1 定義匿名類型 341 11.5.2 匿名類型的內部表示方式 342 11.5.3 方法ToString()和GetHashCode()的實現 343 11.5.4 匿名類型的相等語義 344 11.5.5 包含匿名類型的匿名類型 345 11.6 指針類型 346 11.6.1 unsafe關鍵字 347 11.6.2 *和&操作符 348 11.6.3 不安全(與安全)交換功能 349 11.6.4 通過指針訪問字段 350 11.6.5 stackalloc關鍵字 350 11.6.6 使用fixed關鍵字固定類型 351 11.6.7 sizeof關鍵字 352 11.7 小結 352
第12章 LINQ to Object 353 12.1 LINQ特有的編程結構 353 12.1.1 隱式類型本地變量 354 12.1.2 對象和集合初始化語法 354 12.1.3 Lambda表達式 355 12.1.4 擴展方法 355 12.1.5 匿名類型 356 12.2 LINQ的作用 356 12.2.1 LINQ表達式是強類型的 357 12.2.2 核心LINQ程序集 357 12.3 將LINQ查詢應用于原始數組 358 12.3.1 再一次,不使用LINQ 359 12.3.2 反射LINQ結果集 360 12.3.3 LINQ和隱式類型本地變量 361 12.3.4 LINQ和擴展方法 362 12.3.5 延遲執行的作用 363 12.3.6 立即執行的作用 364 12.4 返回LINQ查詢的結果 365 12.5 將LINQ查詢應用到集合對象 367 12.5.1 訪問包含的子對象 367 12.5.2 將LINQ查詢應用于非泛型集合 368 12.5.3 使用OfTypeT()篩選數據 369 12.6 C# LINQ查詢操作符 369 12.6.1 基本的選擇語法 371 12.6.2 獲取數據子集 371 12.6.3 投影新數據類型 372 12.6.4 使用Enumerable獲取總數 373 12.6.5 反轉結果集 373 12.6.6 對表達式進行排序 374 12.6.7 維恩圖工具 374 12.6.8 移除重復 375 12.6.9 LINQ聚合操作 376 12.7 LINQ查詢語句的內部表示 376 12.7.1 用查詢操作符建立查詢表達式(復習) 377 12.7.2 使用Enumerable類型和Lambda表達式來建立查詢表達式 377 12.7.3 使用Enumerable類型和匿名方法來建立查詢表達式 379 12.7.4 用Enumerable類型和原始委托建立查詢表達式 379 12.8 小結 380
第13章 對象的生命周期 381 13.1 類、對象和引用 381 13.2 對象生命周期的基礎 382 13.2.1 CIL的new指令 383 13.2.2 將對象引用設置為空 384 13.3 應用程序根的作用 385 13.4 對象的代 386 13.5 .NET 1.0至.NET 3.5的并發垃圾回收 387 13.6 .NET 4.0及后續版本 387 13.7 System.GC類型 388 13.8 構建可終結對象 391 13.8.1 重寫System.Object.Finalize() 392 13.8.2 終結過程的細節 393 13.9 構建可處置對象 394 13.10 構建可終結類型和可處置類型 397 13.11 延遲對象實例化 400 13.12 小結 403
第五部分 用.NET程序集編程
第14章 .NET程序集入門 406 14.1 定義自定義命名空間 406 14.1.1 使用完全限定名解決命名沖突 408 14.1.2 使用別名解決命名沖突 409 14.1.3 創建嵌套的命名空間 410 14.1.4 Visual Studio 的默認命名空間 411 14.2 .NET程序集的作用 412 14.2.1 程序集促進代碼重用 412 14.2.2 程序集確定類型邊界 412 14.2.3 程序集是可版本化的單元 412 14.2.4 程序集是自描述的 413 14.2.5 程序集是可配置的 413 14.3 .NET程序集的格式 413 14.3.1 Windows文件首部 413 14.3.2 CLR文件首部 414 14.3.3 CIL代碼、類型元數據和程序集清單 415 14.3.4 可選的程序集資源 415 14.4 構建和使用自定義類庫 416 14.4.1 清單 418 14.4.2 CIL 421 14.4.3 類型元數據 421 14.4.4 構建C#客戶端應用程序 422 14.4.5 構建Visual Basic客戶端應用程序 424 14.4.6 實現跨語言繼承 425 14.5 私有程序集 425 14.5.1 私有程序集的標識 426 14.5.2 探測過程 426 14.5.3 配置私有程序集 427 14.5.4 App.Config文件 428 14.6 共享程序集 430 14.6.1 全局程序集緩存 430 14.6.2 強名稱 431 14.6.3 在命令行生成強名稱 432 14.6.4 使用Visual Studio為程序集賦予強名稱 434 14.6.5 在GAC中安裝強名稱的程序集 436 14.7 使用共享程序集 437 14.8 配置共享程序集 439 14.8.1 凍結當前的共享程序集 439 14.8.2 構建共享程序集2.0.0.0版本 440 14.8.3 動態重定向到共享程序集的特定版本 441 14.9 發行者策略程序集 443 14.10 codeBase元素 444 14.11 System.Configuration命名空間 446 14.12 配置文件架構文檔 447 14.13 小結 448
第15章 類型反射、晚期綁定和基于特性的編程 449 15.1 類型元數據的必要性 449 15.1.1 查看(部分)EngineState枚舉的元數據 450 15.1.2 查看(部分)Car類型的元數據 451 15.1.3 研究TypeRef 452 15.1.4 記錄定義的程序集 452 15.1.5 記錄引用的程序集 453 15.1.6 記錄字符串字面量 453 15.2 反射 454 15.2.1 System.Type類 454 15.2.2 使用System.Object.GetType()得到Type引用 455 15.2.3 使用typeof()得到Type引用 455 15.2.4 使用System.Type.GetType()得到Type引用 455 15.3 構建自定義的元數據查看器 456 15.3.1 反射方法 456 15.3.2 反射字段和屬性 457 15.3.3 反射實現的接口 457 15.3.4 顯示其他信息 458 15.3.5 實現Main() 458 15.3.6 反射泛型類型 460 15.3.7 反射方法參數和返回值 460 15.4 動態加載程序集 461 15.5 反射共享程序集 464 15.6 晚期綁定 465 15.6.1 System.Activator類 466 15.6.2 調用沒有參數的方法 467 15.6.3 調用有參數的方法 468 15.7 .NET特性的作用 469 15.7.1 特性的使用者 470 15.7.2 在C#中使用特性 470 15.7.3 C#特性簡化符號 471 15.7.4 為特性指定構造參數 472 15.7.5 Obsolete特性 472 15.8 構建自定義特性 473 15.8.1 應用自定義特性 473 15.8.2 命名屬性語法 474 15.8.3 限制特性使用 474 15.9 程序集級別特性 475 15.10 使用早期綁定反射特性 477 15.11 使用晚期綁定反射特性 478 15.12 反射、晚期綁定和自定義特性的使用背景 479 15.13 構建可擴展的應用程序 480 15.13.1 構建CommonSnappable-Types.dll 480 15.13.2 構建C#插件 481 15.13.3 構建Visual Basic插件 482 15.13.4 構建可擴展的Windows Forms應用程序 482 15.14 小結 485
第16章 動態類型和動態語言運行時 486 16.1 dynamic關鍵字的作用 486 16.1.1 調用動態聲明的數據的成員 488 16.1.2 Microsoft.CSharp.dll程序集的作用 489 16.1.3 dynamic關鍵字的作用域 490 16.1.4 dynamic關鍵字的限制 491 16.1.5 dynamic關鍵字的實際用途 491 16.2 DLR的作用 492 16.2.1 表達式樹的作用 492 16.2.2 System.Dynamic命名空間的作用 493 16.2.3 表達式樹的動態運行時查找 493 16.3 使用動態類型簡化后期綁定調用 494 16.4 使用動態數據簡化COM互操作 497 16.4.1 主互操作程序集的作用 498 16.4.2 嵌入互操作元數據 499 16.4.3 普通COM互操作的難點 500 16.5 使用C# 動態數據進行COM互操作 500 16.6 不使用C# 動態數據進行COM互操作 504 16.7 小結 505
第17章 進程、應用程序域和對象上下文 506 17.1 Windows進程的作用 506 17.2 .NET平臺下與進程進行交互 508 17.2.1 列舉運行中的進程 510 17.2.2 特定的進程 511 17.2.3 進程的線程集合 511 17.2.4 進程中的模塊集合 513 17.2.5 以編程方式啟動或結束進程 514 17.2.6 使用ProcessStartInfo類控制進程的啟動 515 17.3 .NET應用程序域 516 17.4 與默認應用程序域進行交互 518 17.4.1 枚舉加載的程序集 519 17.4.2 接收程序集加載通知 520 17.5 創建新的應用程序域 521 17.5.1 在自定義應用程序域中加載程序集 522 17.5.2 以編程方式卸載應用程序域 523 17.6 對象上下文邊界 525 17.6.1 上下文靈活和上下文綁定類型 525 17.6.2 定義上下文綁定對象 526 17.6.3 研究對象的上下文 526 17.7 進程、應用程序域和上下文小結 528 17.8 小結 528
第18章 CIL和動態程序集的作用 529 18.1 學習CIL語法的原因 529 18.2 CIL指令、特性和操作碼 530 18.2.1 CIL指令的作用 530 18.2.2 CIL特性的作用 530 18.2.3 CIL操作碼的作用 531 18.2.4 區別CIL操作碼和CIL助記符 531 18.3 入棧和出棧:CIL基于棧的本質 532 18.4 正反向工程 533 18.4.1 CIL代碼標簽的作用 536 18.4.2 與CIL交互:修改*.il文件 536 18.4.3 使用ilasm.exe編譯CIL代碼 537 18.4.4 peverify.exe的作用 538 18.5 CIL指令和特性 539 18.5.1 在CIL中指定外部引用程序集 539 18.5.2 在CIL中定義當前程序集 539 18.5.3 在CIL中定義命名空間 540 18.5.4 在CIL中定義類類型 540 18.5.5 在CIL中定義和實現接口 541 18.5.6 在CIL中定義結構 542 18.5.7 在CIL中定義枚舉 542 18.5.8 在CIL中定義泛型 543 18.5.9 編譯CILTypes.il文件 543 18.6 .NET基礎類庫、C#和CIL數據類型的映射 544 18.7 在CIL中定義類型成員 544 18.7.1 在CIL中定義數據字段 545 18.7.2 在CIL中定義類型的構造函數 545 18.7.3 在CIL中定義屬性 546 18.7.4 定義成員參數 546 18.8 剖析CIL操作碼 547 18.8.1 .maxstack指令 548 18.8.2 在CIL中聲明本地變量 549 18.8.3 在CIL中映射參數到本地變量 550 18.8.4 this隱式引用 550 18.8.5 在CIL中使用循環結構 551 18.9 使用CIL構建.NET程序集 551 18.9.1 構建CILCars.dll 551 18.9.2 構建CILCarClient.exe 554 18.10 動態程序集 555 18.10.1 System.Reflection.Emit命名空間 556 18.10.2 System.Reflection.Emit.ILGenerator的作用 557 18.10.3 產生動態的程序集 557 18.10.4 產生程序集和模塊集 559 18.10.5 ModuleBuilder類型的作用 560 18.10.6 產生HelloClass類型和字符串成員變量 561 18.10.7 產生構造函數 561 18.10.8 產生SayHello()方法 562 18.10.9 使用動態產生的程序集 563 18.11 小結 564
第六部分 .NET基礎類庫
第19章 多線程、并行和異步編程 566 19.1 進程、應用程序域、上下文及線程之間的關系 566 19.1.1 并發問題 567 19.1.2 線程同步的作用 568 19.2 .NET委托的簡短回顧 568 19.3 委托的異步性 570 19.3.1 BeginInvoke()和EndInvoke()方法 570 19.3.2 System.IAsyncResult接口 570 19.4 異步調用方法 571 19.4.1 同步調用線程 572 19.4.2 AsyncCallback委托的作用 573 19.4.3 AsyncResult類的作用 575 19.4.4 傳遞和接收自定義狀態數據 575 19.5 System.Threading命名空間 576 19.6 System.Threading.Thread類 577 19.6.1 獲得當前執行線程的統計信息 578 19.6.2 Name屬性 579 19.6.3 Priority屬性 579 19.7 手工創建次線程 580 19.7.1 使用ThreadStart委托 580 19.7.2 使用ParameterizedThreadStart委托 582 19.7.3 AutoResetEvent類 583 19.7.4 前臺線程和后臺線程 584 19.8 并發問題 585 19.8.1 使用C#的lock關鍵字進行同步 588 19.8.2 使用System.Threading.Monitor類型進行同步 589 19.8.3 使用System.Threading.Interlocked類型進行同步 590 19.8.4 使用[Synchronization]特性進行同步 591 19.9 使用TimerCallback編程 592 19.10 CLR線程池 593 19.11 使用任務并行庫進行并行編程 595 19.11.1 任務并行庫API 595 19.11.2 Parallel類的作用 596 19.11.3 使用Parallel類的數據并行 596 19.11.4 在次線程中訪問UI元素 598 19.11.5 Task類 599 19.11.6 處理取消請求 599 19.11.7 使用并行類的任務并行 601 19.12 并行LINQ查詢(PLINQ) 603 19.12.1 使用PLINQ查詢 604 19.12.2 取消PLINQ查詢 604 19.13 .NET 4.5下的異步調用 605 19.13.1 C# async和await關鍵字初探 606 19.13.2 異步方法的命名約定 607 19.13.3 返回void的異步方法 609 19.13.4 具有多個await的異步方法 609 19.13.5 用async/await改進AddWithThreads示例 610 19.14 小結 611
第20章 文件輸入輸出和對象序列化 612 20.1 研究System.IO命名空間 612 20.2 Directory(Info)和File(Info)類型 613 20.3 使用DirectoryInfo類型 614 20.3.1 使用DirectoryInfo類型枚舉出文件 616 20.3.2 使用DirectoryInfo類型創建子目錄 616 20.4 使用Directory類型 617 20.5 使用DriveInfo類類型 618 20.6 使用FileInfo類 619 20.6.1 FileInfo.Create()方法 620 20.6.2 FileInfo.Open()方法 621 20.6.3 FileInfo.OpenRead()和FileInfo.OpenWrite()方法 622 20.6.4 FileInfo.OpenText()方法 622 20.6.5 FileInfo.CreateText()和FileInfo.AppendText()方法 623 20.7 使用File類型 623 20.8 Stream抽象類 625 20.9 使用StreamWriter和StreamReader類型 627 20.9.1 寫文本文件 628 20.9.2 讀文本文件 628 20.9.3 直接創建StreamWriter/StreamReader類型 629 20.10 使用StringWriter和StringReader類型 630 20.11 使用BinaryWriter和BinaryReader 631 20.12 以編程方式“觀察”文件 632 20.13 對象序列化 634 20.14 為序列化配置對象 637 20.14.1 定義可序列化的類型 637 20.14.2 公共字段、私有字段和公共屬性 638 20.15 選擇序列化格式化程序 638 20.15.1 IFormatter和IRemoting-Formatting接口 639 20.15.2 在格式化程序中的類型保真 640 20.16 使用BinaryFormatter序列化對象 641 20.17 使用SoapFormatter序列化對象 642 20.18 使用XmlSerializer序列化對象 643 20.19 序列化對象集合 645 20.20 自定義Soap/Binary序列化過程 647 20.20.1 深入了解對象序列化 647 20.20.2 使用ISerializable自定義序列化 648 20.20.3 使用特性定制序列化 650 20.21 小結 651
第21章 ADO.NET之一:連接層 653 21.1 ADO.NET的宏觀定義 653 21.2 ADO.NET數據提供程序 655 21.2.1 微軟提供的ADO.NET數據提供程序 656 21.2.2 關于System.Data.Oracle-Client.dll 657 21.2.3 選擇第三方的數據提供程序 657 21.3 其他的ADO.NET命名空間 658 21.4 System.Data命名空間的類型 658 21.4.1 IDbConnection接口的作用 659 21.4.2 IDbTransaction接口的作用 659 21.4.3 IDbCommand接口的作用 660 21.4.4 IDbDataParameter和IDataParameter接口的作用 660 21.4.5 IDbDataAdapter和IDataAdapter接口的作用 661 21.4.6 IDataReader和IDataRecord接口的作用 661 21.5 使用接口的抽象數據提供程序 662 21.6 創建AutoLot數據庫 665 21.6.1 創建Inventory表 665 21.6.2 為Inventory表添加測試記錄 667 21.6.3 編寫GetPetName()存儲過程 668 21.6.4 創建Customers和Orders表 669 21.6.5 可視化創建表關系 671 21.7 ADO.NET數據提供程序工廠模型 672 21.7.1 完整的數據提供程序工廠的例子 673 21.7.2 數據提供程序工廠模型的潛在缺陷 675 21.7.3 connectionStrings元素 676 21.8 ADO.NET的連接層 677 21.8.1 使用連接對象 678 21.8.2 使用ConnectionStringBuilder對象 679 21.8.3 使用命令對象 680 21.9 使用數據讀取器 681 21.10 構建可重用的數據訪問庫 683 21.10.1 增加連接邏輯 684 21.10.2 增加插入邏輯 685 21.10.3 增加刪除邏輯 686 21.10.4 增加更新邏輯 686 21.10.5 增加選擇邏輯 687 21.10.6 使用參數化的命令對象 688 21.10.7 執行存儲過程 690 21.11 創建控制臺UI前端 691 21.11.1 實現Main()方法 691 21.11.2 實現ShowInstructions()方法 693 21.11.3 實現ListInventory()方法 693 21.11.4 實現DeleteCar()方法 694 21.11.5 實現InsertNewCar()方法 694 21.11.6 實現UpdateCarPetName()方法 695 21.11.7 實現LookUpPetName() 696 21.12 數據庫事務 697 21.12.1 ADO.NET事務對象的主要成員 697 21.12.2 為AutoLot數據庫添加CreditRisks表 698 21.12.3 為InventoryDAL添加事物方法 699 21.12.4 測試數據庫事務 700 21.13 小結 701
第22章 ADO.NET之二:斷開連接層 702 22.1 ADO.NET斷開連接層 702 22.2 DataSet的作用 703 22.2.1 DataSet的主要屬性 704 22.2.2 DataSet的主要方法 704 22.2.3 構建DataSet 705 22.3 使用DataColumn 705 22.3.1 構建DataColumn 706 22.3.2 啟用自增列 707 22.3.3 把DataColumn對象加入DataTable 707 22.4 使用DataRow 707 22.4.1 RowState屬性 709 22.4.2 DataRowVersion屬性 710 22.5 使用DataTable 710 22.5.1 將DataTable插入到DataSet中 711 22.5.2 獲取DataSet中的數據 712 22.5.3 使用DataTableReader對象處理DataTable 713 22.5.4 序列化DataTable/DataSet對象為XML 714 22.5.5 以二進制格式序列化Data-Table/DataSet對象 715 22.6 將DataTable對象綁定到用戶界面 716 22.6.1 從泛型ListT合成DataTable 717 22.6.2 從DataTable中刪除行 719 22.6.3 根據篩選條件選擇行 720 22.6.4 在DataTable中更新行 722 22.6.5 使用DataView類型 723 22.7 使用數據適配器 724 22.7.1 一個簡單的數據適配器示例 725 22.7.2 映射數據庫名稱為友好名稱 726 22.8 向AutoLotDAL.dll添加斷開連接功能 727 22.8.1 定義初始類類型 727 22.8.2 使用SqlCommandBuilder來配置數據適配器 728 22.8.3 實現GetAllInventory() 729 22.8.4 實現UpdateInventory() 729 22.8.5 設置版本號 729 22.8.6 測試非連接的功能 730 22.9 多表DataSet對象和數據關系 731 22.9.1 建立數據適配器 732 22.9.2 建立表間關系 733 22.9.3 更新Database表 733 22.9.4 在關聯表中切換 734 22.10 Windows Forms數據庫設計器工具 736 22.10.1 可視化設計DataGridView 736 22.10.2 生成的App.config文件 740 22.10.3 強類型的DataSet 740 22.10.4 強類型的DataTable 741 22.10.5 強類型的DataRow 742 22.10.6 強類型的數據適配器 743 22.10.7 完成Windows Forms應用程序 744 22.11 將強類型的數據庫代碼隔離到類庫中 744 22.11.1 查看生成的代碼 746 22.11.2 用生成的代碼選擇數據 747 22.11.3 用生成的代碼插入數據 748 22.11.4 用生成的代碼刪除數據 748 22.11.5 用生成的代碼調用存儲過程 749 22.12 LINQ to DataSet 750 22.12.1 DataSet Extensions庫的作用 751 22.12.2 獲取與LINQ兼容的DataTable 752 22.12.3 DataRowExtensions.Field-T()擴展方法的作用 753 22.12.4 從LINQ查詢中生成新的DataTable 754 22.13 小結 754
第23章 ADO.NET之三:Entity Framework 756 23.1 Entity Framework的作用 756 23.1.1 實體的作用 758 23.1.2 Entity Framework的基礎知識 760 23.2 創建和分析EDM 764 23.3 對概念模型進行編程 774 23.4 AutoLotDAL 4.0版,加入實體 779 23.4.1 導航屬性的作用 780 23.4.2 在LINQ to Entity查詢中使用導航屬性 781 23.4.3 調用存儲過程 782 23.5 將數據實體綁定到Windows Forms GUI 783 23.6 展望.NET數據訪問API的未來 786 23.7 小結 787
第24章 LINQ to XML簡介 788 24.1 兩個XML API的故事 788 24.1.1 更優秀的DOM——LINQ to XML 789 24.1.2 更優秀的LINQ to XML——VB字面量語法 790 24.2 System.Xml.Linq命名空間的成員 791 24.2.1 LINQ to XML的軸方法 793 24.2.2 奇妙的XName和XNamespace 794 24.3 使用XElement和XDocument 795 24.3.1 從數組和容器中生成文檔 797 24.3.2 加載和解析XML內容 798 24.4 在內存中操作XML文檔 798 24.4.1 構建LINQ to XML應用程序的UI 799 24.4.2 引入Inventory.xml文件 799 24.4.3 定義LINQ to XML輔助類 800 24.4.4 將UI組裝到輔助類 801 24.5 小結 802
第25章 WCF 803 25.1 各種分布式計算API 803 25.1.1 DCOM的作用 804 25.1.2 COM+/企業服務的作用 804 25.1.3 MSMQ的作用 805 25.1.4 .NET Remoting的作用 805 25.1.5 XML Web服務的作用 806 25.2 WCF的作用 807 25.2.1 WCF特性概覽 807 25.2.2 SOA概覽 808 25.2.3 WCF概要 809 25.3 WCF核心程序集 809 25.4 Visual Studio WCF項目模板 810 25.5 WCF應用程序的基本構成 811 25.6 WCF的ABC 812 25.6.1 WCF契約 813 25.6.2 WCF綁定 814 25.6.3 WCF地址 816 25.7 構建WCF服務 816 25.7.1 [ServiceContract]特性 818 25.7.2 [OperationContract]特性 819 25.7.3 作為操作契約的服務類型 819 25.8 承載WCF服務 820 25.8.1 在App.config文件中創建ABC 820 25.8.2 針對ServiceHost類型進行編程 821 25.8.3 指定庫地址 821 25.8.4 ServiceHost類型的功能 823 25.8.5 system.serviceModel元素的細節 824 25.8.6 啟用元數據交換 825 25.9 構建WCF客戶端應用程序 827 25.9.1 使用svcutil.exe生成代理代碼 827 25.9.2 使用Visual Studio生成代理代碼 828 25.9.3 配置基于TCP的綁定 830 25.10 簡化配置設置 831 25.10.1 使用默認終結點 831 25.10.2 使用多重綁定公開單獨的WCF服務 832 25.10.3 修改WCF綁定的設置 833 25.10.4 使用默認的MEX行為配置 835 25.10.5 刷新客戶端代理和選擇綁定 836 25.11 使用WCF服務庫項目模板 837 25.11.1 構建簡單的Math服務 837 25.11.2 使用WcfTestClient.exe測試WCF服務 838 25.11.3 使用SvcConfigEditor.exe修改配置文件 839 25.12 以Windows服務承載WCF服務 840 25.12.1 在代碼中指定ABC 841 25.12.2 啟用MEX 843 25.12.3 創建Windows服務安裝程序 843 25.12.4 安裝Windows服務 845 25.13 從客戶端異步調用服務 845 25.14 定義WCF數據契約 847 25.14.1 使用Web相關的WCF服務項目模板 848 25.14.2 實現服務契約 849 25.14.3 *.svc文件的作用 851 25.14.4 更新web.config文件 851 25.14.5 測試服務 851 25.15 小結 852
第26章 Windows Workflow Foundation簡介 853 26.1 定義業務流程 853 26.2 構建簡單的工作流 854 26.3 Workflow運行時 857 26.3.1 使用WorkflowInvoker承載工作流 857 26.3.2 使用WorkflowApplication承載工作流 860 26.3.3 第一個工作流示例回顧 861 26.4 檢查Workflow中的活動 861 26.4.1 控制流活動 861 26.4.2 流程圖活動 862 26.4.3 消息傳遞活動 862 26.4.4 狀態機活動 863 26.4.5 運行時活動與基元活動 863 26.4.6 事務活動 863 26.4.7 集合活動和錯誤處理活動 864 26.5 構建流程圖工作流 864 26.5.1 在流程圖中連接活動 865 26.5.2 使用InvokeMethod活動 866 26.5.3 定義工作流變量 867 26.5.4 使用FlowDecision活動 868 26.5.5 使用TerminateWorkflow活動 868 26.5.6 構建“true”條件 869 26.5.7 使用ForEachT活動 870 26.5.8 完成應用程序 872 26.5.9 我們做了什么 873 26.6 在專門的DLL中構建Squence工作流 874 26.6.1 定義初始化項目 874 26.6.2 引入程序集和命名空間 876 26.6.3 定義工作流參數 877 26.6.4 定義工作流變量 877 26.6.5 使用Assign活動 878 26.6.6 使用If和Switch活動 879 26.6.7 構建自定義代碼活動 882 26.7 使用工作流庫 884 26.8 小結 886
第七部分 WPF
第27章 WPF和XAML 888 27.1 WPF背后的動機 888 27.1.1 統一多種不同的API 889 27.1.2 通過XAML將關注點分離 889 27.1.3 提供優化的呈現模型 890 27.1.4 簡化復雜的UI編程 890 27.2 各種形式的WPF應用程序 891 27.2.1 傳統的桌面應用程序 891 27.2.2 基于導航的WPF應用程序 892 27.2.3 XBAP應用程序 893 27.2.4 WPF/Silverlight關系 894 27.3 WPF程序集 894 27.3.1 Application類的作用 896 27.3.2 Window類的作用 897 27.4 創建不使用XAML的WPF應用程序 900 27.4.1 創建強類型的Window類 902 27.4.2 創建簡單的用戶界面 902 27.4.3 與應用程序級別的數據交互 904 27.4.4 處理Window對象的關閉 905 27.4.5 攔截鼠標事件 906 27.4.6 攔截鍵盤事件 907 27.5 僅使用XAML構建WPF應用程序 908 27.5.1 用XAML定義窗體對象 909 27.5.2 用XAML定義應用對象 910 27.5.3 通過msbuild.exe處理XAML文件 911 27.6 將標記轉換為.NET程序集 913 27.6.1 將窗口XAML標記映射到C#代碼 913 27.6.2 BAML的作用 914 27.6.3 將應用程序XAML標記映射到C#代碼 915 27.6.4 XAML到程序集的過程摘要 916 27.7 WPF XAML語法 916 27.7.1 Kaxaml 917 27.7.2 XAML XML命名空間和XAML關鍵字 918 27.7.3 控制類和成員變量的可見性 920 27.7.4 XAML元素、XAML特性和類型轉換器 920 27.7.5 XAML屬性元素語法 921 27.7.6 XAML附加屬性 922 27.7.7 XAML標記擴展 923 27.8 使用代碼隱藏文件構建WPF應用程序 924 27.8.1 為MainWindow類添加代碼文件 925 27.8.2 為MyApp類添加代碼文件 925 27.8.3 用msbuild.exe處理代碼文件 926 27.9 使用Visual Studio構建WPF應用程序 927 27.9.1 WPF項目模板 927 27.9.2 工具箱和XAML設計器/編輯器 928 27.9.3 使用Properties窗口設置屬性 929 27.9.4 使用Properties窗口處理事件 930 27.9.5 在XAML編輯器中處理事件 931 27.9.6 Document Outline窗口 932 27.9.7 查看自動生成的代碼文件 933 27.10 使用Visual Studio構建自定義XAML編輯器 933 27.10.1 設計窗口的GUI 934 27.10.2 實現Loaded事件 935 27.10.3 實現按鈕的Click事件 936 27.10.4 實現Closed事件 937 27.10.5 測試應用程序 937 27.10.6 探索WPF 文檔 938 27.11 小結 939
第28章 使用WPF控件編程 941 28.1 WPF核心控件概述 941 28.1.1 WPF Ink控件 942 28.1.2 WPF Document控件 942 28.1.3 WPF公共對話框 942 28.1.4 文檔中的細節 943 28.2 Visual Studio WPF設計器 944 28.2.1 在Visual Studio中使用WPF控件 944 28.2.2 使用Document Outline編輯器 945 28.3 使用面板控制內容布局 946 28.3.1 在Canvas面板中放置內容 948 28.3.2 在WrapPanel面板中放置內容 949 28.3.3 在StackPanel面板中放置內容 951 28.3.4 在Grid面板中放置內容 952 28.3.5 在DockPanel面板中放置內容 954 28.3.6 啟用Panel類型的滾動功能 955 28.3.7 使用Visual Studio設計器配置Panel 956 28.4 使用嵌套面板構建窗口框架 959 28.4.1 構建菜單系統 960 28.4.2 構建工具條 962 28.4.3 構建狀態條 963 28.4.4 完成UI設計 963 28.4.5 實現MouseEnter/MouseLeave事件處理程序 964 28.4.6 實現拼寫檢查邏輯 964 28.5 WPF命令 965 28.5.1 內置的命令對象 965 28.5.2 將命令連接到Command屬性 966 28.5.3 將命令連接到任意行為 967 28.5.4 使用Open和Save命令 968 28.6 深入了解WPF API和控件 970 28.7 構建Ink API選項卡 972 28.7.1 設計工具條 973 28.7.2 RadioButton控件 975 28.7.3 處理Ink API選項卡的事件 977 28.7.4 InkCanvas控件 977 28.7.5 ComboBox控件 980 28.7.6 保存、加載和清除InkCanvas數據 981 28.8 Documents API 982 28.8.1 塊元素和內聯元素 982 28.8.2 文檔布局管理器 982 28.9 構建Documents選項卡 983 28.9.1 使用代碼填充FlowDocument 984 28.9.2 啟用批注和便簽 985 28.9.3 保存和加載流文檔 986 28.10 WPF數據綁定模型 987 28.10.1 構建Data Binding選項卡 988 28.10.2 使用Visual Studio建立數據綁定 988 28.10.3 DataContext屬性 990 28.10.4 使用IValueConverter進行數據轉換 991 28.10.5 在代碼中建立數據綁定 992 28.10.6 構建DataGrid選項卡 992 28.11 小結 994
第29章 WPF圖形呈現服務 995 29.1 理解WPF的圖形呈現服務 995 29.2 使用形狀呈現圖形數據 996 29.2.1 在畫布中添加矩形、橢圓形和線條 998 29.2.2 在畫布中移除矩形、圓形和線條 1001 29.2.3 折線和多邊形 1002 29.2.4 路徑 1002 29.3 WPF畫刷和畫筆 1005 29.3.1 使用Visual Studio配置畫刷 1006 29.3.2 在代碼中配置畫刷 1008 29.3.3 配置畫筆 1009 29.4 圖形變換 1009 29.4.1 變換概覽 1010 29.4.2 變換Canvas數據 1011 29.5 使用Visual Studio變換編輯器 1012 29.5.1 構建初始布局 1012 29.5.2 在設計時應用變換 1014 29.5.3 在代碼中變換畫布 1015 29.6 使用繪圖和幾何圖形呈現圖形數據 1015 29.6.1 使用幾何圖形構建DrawingBrush 1017 29.6.2 用DrawingBrush進行繪畫 1017 29.6.3 在DrawingImage中使用繪圖類型 1018 29.7 Expression Design的作用 1019 29.7.1 將示例設計文件導出為XAML 1019 29.7.2 將圖像數據導入WPF對象 1021 29.7.3 與熊共舞 1022 29.8 使用可視化層呈現圖形數據 1022 29.9 小結 1028
第30章 WPF資源、動畫和樣式 1029 30.1 理解WPF資源系統 1029 30.2 使用對象(邏輯)資源 1034 30.2.1 Resources屬性的作用 1034 30.2.2 定義窗口級別的資源 1035 30.2.3 {StaticResource}標記擴展 1037 30.2.4 {DynamicResource}標記擴展 1037 30.2.5 應用程序級別的資源 1038 30.2.6 定義合并的資源字典 1039 30.2.7 定義只含資源的程序集 1041 30.3 理解WPF動畫服務 1042 30.3.1 動畫類型的作用 1043 30.3.2 To、From和By屬性 1043 30.3.3 Timeline基類的作用 1044 30.3.4 用C#代碼創建動畫 1044 30.3.5 控制動畫的速度 1045 30.3.6 動畫的反轉和循環 1046 30.4 用XAML創建動畫 1047 30.4.1 演示圖板的作用 1047 30.4.2 事件觸發器的作用 1048 30.4.3 使用不連續的關鍵幀創建動畫 1048 30.5 WPF樣式的作用 1049 30.5.1 定義并使用樣式 1050 30.5.2 重寫樣式設置 1050 30.5.3 使用TargetType自動應用樣式 1051 30.5.4 繼承已有的樣式 1052 30.5.5 未命名樣式的作用 1052 30.5.6 使用觸發器定義樣式 1053 30.5.7 使用多個觸發器定義樣式 1053 30.5.8 動畫樣式 1054 30.5.9 以編程方式設置樣式 1054 30.6 小結 1056
第31章 依賴屬性、路由事件和模板 1057 31.1 依賴屬性的作用 1057 31.1.1 已知的依賴屬性 1059 31.1.2 CLR屬性包裝器的重要說明 1061 31.2 構建自定義依賴屬性 1061 31.2.1 添加數據驗證例程 1065 31.2.2 響應屬性的改變 1065 31.3 路由事件 1066 31.3.1 路由冒泡事件的作用 1067 31.3.2 繼續或中止冒泡 1068 31.3.3 路由隧道事件的作用 1068 31.4 邏輯樹、可視樹和默認模板 1070 31.4.1 以編程方式查看邏輯樹 1070 31.4.2 以編程方式查看可視樹 1072 31.4.3 以編程方式查看控件的默認模板 1073 31.5 使用觸發器框架構建自定義控件模板 1075 31.5.1 模板資源 1076 31.5.2 使用觸發器添加可視提示 1078 31.5.3 {TemplateBinding}標記擴展的作用 1079 31.5.4 ContentPresenter的作用 1080 31.5.5 融合模板和樣式 1081 31.6 小結 1082
第八部分 ASP.NET Web Form
第32章 ASP.NET Web Form 1084 32.1 HTTP的作用 1084 32.1.1 HTTP請求/響應循環 1084 32.1.2 HTTP是無狀態協議 1085 32.2 Web應用程序和Web服務器 1085 32.2.1 IIS虛擬目錄的作用 1085 32.2.2 ASP.NET Development Web Server 1086 32.3 HTML的作用 1087 32.3.1 HTML文檔結構 1087 32.3.2 HTML表單的作用 1088 32.3.3 Visual Studio HTML設計器工具 1088 32.3.4 構建HTML表單 1090 32.4 客戶端腳本的作用 1091 32.5 回發到Web服務器 1093 32.6 ASP.NET API概覽 1094 32.6.1 ASP.NET 2.0及其后續版本的主要特性 1095 32.6.2 ASP.NET 3.5(和.NET 3.5 SP1)的主要特性 1096 32.6.3 ASP.NET 4.0和4.5的主要特性 1096 32.7 構建單個文件的ASP.NET網頁 1097 32.7.1 引用AutoLotDAL.dll 1098 32.7.2 設計UI 1098 32.7.3 添加數據訪問邏輯 1099 32.7.4 ASP.NET指令的作用 1101 32.7.5 腳本塊 1102 32.7.6 ASP.NET控件聲明 1103 32.8 使用代碼文件構建ASP.NET Web頁面 1104 32.8.1 引用AutoLotDAL.dll程序集 1106 32.8.2 更新代碼文件 1107 32.8.3 調試并跟蹤ASP.NET頁面 1107 32.9 ASP.NET Web Site和ASP.NET Web Application 1108 32.10 ASP.NET網站目錄結構 1110 32.10.1 引用程序集 1110 32.10.2 App_Code文件夾的作用 1111 32.11 頁面類型的繼承鏈 1111 32.12 與傳入的HTTP請求交互 1113 32.12.1 獲得瀏覽器統計數據 1113 32.12.2 訪問傳入的表單數據 1114 32.12.3 IsPostBack屬性 1115 32.13 與輸出HTTP響應交互 1115 32.13.1 提交HTML內容 1116 32.13.2 重定向用戶 1116 32.14 ASP.NET網頁的生命周期 1117 32.14.1 AutoEventWireUp特性的作用 1118 32.14.2 Error事件 1118 32.15 web.config文件的作用 1120 32.16 小結 1121
第33章 ASP.NET Web控件、母版頁和主題 1122 33.1 Web控件的本質 1122 33.1.1 服務器端事件處理 1123 33.1.2 AutoPostBack屬性 1123 33.2 Control和WebControl基類 1124 33.2.1 枚舉所包含的控件 1125 33.2.2 動態添加和刪除控件 1127 33.2.3 與動態創建的控件交互 1128 33.2.4 WebControl基類的功能 1128 33.3 ASP.NET Web控件的類別 1129 33.3.1 關于System.Web.UI.HtmlControls的簡短說明 1131 33.3.2 Web控件的文檔 1132 33.4 構建ASP.NET汽車網站 1132 33.4.1 使用ASP.NET母版頁工作 1133 33.4.2 定義默認的內容頁面 1138 33.4.3 設計Inventory內容頁面 1140 33.4.4 設計Build-a-Car內容頁面 1143 33.5 驗證控件的作用 1146 33.5.1 開啟客戶端JavaScript驗證支持 1147 33.5.2 RequiredFieldValidator 1148 33.5.3 RegularExpressionValidator 1148 33.5.4 RangeValidator 1148 33.5.5 CompareValidator 1149 33.5.6 創建ValidationSummary 1150 33.5.7 定義驗證分組 1151 33.6 使用主題 1152 33.6.1 *.skin文件 1153 33.6.2 應用網站級別的主題 1155 33.6.3 在頁面級別應用主題 1155 33.6.4 SkinID屬性 1155 33.6.5 以編程方式分配主題 1156 33.7 小結 1157
第34章 ASP.NET狀態管理技術 1158 34.1 狀態問題 1158 34.2 ASP.NET狀態管理技術 1160 34.3 ASP.NET視圖狀態的作用 1160 34.3.1 演示視圖狀態 1161 34.3.2 添加自定義視圖狀態數據 1162 34.4 Global.asax文件的作用 1163 34.4.1 全局最后異常事件處理程序 1164 34.4.2 HttpApplication基類 1165 34.5 應用程序狀態與會話狀態的差別 1165 34.5.1 維護應用程序級的狀態數據 1166 34.5.2 修改應用程序數據 1168 34.5.3 處理Web應用程序的關閉 1169 34.6 使用應用程序緩存 1169 34.6.1 使用數據緩存 1170 34.6.2 修改*.aspx文件 1172 34.7 維護會話數據 1174 34.8 cookie 1177 34.8.1 創建cookie 1177 34.8.2 讀取傳入的cookie數據 1178 34.9 sessionState元素的作用 1179 34.9.1 在ASP.NET會話狀態服務器中保存會話數據 1179 34.9.2 把會話數據保存在專門的數據庫中 1180 34.10 ASP.NET用戶配置API 1181 34.10.1 ASPNETDB.mdf數據庫 1181 34.10.2 在web.config中定義用戶配置 1182 34.10.3 以編程方式訪問用戶配置數據 1183 34.10.4 分組用戶配置數據并且持久化自定義對象 1185 34.11 小結 1186
索引 1187 |
序: |
|