精通C#是一本在業(yè)內(nèi)頗受好評的書,該書語言生動,內(nèi)容涵蓋面廣泛,收到不少讀者的好評和追捧,本節(jié)內(nèi)容小編為大家整理帶來的是該書的pdf格式完整中文版,共有1201頁,如果你想要查閱這本精通C#(中文版)電子書的話,只需點擊本文相應(yīng)的下載地址進行下載即可!該電子書完全免費,有需要的朋友可以放心下載查閱!
精通C#(中文版)目錄
第一部分 C#與.NET平臺
第1章 .NET之道 2
1.1 初識.NET平臺 2
1.2 .NET平臺構(gòu)造塊(CLR、CTS和CLS)簡介 3
1.2.1 基礎(chǔ)類庫的作用 3
1.2.2 C#的優(yōu)點 4
1.2.3 托管代碼與非托管代碼 5
1.3 其他支持.NET的編程語言 5
1.4 .NET程序集概覽 7
1.4.1 CIL的作用 8
1.4.2 .NET類型元數(shù)據(jù)的作用 10
1.4.3 程序集清單的作用 11
1.5 CTS 12
1.5.1 CTS類類型 12
1.5.2 CTS接口類型 12
1.5.3 CTS結(jié)構(gòu)類型 13
1.5.4 CTS枚舉類型 13
1.5.5 CTS委托類型 13
1.5.6 CTS類型成員 14
1.5.7 內(nèi)建的CTS數(shù)據(jù)類型 14
1.6 CLS 15
1.7 CLR 16
1.8 程序集/命名空間/類型的區(qū)別 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 查看類型元數(shù)據(jù) 23
1.9.3 查看程序集元數(shù)據(jù)(即清單) 24
1.10 .NET的平臺無關(guān)性 24
1.11 Windows 8應(yīng)用程序簡介 25
1.11.1 構(gòu)建Windows 8應(yīng)用程序 26
1.11.2 .NET在Windows 8中的作用 27
1.12 小結(jié) 28
第2章 構(gòu)建C#應(yīng)用程序 29
2.1 .NET Framework 4.5 SDK的作用 29
2.2 用csc.exe構(gòu)建C#應(yīng)用程序 30
2.2.1 指定輸入輸出目標 31
2.2.2 引用外部程序集 32
2.2.3 引用多個外部程序集 33
2.2.4 編譯多個源文件 33
2.2.5 使用C#響應(yīng)文件 34
2.3 使用Notepad++構(gòu)建.NET應(yīng)用程序 35
2.4 使用SharpDevelop構(gòu)建.NET應(yīng)用程序 36
2.5 使用Visual C# Express構(gòu)建.NET應(yīng)用程序 38
2.6 使用Visual Studio構(gòu)建.NET應(yīng)用程序 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 集成對代碼重構(gòu)的支持 43
2.6.7 代碼擴展和圍繞技術(shù) 45
2.6.8 可視化Class Designer 47
2.6.9 集成的.NET Framework 4.5 SDK文檔系統(tǒng) 50
2.7 小結(jié) 51
第二部分 C#核心編程結(jié)構(gòu)
第3章 C#核心編程結(jié)構(gòu)Ⅰ 54
3.1 一個簡單的C#程序 54
3.1.1 Main()方法的其他形式 55
3.1.2 指定應(yīng)用程序錯誤代碼 56
3.1.3 處理命令行參數(shù) 57
3.1.4 使用Visual Studio指定命令行參數(shù) 59
3.2 有趣的題外話:System.Environment類的其他成員 59
3.3 System.Console類 61
3.3.1 使用Console類進行基本的輸入和輸出 61
3.3.2 格式化控制臺輸出 62
3.3.3 格式化數(shù)值數(shù)據(jù) 63
3.3.4 在控制臺應(yīng)用程序外格式化數(shù)值數(shù)據(jù) 64
3.4 系統(tǒng)數(shù)據(jù)類型和相應(yīng)的C#關(guān)鍵字 64
3.4.1 變量聲明和初始化 65
3.4.2 內(nèi)建數(shù)據(jù)類型與new操作符 67
3.4.3 數(shù)據(jù)類型類的層次結(jié)構(gòu) 67
3.4.4 數(shù)值數(shù)據(jù)類型的成員 69
3.4.5 System.Boolean的成員 69
3.4.6 System.Char的成員 69
3.4.7 從字符串?dāng)?shù)據(jù)中解析數(shù)值 70
3.4.8 System.DateTime和System.TimeSpan 70
3.4.9 System.Numerics.dll程序集 71
3.5 使用字符串?dāng)?shù)據(jù) 72
3.5.1 基本的字符串操作 73
3.5.2 字符串拼接 73
3.5.3 轉(zhuǎn)義字符 74
3.5.4 定義逐字字符串 75
3.5.5 字符串和相等性 75
3.5.6 字符串是不可變的 76
3.5.7 System.Text.StringBuilder類型 77
3.6 窄化和寬化數(shù)據(jù)類型轉(zhuǎn)換 78
3.6.1 checked關(guān)鍵字 80
3.6.2 設(shè)定項目級別的溢出檢測 81
3.6.3 unchecked關(guān)鍵字 82
3.7 隱式類型本地變量 82
3.7.1 隱式類型變量的限制 84
3.7.2 隱式類型數(shù)據(jù)是強類型數(shù)據(jù) 84
3.7.3 隱式類型本地變量的用途 85
3.8 C#迭代結(jié)構(gòu) 86
3.8.1 for循環(huán) 86
3.8.2 foreach循環(huán) 87
3.8.3 while和do/while循環(huán)結(jié)構(gòu) 87
3.9 條件結(jié)構(gòu)和關(guān)系/相等操作符 88
3.9.1 if/else語句 88
3.9.2 關(guān)系/相等操作符 88
3.9.3 邏輯操作符 89
3.9.4 switch語句 89
3.10 小結(jié) 91
第4章 C#核心編程結(jié)構(gòu)Ⅱ 92
4.1 方法和參數(shù)修飾符 92
4.1.1 默認的參數(shù)傳遞行為 93
4.1.2 out修飾符 94
4.1.3 ref修飾符 95
4.1.4 params修飾符 96
4.1.5 定義可選參數(shù) 97
4.1.6 使用命名參數(shù)調(diào)用方法 98
4.1.7 成員重載 99
4.2 C#數(shù)組 101
4.2.1 C#數(shù)組初始化語法 102
4.2.2 隱式類型本地數(shù)組 103
4.2.3 定義object數(shù)組 103
4.2.4 使用多維數(shù)組 104
4.2.5 數(shù)組作為參數(shù)(和返回值) 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 動態(tài)獲取枚舉的名稱/值對 110
4.4 結(jié)構(gòu)類型 112
4.5 值類型和引用類型 115
4.5.1 值類型、引用類型和賦值操作符 116
4.5.2 包含引用類型的值類型 117
4.5.3 按值傳遞引用類型 119
4.5.4 按引用傳遞引用類型 120
4.5.5 值類型和引用類型:最后的細節(jié) 121
4.6 C#可空類型 122
4.6.1 使用可空類型 123
4.6.2 ??操作符 124
4.7 小結(jié) 124
第三部分 C#面向?qū)ο缶幊?/p>
第5章 封裝 126
5.1 C#類類型 126
5.2 構(gòu)造函數(shù) 129
5.2.1 默認構(gòu)造函數(shù)的作用 129
5.2.2 定義自定義的構(gòu)造函數(shù) 130
5.2.3 再談默認構(gòu)造函數(shù) 131
5.3 this關(guān)鍵字的作用 132
5.3.1 使用this進行串聯(lián)構(gòu)造函數(shù)調(diào)用 133
5.3.2 觀察構(gòu)造函數(shù)流程 135
5.3.3 再談可選參數(shù) 137
5.4 static關(guān)鍵字 138
5.4.1 定義靜態(tài)數(shù)據(jù) 138
5.4.2 定義靜態(tài)方法 140
5.4.3 定義靜態(tài)構(gòu)造函數(shù) 141
5.4.4 定義靜態(tài)類 143
5.5 定義OOP的支柱 144
5.5.1 封裝的作用 144
5.5.2 繼承的作用 144
5.5.3 多態(tài)的作用 146
5.6 C#訪問修飾符 147
5.6.1 默認的訪問修飾符 148
5.6.2 訪問修飾符和嵌套類型 148
5.7 第一個支柱:C#的封裝服務(wù) 149
5.7.1 使用傳統(tǒng)的訪問方法和修改方法執(zhí)行封裝 149
5.7.2 使用.NET屬性進行封裝 151
5.7.3 使用類的屬性 154
5.7.4 只讀和只寫屬性 155
5.7.5 靜態(tài)屬性 156
5.8 自動屬性 156
5.8.1 與自動屬性交互 158
5.8.2 關(guān)于自動屬性和默認值 158
5.9 對象初始化語法 160
5.9.1 使用初始化語法調(diào)用自定義構(gòu)造函數(shù) 161
5.9.2 初始化內(nèi)部類型 162
5.10 常量數(shù)據(jù) 163
5.10.1 只讀字段 164
5.10.2 靜態(tài)只讀字段 165
5.11 分部類型 165
5.12 小結(jié) 167
第6章 繼承和多態(tài) 168
6.1 繼承的基本機制 168
6.1.1 指定既有類的父類 169
6.1.2 多個基類 170
6.1.3 sealed關(guān)鍵字 171
6.2 回顧Visual Studio類關(guān)系圖 172
6.3 OOP的第二個支柱:繼承 173
6.3.1 使用base關(guān)鍵字控制基類的創(chuàng)建 174
6.3.2 家族的秘密:protected關(guān)鍵字 176
6.3.3 增加密封類 177
6.4 包含/委托編程 178
6.5 OOP的第三個支柱:C#的多態(tài)支持 180
6.5.1 virtual和override關(guān)鍵字 181
6.5.2 使用Visual Studio IDE重寫虛方法 183
6.5.3 密封虛成員 184
6.5.4 抽象類 184
6.5.5 構(gòu)建多態(tài)接口 186
6.5.6 成員投影 189
6.6 基類/派生類的轉(zhuǎn)換規(guī)則 191
6.6.1 C#的as關(guān)鍵字 192
6.6.2 C#的is關(guān)鍵字 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的靜態(tài)成員 199
6.8 小結(jié) 199
第7章 結(jié)構(gòu)化異常處理 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 引發(fā)普通的異! 205
7.3.2 捕獲異! 206
7.4 配置異常的狀態(tài) 207
7.4.1 TargetSite屬性 207
7.4.2 StackTrace屬性 208
7.4.3 HelpLink屬性 208
7.4.4 Data屬性 209
7.5 系統(tǒng)級異常 211
7.6 應(yīng)用程序級異! 211
7.6.1 構(gòu)建自定義異常,第一部分 212
7.6.2 構(gòu)建自定義異常,第二部分 213
7.6.3 構(gòu)建自定義異常,第三部分 214
7.7 處理多個異! 215
7.7.1 通用的catch語句 217
7.7.2 再次引發(fā)異常 218
7.7.3 內(nèi)部異! 218
7.7.4 finally塊 219
7.8 誰在引發(fā)什么異常 220
7.9 未處理異常的后果 220
7.10 使用Visual Studio調(diào)試未處理的異! 221
7.11 小結(jié) 222
第8章 接口 223
8.1 接口類型 223
8.2 定義自定義接口 226
8.3 實現(xiàn)接口 227
8.4 在對象級別調(diào)用接口成員 229
8.4.1 獲取接口引用:as關(guān)鍵字 230
8.4.2 獲取接口引用:is關(guān)鍵字 230
8.5 接口作為參數(shù) 231
8.6 接口作為返回值 233
8.7 接口類型數(shù)組 233
8.8 使用Visual Studio實現(xiàn)接口 234
8.9 顯式接口實現(xiàn) 235
8.10 設(shè)計接口層次結(jié)構(gòu) 238
8.11 構(gòu)建可枚舉類型(IEnumerable和IEnumerator) 241
8.11.1 用yield關(guān)鍵字構(gòu)建迭代器方法 243
8.11.2 構(gòu)建命名迭代器 244
8.12 構(gòu)建可克隆的對象(ICloneable) 245
8.13 構(gòu)建可比較的對象(IComparable) 249
8.13.1 指定多個排序順序 252
8.13.2 自定義屬性、自定義排序類型 253
8.14 小結(jié) 253
第四部分 高級C#編程結(jié)構(gòu)
第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 泛型類型參數(shù)的作用 266
9.3.1 為泛型類/結(jié)構(gòu)指定類型參數(shù) 267
9.3.2 為泛型成員指定類型參數(shù) 268
9.3.3 為泛型接口指定類型參數(shù) 269
9.4 System.Collections.Generic命名空間 270
9.4.1 集合初始化語法 271
9.4.2 使用List<T>類 272
9.4.3 使用Stack<T>類 273
9.4.4 使用Queue<T>類 274
9.4.5 使用SortedSet<T>類 275
9.5 System.Collections.ObjectModel命名空間 277
9.6 創(chuàng)建自定義泛型方法 279
9.7 創(chuàng)建自定義泛型結(jié)構(gòu)和類 282
9.8 類型參數(shù)的約束 284
9.8.1 使用where關(guān)鍵字的示例 284
9.8.2 操作符約束的不足 285
9.9 小結(jié) 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 使用委托發(fā)送對象狀態(tài)通知 293
10.3.1 支持多路廣播 296
10.3.2 從委托的調(diào)用列表中移除成員 297
10.3.3 方法組轉(zhuǎn)換語法 298
10.4 泛型委托 300
10.5 C#事件 303
10.5.1 event關(guān)鍵字 304
10.5.2 揭開事件的神秘面紗 305
10.5.3 監(jiān)聽傳入的事件 306
10.5.4 使用Visual Studio簡化事件注冊 307
10.5.5 創(chuàng)建自定義的事件參數(shù) 308
10.5.6 泛型EventHandler<T>委托 309
10.6 C#匿名方法 310
10.7 Lambda表達式 313
10.7.1 剖析Lambda表達式 315
10.7.2 使用多個語句處理參數(shù) 316
10.7.3 含有多個(或零個)參數(shù)的Lambda表達式 317
10.7.4 使用Lambda表達式重新編寫CarEvents示例 318
10.8 小結(jié) 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 自定義類型轉(zhuǎn)換 331
11.3.1 回顧:數(shù)值轉(zhuǎn)換 331
11.3.2 回顧:相關(guān)的類類型間的轉(zhuǎn)換 331
11.3.3 創(chuàng)建自定義轉(zhuǎn)換例程 332
11.3.4 Square類型的其他顯式轉(zhuǎn)換 334
11.3.5 定義隱式轉(zhuǎn)換例程 335
11.4 擴展方法 336
11.4.1 定義擴展方法 336
11.4.2 在實例層次上調(diào)用擴展方法 337
11.4.3 導(dǎo)入擴展方法 338
11.4.4 擴展方法的智能感知 339
11.4.5 擴展實現(xiàn)了指定接口的類型 339
11.5 匿名類型 340
11.5.1 定義匿名類型 341
11.5.2 匿名類型的內(nèi)部表示方式 342
11.5.3 方法ToString()和GetHashCode()的實現(xiàn) 343
11.5.4 匿名類型的相等語義 344
11.5.5 包含匿名類型的匿名類型 345
11.6 指針類型 346
11.6.1 unsafe關(guān)鍵字 347
11.6.2 *和&操作符 348
11.6.3 不安全(與安全)交換功能 349
11.6.4 通過指針訪問字段 350
11.6.5 stackalloc關(guān)鍵字 350
11.6.6 使用fixed關(guān)鍵字固定類型 351
11.6.7 sizeof關(guān)鍵字 352
11.7 小結(jié) 352
第12章 LINQ to Object 353
12.1 LINQ特有的編程結(jié)構(gòu) 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查詢應(yīng)用于原始數(shù)組 358
12.3.1 再一次,不使用LINQ 359
12.3.2 反射LINQ結(jié)果集 360
12.3.3 LINQ和隱式類型本地變量 361
12.3.4 LINQ和擴展方法 362
12.3.5 延遲執(zhí)行的作用 363
12.3.6 立即執(zhí)行的作用 364
12.4 返回LINQ查詢的結(jié)果 365
12.5 將LINQ查詢應(yīng)用到集合對象 367
12.5.1 訪問包含的子對象 367
12.5.2 將LINQ查詢應(yīng)用于非泛型集合 368
12.5.3 使用OfType<T>()篩選數(shù)據(jù) 369
12.6 C# LINQ查詢操作符 369
12.6.1 基本的選擇語法 371
12.6.2 獲取數(shù)據(jù)子集 371
12.6.3 投影新數(shù)據(jù)類型 372
12.6.4 使用Enumerable獲取總數(shù) 373
12.6.5 反轉(zhuǎn)結(jié)果集 373
12.6.6 對表達式進行排序 374
12.6.7 維恩圖工具 374
12.6.8 移除重復(fù) 375
12.6.9 LINQ聚合操作 376
12.7 LINQ查詢語句的內(nèi)部表示 376
12.7.1 用查詢操作符建立查詢表達式(復(fù)習(xí)) 377
12.7.2 使用Enumerable類型和Lambda表達式來建立查詢表達式 377
12.7.3 使用Enumerable類型和匿名方法來建立查詢表達式 379
12.7.4 用Enumerable類型和原始委托建立查詢表達式 379
12.8 小結(jié) 380
第13章 對象的生命周期 381
13.1 類、對象和引用 381
13.2 對象生命周期的基礎(chǔ) 382
13.2.1 CIL的new指令 383
13.2.2 將對象引用設(shè)置為空 384
13.3 應(yīng)用程序根的作用 385
13.4 對象的代 386
13.5 .NET 1.0 至.NET 3.5的并發(fā)垃圾回收 387
13.6 .NET 4.0及后續(xù)版本 387
13.7 System.GC類型 388
13.8 構(gòu)建可終結(jié)對象 391
13.8.1 重寫System.Object.Finalize() 392
13.8.2 終結(jié)過程的細節(jié) 393
13.9 構(gòu)建可處置對象 394
13.10 構(gòu)建可終結(jié)類型和可處置類型 397
13.11 延遲對象實例化 400
13.12 小結(jié) 403
第五部分 用.NET程序集編程
第14章 .NET程序集入門 406
14.1 定義自定義命名空間 406
14.1.1 使用完全限定名解決命名沖突 408
14.1.2 使用別名解決命名沖突 409
14.1.3 創(chuàng)建嵌套的命名空間 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代碼、類型元數(shù)據(jù)和程序集清單 415
14.3.4 可選的程序集資源 415
14.4 構(gòu)建和使用自定義類庫 416
14.4.1 清單 418
14.4.2 CIL 421
14.4.3 類型元數(shù)據(jù) 421
14.4.4 構(gòu)建C#客戶端應(yīng)用程序 422
14.4.5 構(gòu)建Visual Basic客戶端應(yīng)用程序 424
14.4.6 實現(xiàn)跨語言繼承 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 凍結(jié)當(dāng)前的共享程序集 439
14.8.2 構(gòu)建共享程序集2.0.0.0版本 440
14.8.3 動態(tài)重定向到共享程序集的特定版本 441
14.9 發(fā)行者策略程序集 443
14.10 <codeBase>元素 444
14.11 System.Configuration命名空間 446
14.12 配置文件架構(gòu)文檔 447
14.13 小結(jié) 448
第15章 類型反射、晚期綁定和基于特性的編程 449
15.1 類型元數(shù)據(jù)的必要性 449
15.1.1 查看(部分)EngineState枚舉的元數(shù)據(jù) 450
15.1.2 查看(部分)Car類型的元數(shù)據(jù) 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 構(gòu)建自定義的元數(shù)據(jù)查看器 456
15.3.1 反射方法 456
15.3.2 反射字段和屬性 457
15.3.3 反射實現(xiàn)的接口 457
15.3.4 顯示其他信息 458
15.3.5 實現(xiàn)Main() 458
15.3.6 反射泛型類型 460
15.3.7 反射方法參數(shù)和返回值 460
15.4 動態(tài)加載程序集 461
15.5 反射共享程序集 464
15.6 晚期綁定 465
15.6.1 System.Activator類 466
15.6.2 調(diào)用沒有參數(shù)的方法 467
15.6.3 調(diào)用有參數(shù)的方法 468
15.7 .NET特性的作用 469
15.7.1 特性的使用者 470
15.7.2 在C#中使用特性 470
15.7.3 C#特性簡化符號 471
15.7.4 為特性指定構(gòu)造參數(shù) 472
15.7.5 Obsolete特性 472
15.8 構(gòu)建自定義特性 473
15.8.1 應(yīng)用自定義特性 473
15.8.2 命名屬性語法 474
15.8.3 限制特性使用 474
15.9 程序集級別特性 475
15.10 使用早期綁定反射特性 477
15.11 使用晚期綁定反射特性 478
15.12 反射、晚期綁定和自定義特性的使用背景 479
15.13 構(gòu)建可擴展的應(yīng)用程序 480
15.13.1 構(gòu)建CommonSnappable-Types.dll 480
15.13.2 構(gòu)建C#插件 481
15.13.3 構(gòu)建Visual Basic插件 482
15.13.4 構(gòu)建可擴展的Windows Forms應(yīng)用程序 482
15.14 小結(jié) 485
第16章 動態(tài)類型和動態(tài)語言運行時 486
16.1 dynamic關(guān)鍵字的作用 486
16.1.1 調(diào)用動態(tài)聲明的數(shù)據(jù)的成員 488
16.1.2 Microsoft.CSharp.dll程序集的作用 489
16.1.3 dynamic關(guān)鍵字的作用域 490
16.1.4 dynamic關(guān)鍵字的限制 491
16.1.5 dynamic關(guān)鍵字的實際用途 491
16.2 DLR的作用 492
16.2.1 表達式樹的作用 492
16.2.2 System.Dynamic命名空間的作用 493
16.2.3 表達式樹的動態(tài)運行時查找 493
16.3 使用動態(tài)類型簡化后期綁定調(diào)用 494
16.4 使用動態(tài)數(shù)據(jù)簡化COM互操作 497
16.4.1 主互操作程序集的作用 498
16.4.2 嵌入互操作元數(shù)據(jù) 499
16.4.3 普通COM互操作的難點 500
16.5 使用C# 動態(tài)數(shù)據(jù)進行COM互操作 500
16.6 不使用C# 動態(tài)數(shù)據(jù)進行COM互操作 504
16.7 小結(jié) 505
第17章 進程、應(yīng)用程序域和對象上下文 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 以編程方式啟動或結(jié)束進程 514
17.2.6 使用ProcessStartInfo類控制進程的啟動 515
17.3 .NET應(yīng)用程序域 516
17.4 與默認應(yīng)用程序域進行交互 518
17.4.1 枚舉加載的程序集 519
17.4.2 接收程序集加載通知 520
17.5 創(chuàng)建新的應(yīng)用程序域 521
17.5.1 在自定義應(yīng)用程序域中加載程序集 522
17.5.2 以編程方式卸載應(yīng)用程序域 523
17.6 對象上下文邊界 525
17.6.1 上下文靈活和上下文綁定類型 525
17.6.2 定義上下文綁定對象 526
17.6.3 研究對象的上下文 526
17.7 進程、應(yīng)用程序域和上下文小結(jié) 528
17.8 小結(jié) 528
第18章 CIL和動態(tài)程序集的作用 529
18.1 學(xué)習(xí)CIL語法的原因 529
18.2 CIL指令、特性和操作碼 530
18.2.1 CIL指令的作用 530
18.2.2 CIL特性的作用 530
18.2.3 CIL操作碼的作用 531
18.2.4 區(qū)別CIL操作碼和CIL助記符 531
18.3 入棧和出棧:CIL基于棧的本質(zhì) 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中定義當(dāng)前程序集 539
18.5.3 在CIL中定義命名空間 540
18.5.4 在CIL中定義類類型 540
18.5.5 在CIL中定義和實現(xiàn)接口 541
18.5.6 在CIL中定義結(jié)構(gòu) 542
18.5.7 在CIL中定義枚舉 542
18.5.8 在CIL中定義泛型 543
18.5.9 編譯CILTypes.il文件 543
18.6 .NET基礎(chǔ)類庫、C#和CIL數(shù)據(jù)類型的映射 544
18.7 在CIL中定義類型成員 544
18.7.1 在CIL中定義數(shù)據(jù)字段 545
18.7.2 在CIL中定義類型的構(gòu)造函數(shù) 545
18.7.3 在CIL中定義屬性 546
18.7.4 定義成員參數(shù) 546
18.8 剖析CIL操作碼 547
18.8.1 .maxstack指令 548
18.8.2 在CIL中聲明本地變量 549
18.8.3 在CIL中映射參數(shù)到本地變量 550
18.8.4 this隱式引用 550
18.8.5 在CIL中使用循環(huán)結(jié)構(gòu) 551
18.9 使用CIL構(gòu)建.NET程序集 551
18.9.1 構(gòu)建CILCars.dll 551
18.9.2 構(gòu)建CILCarClient.exe 554
18.10 動態(tài)程序集 555
18.10.1 System.Reflection.Emit命名空間 556
18.10.2 System.Reflection.Emit.ILGenerator的作用 557
18.10.3 產(chǎn)生動態(tài)的程序集 557
18.10.4 產(chǎn)生程序集和模塊集 559
18.10.5 ModuleBuilder類型的作用 560
18.10.6 產(chǎn)生HelloClass類型和字符串成員變量 561
18.10.7 產(chǎn)生構(gòu)造函數(shù) 561
18.10.8 產(chǎn)生SayHello()方法 562
18.10.9 使用動態(tài)產(chǎn)生的程序集 563
18.11 小結(jié) 564
第六部分 .NET基礎(chǔ)類庫
第19章 多線程、并行和異步編程 566
19.1 進程、應(yīng)用程序域、上下文及線程之間的關(guān)系 566
19.1.1 并發(fā)問題 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 異步調(diào)用方法 571
19.4.1 同步調(diào)用線程 572
19.4.2 AsyncCallback委托的作用 573
19.4.3 AsyncResult類的作用 575
19.4.4 傳遞和接收自定義狀態(tài)數(shù)據(jù) 575
19.5 System.Threading命名空間 576
19.6 System.Threading.Thread類 577
19.6.1 獲得當(dāng)前執(zhí)行線程的統(tǒng)計信息 578
19.6.2 Name屬性 579
19.6.3 Priority屬性 579
19.7 手工創(chuàng)建次線程 580
19.7.1 使用ThreadStart委托 580
19.7.2 使用ParameterizedThreadStart委托 582
19.7.3 AutoResetEvent類 583
19.7.4 前臺線程和后臺線程 584
19.8 并發(fā)問題 585
19.8.1 使用C#的lock關(guān)鍵字進行同步 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 使用任務(wù)并行庫進行并行編程 595
19.11.1 任務(wù)并行庫API 595
19.11.2 Parallel類的作用 596
19.11.3 使用Parallel類的數(shù)據(jù)并行 596
19.11.4 在次線程中訪問UI元素 598
19.11.5 Task類 599
19.11.6 處理取消請求 599
19.11.7 使用并行類的任務(wù)并行 601
19.12 并行LINQ查詢(PLINQ) 603
19.12.1 使用PLINQ查詢 604
19.12.2 取消PLINQ查詢 604
19.13 .NET 4.5下的異步調(diào)用 605
19.13.1 C# async和await關(guān)鍵字初探 606
19.13.2 異步方法的命名約定 607
19.13.3 返回void的異步方法 609
19.13.4 具有多個await的異步方法 609
19.13.5 用async/await改進AddWithThreads示例 610
19.14 小結(jié) 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類型創(chuàng)建子目錄 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 直接創(chuàng)建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 小結(jié) 651
第21章 ADO.NET之一:連接層 653
21.1 ADO.NET的宏觀定義 653
21.2 ADO.NET數(shù)據(jù)提供程序 655
21.2.1 微軟提供的ADO.NET數(shù)據(jù)提供程序 656
21.2.2 關(guān)于System.Data.Oracle-Client.dll 657
21.2.3 選擇第三方的數(shù)據(jù)提供程序 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 使用接口的抽象數(shù)據(jù)提供程序 662
21.6 創(chuàng)建AutoLot數(shù)據(jù)庫 665
21.6.1 創(chuàng)建Inventory表 665
21.6.2 為Inventory表添加測試記錄 667
21.6.3 編寫GetPetName()存儲過程 668
21.6.4 創(chuàng)建Customers和Orders表 669
21.6.5 可視化創(chuàng)建表關(guān)系 671
21.7 ADO.NET數(shù)據(jù)提供程序工廠模型 672
21.7.1 完整的數(shù)據(jù)提供程序工廠的例子 673
21.7.2 數(shù)據(jù)提供程序工廠模型的潛在缺陷 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 使用數(shù)據(jù)讀取器 681
21.10 構(gòu)建可重用的數(shù)據(jù)訪問庫 683
21.10.1 增加連接邏輯 684
21.10.2 增加插入邏輯 685
21.10.3 增加刪除邏輯 686
21.10.4 增加更新邏輯 686
21.10.5 增加選擇邏輯 687
21.10.6 使用參數(shù)化的命令對象 688
21.10.7 執(zhí)行存儲過程 690
21.11 創(chuàng)建控制臺UI前端 691
21.11.1 實現(xiàn)Main()方法 691
21.11.2 實現(xiàn)ShowInstructions()方法 693
21.11.3 實現(xiàn)ListInventory()方法 693
21.11.4 實現(xiàn)DeleteCar()方法 694
21.11.5 實現(xiàn)InsertNewCar()方法 694
21.11.6 實現(xiàn)UpdateCarPetName()方法 695
21.11.7 實現(xiàn)LookUpPetName() 696
21.12 數(shù)據(jù)庫事務(wù) 697
21.12.1 ADO.NET事務(wù)對象的主要成員 697
21.12.2 為AutoLot數(shù)據(jù)庫添加CreditRisks表 698
21.12.3 為InventoryDAL添加事物方法 699
21.12.4 測試數(shù)據(jù)庫事務(wù) 700
21.13 小結(jié) 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 構(gòu)建DataSet 705
22.3 使用DataColumn 705
22.3.1 構(gòu)建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中的數(shù)據(jù) 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 從泛型List<T>合成DataTable 717
22.6.2 從DataTable中刪除行 719
22.6.3 根據(jù)篩選條件選擇行 720
22.6.4 在DataTable中更新行 722
22.6.5 使用DataView類型 723
22.7 使用數(shù)據(jù)適配器 724
22.7.1 一個簡單的數(shù)據(jù)適配器示例 725
22.7.2 映射數(shù)據(jù)庫名稱為友好名稱 726
22.8 向AutoLotDAL.dll添加斷開連接功能 727
22.8.1 定義初始類類型 727
22.8.2 使用SqlCommandBuilder來配置數(shù)據(jù)適配器 728
22.8.3 實現(xiàn)GetAllInventory() 729
22.8.4 實現(xiàn)UpdateInventory() 729
22.8.5 設(shè)置版本號 729
22.8.6 測試非連接的功能 730
22.9 多表DataSet對象和數(shù)據(jù)關(guān)系 731
22.9.1 建立數(shù)據(jù)適配器 732
22.9.2 建立表間關(guān)系 733
22.9.3 更新Database表 733
22.9.4 在關(guān)聯(lián)表中切換 734
22.10 Windows Forms數(shù)據(jù)庫設(shè)計器工具 736
22.10.1 可視化設(shè)計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 強類型的數(shù)據(jù)適配器 743
22.10.7 完成Windows Forms應(yīng)用程序 744
22.11 將強類型的數(shù)據(jù)庫代碼隔離到類庫中 744
22.11.1 查看生成的代碼 746
22.11.2 用生成的代碼選擇數(shù)據(jù) 747
22.11.3 用生成的代碼插入數(shù)據(jù) 748
22.11.4 用生成的代碼刪除數(shù)據(jù) 748
22.11.5 用生成的代碼調(diào)用存儲過程 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 小結(jié) 754
第23章 ADO.NET之三:Entity Framework 756
23.1 Entity Framework的作用 756
23.1.1 實體的作用 758
23.1.2 Entity Framework的基礎(chǔ)知識 760
23.2 創(chuàng)建和分析EDM 764
23.3 對概念模型進行編程 774
23.4 AutoLotDAL 4.0版,加入實體 779
23.4.1 導(dǎo)航屬性的作用 780
23.4.2 在LINQ to Entity查詢中使用導(dǎo)航屬性 781
23.4.3 調(diào)用存儲過程 782
23.5 將數(shù)據(jù)實體綁定到Windows Forms GUI 783
23.6 展望.NET數(shù)據(jù)訪問API的未來 786
23.7 小結(jié) 787
第24章 LINQ to XML簡介 788
24.1 兩個XML API的故事 788
24.1.1 更優(yōu)秀的DOM——LINQ to XML 789
24.1.2 更優(yōu)秀的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 從數(shù)組和容器中生成文檔 797
24.3.2 加載和解析XML內(nèi)容 798
24.4 在內(nèi)存中操作XML文檔 798
24.4.1 構(gòu)建LINQ to XML應(yīng)用程序的UI 799
24.4.2 引入Inventory.xml文件 799
24.4.3 定義LINQ to XML輔助類 800
24.4.4 將UI組裝到輔助類 801
24.5 小結(jié) 802
第25章 WCF 803
25.1 各種分布式計算API 803
25.1.1 DCOM的作用 804
25.1.2 COM+/企業(yè)服務(wù)的作用 804
25.1.3 MSMQ的作用 805
25.1.4 .NET Remoting的作用 805
25.1.5 XML Web服務(wù)的作用 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應(yīng)用程序的基本構(gòu)成 811
25.6 WCF的ABC 812
25.6.1 WCF契約 813
25.6.2 WCF綁定 814
25.6.3 WCF地址 816
25.7 構(gòu)建WCF服務(wù) 816
25.7.1 [ServiceContract]特性 818
25.7.2 [OperationContract]特性 819
25.7.3 作為操作契約的服務(wù)類型 819
25.8 承載WCF服務(wù) 820
25.8.1 在App.config文件中創(chuàng)建
ABC 820
25.8.2 針對ServiceHost類型進行編程 821
25.8.3 指定庫地址 821
25.8.4 ServiceHost類型的功能 823
25.8.5 <system.serviceModel>元素的細節(jié) 824
25.8.6 啟用元數(shù)據(jù)交換 825
25.9 構(gòu)建WCF客戶端應(yīng)用程序 827
25.9.1 使用svcutil.exe生成代理代碼 827
25.9.2 使用Visual Studio生成代理代碼 828
25.9.3 配置基于TCP的綁定 830
25.10 簡化配置設(shè)置 831
25.10.1 使用默認終結(jié)點 831
25.10.2 使用多重綁定公開單獨的WCF服務(wù) 832
25.10.3 修改WCF綁定的設(shè)置 833
25.10.4 使用默認的MEX行為配置 835
25.10.5 刷新客戶端代理和選擇綁定 836
25.11 使用WCF服務(wù)庫項目模板 837
25.11.1 構(gòu)建簡單的Math服務(wù) 837
25.11.2 使用WcfTestClient.exe測試WCF服務(wù) 838
25.11.3 使用SvcConfigEditor.exe修改配置文件 839
25.12 以Windows服務(wù)承載WCF服務(wù) 840
25.12.1 在代碼中指定ABC 841
25.12.2 啟用MEX 843
25.12.3 創(chuàng)建Windows服務(wù)安裝程序 843
25.12.4 安裝Windows服務(wù) 845
25.13 從客戶端異步調(diào)用服務(wù) 845
25.14 定義WCF數(shù)據(jù)契約 847
25.14.1 使用Web相關(guān)的WCF服務(wù)項目模板 848
25.14.2 實現(xiàn)服務(wù)契約 849
25.14.3 *.svc文件的作用 851
25.14.4 更新web.config文件 851
25.14.5 測試服務(wù) 851
25.15 小結(jié) 852
第26章 Windows Workflow Foundation簡介 853
26.1 定義業(yè)務(wù)流程 853
26.2 構(gòu)建簡單的工作流 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 狀態(tài)機活動 863
26.4.5 運行時活動與基元活動 863
26.4.6 事務(wù)活動 863
26.4.7 集合活動和錯誤處理活動 864
26.5 構(gòu)建流程圖工作流 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 構(gòu)建“true”條件 869
26.5.7 使用ForEach<T>活動 870
26.5.8 完成應(yīng)用程序 872
26.5.9 我們做了什么 873
26.6 在專門的DLL中構(gòu)建Squence工作流 874
26.6.1 定義初始化項目 874
26.6.2 引入程序集和命名空間 876
26.6.3 定義工作流參數(shù) 877
26.6.4 定義工作流變量 877
26.6.5 使用Assign活動 878
26.6.6 使用If和Switch活動 879
26.6.7 構(gòu)建自定義代碼活動 882
26.7 使用工作流庫 884
26.8 小結(jié) 886
第七部分 WPF
第27章 WPF和XAML 888
27.1 WPF背后的動機 888
27.1.1 統(tǒng)一多種不同的API 889
27.1.2 通過XAML將關(guān)注點分離 889
27.1.3 提供優(yōu)化的呈現(xiàn)模型 890
27.1.4 簡化復(fù)雜的UI編程 890
27.2 各種形式的WPF應(yīng)用程序 891
27.2.1 傳統(tǒng)的桌面應(yīng)用程序 891
27.2.2 基于導(dǎo)航的WPF應(yīng)用程序 892
27.2.3 XBAP應(yīng)用程序 893
27.2.4 WPF/Silverlight關(guān)系 894
27.3 WPF程序集 894
27.3.1 Application類的作用 896
27.3.2 Window類的作用 897
27.4 創(chuàng)建不使用XAML的WPF應(yīng)用程序 900
27.4.1 創(chuàng)建強類型的Window類 902
27.4.2 創(chuàng)建簡單的用戶界面 902
27.4.3 與應(yīng)用程序級別的數(shù)據(jù)交互 904
27.4.4 處理Window對象的關(guān)閉 905
27.4.5 攔截鼠標事件 906
27.4.6 攔截鍵盤事件 907
27.5 僅使用XAML構(gòu)建WPF應(yīng)用程序 908
27.5.1 用XAML定義窗體對象 909
27.5.2 用XAML定義應(yīng)用對象 910
27.5.3 通過msbuild.exe處理XAML文件 911
27.6 將標記轉(zhuǎn)換為.NET程序集 913
27.6.1 將窗口XAML標記映射到C#代碼 913
27.6.2 BAML的作用 914
27.6.3 將應(yīng)用程序XAML標記映射到C#代碼 915
27.6.4 XAML到程序集的過程摘要 916
27.7 WPF XAML語法 916
27.7.1 Kaxaml 917
27.7.2 XAML XML命名空間和XAML關(guān)鍵字 918
27.7.3 控制類和成員變量的可見性 920
27.7.4 XAML元素、XAML特性和類型轉(zhuǎn)換器 920
27.7.5 XAML屬性元素語法 921
27.7.6 XAML附加屬性 922
27.7.7 XAML標記擴展 923
27.8 使用代碼隱藏文件構(gòu)建WPF應(yīng)用程序 924
27.8.1 為MainWindow類添加代碼文件 925
27.8.2 為MyApp類添加代碼文件 925
27.8.3 用msbuild.exe處理代碼文件 926
27.9 使用Visual Studio構(gòu)建WPF應(yīng)用程序 927
27.9.1 WPF項目模板 927
27.9.2 工具箱和XAML設(shè)計器/編輯器 928
27.9.3 使用Properties窗口設(shè)置屬性 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構(gòu)建自定義XAML編輯器 933
27.10.1 設(shè)計窗口的GUI 934
27.10.2 實現(xiàn)Loaded事件 935
27.10.3 實現(xiàn)按鈕的Click事件 936
27.10.4 實現(xiàn)Closed事件 937
27.10.5 測試應(yīng)用程序 937
27.10.6 探索WPF 文檔 938
27.11 小結(jié) 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 文檔中的細節(jié) 943
28.2 Visual Studio WPF設(shè)計器 944
28.2.1 在Visual Studio中使用WPF控件 944
28.2.2 使用Document Outline編輯器 945
28.3 使用面板控制內(nèi)容布局 946
28.3.1 在Canvas面板中放置內(nèi)容 948
28.3.2 在WrapPanel面板中放置內(nèi)容 949
28.3.3 在StackPanel面板中放置內(nèi)容 951
28.3.4 在Grid面板中放置內(nèi)容 952
28.3.5 在DockPanel面板中放置內(nèi)容 954
28.3.6 啟用Panel類型的滾動功能 955
28.3.7 使用Visual Studio設(shè)計器配置Panel 956
28.4 使用嵌套面板構(gòu)建窗口框架 959
28.4.1 構(gòu)建菜單系統(tǒng) 960
28.4.2 構(gòu)建工具條 962
28.4.3 構(gòu)建狀態(tài)條 963
28.4.4 完成UI設(shè)計 963
28.4.5 實現(xiàn)MouseEnter/MouseLeave事件處理程序 964
28.4.6 實現(xiàn)拼寫檢查邏輯 964
28.5 WPF命令 965
28.5.1 內(nèi)置的命令對象 965
28.5.2 將命令連接到Command屬性 966
28.5.3 將命令連接到任意行為 967
28.5.4 使用Open和Save命令 968
28.6 深入了解WPF API和控件 970
28.7 構(gòu)建Ink API選項卡 972
28.7.1 設(shè)計工具條 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數(shù)據(jù) 981
28.8 Documents API 982
28.8.1 塊元素和內(nèi)聯(lián)元素 982
28.8.2 文檔布局管理器 982
28.9 構(gòu)建Documents選項卡 983
28.9.1 使用代碼填充FlowDocument 984
28.9.2 啟用批注和便簽 985
28.9.3 保存和加載流文檔 986
28.10 WPF數(shù)據(jù)綁定模型 987
28.10.1 構(gòu)建Data Binding選項卡 988
28.10.2 使用Visual Studio建立數(shù)據(jù)綁定 988
28.10.3 DataContext屬性 990
28.10.4 使用IValueConverter進行數(shù)據(jù)轉(zhuǎn)換 991
28.10.5 在代碼中建立數(shù)據(jù)綁定 992
28.10.6 構(gòu)建DataGrid選項卡 992
28.11 小結(jié) 994
第29章 WPF圖形呈現(xiàn)服務(wù) 995
29.1 理解WPF的圖形呈現(xiàn)服務(wù) 995
29.2 使用形狀呈現(xiàn)圖形數(shù)據(jù) 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數(shù)據(jù) 1011
29.5 使用Visual Studio變換編輯器 1012
29.5.1 構(gòu)建初始布局 1012
29.5.2 在設(shè)計時應(yīng)用變換 1014
29.5.3 在代碼中變換畫布 1015
29.6 使用繪圖和幾何圖形呈現(xiàn)圖形數(shù)據(jù) 1015
29.6.1 使用幾何圖形構(gòu)建DrawingBrush 1017
29.6.2 用DrawingBrush進行繪畫 1017
29.6.3 在DrawingImage中使用繪圖類型 1018
29.7 Expression Design的作用 1019
29.7.1 將示例設(shè)計文件導(dǎo)出為XAML 1019
29.7.2 將圖像數(shù)據(jù)導(dǎo)入WPF對象 1021
29.7.3 與熊共舞 1022
29.8 使用可視化層呈現(xiàn)圖形數(shù)據(jù) 1022
29.9 小結(jié) 1028
第30章 WPF資源、動畫和樣式 1029
30.1 理解WPF資源系統(tǒng) 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 應(yīng)用程序級別的資源 1038
30.2.6 定義合并的資源字典 1039
30.2.7 定義只含資源的程序集 1041
30.3 理解WPF動畫服務(wù) 1042
30.3.1 動畫類型的作用 1043
30.3.2 To、From和By屬性 1043
30.3.3 Timeline基類的作用 1044
30.3.4 用C#代碼創(chuàng)建動畫 1044
30.3.5 控制動畫的速度 1045
30.3.6 動畫的反轉(zhuǎn)和循環(huán) 1046
30.4 用XAML創(chuàng)建動畫 1047
30.4.1 演示圖板的作用 1047
30.4.2 事件觸發(fā)器的作用 1048
30.4.3 使用不連續(xù)的關(guān)鍵幀創(chuàng)建動畫 1048
30.5 WPF樣式的作用 1049
30.5.1 定義并使用樣式 1050
30.5.2 重寫樣式設(shè)置 1050
30.5.3 使用TargetType自動應(yīng)用樣式 1051
30.5.4 繼承已有的樣式 1052
30.5.5 未命名樣式的作用 1052
30.5.6 使用觸發(fā)器定義樣式 1053
30.5.7 使用多個觸發(fā)器定義樣式 1053
30.5.8 動畫樣式 1054
30.5.9 以編程方式設(shè)置樣式 1054
30.6 小結(jié) 1056
第31章 依賴屬性、路由事件和模板 1057
31.1 依賴屬性的作用 1057
31.1.1 已知的依賴屬性 1059
31.1.2 CLR屬性包裝器的重要說明 1061
31.2 構(gòu)建自定義依賴屬性 1061
31.2.1 添加數(shù)據(jù)驗證例程 1065
31.2.2 響應(yīng)屬性的改變 1065
31.3 路由事件 1066
31.3.1 路由冒泡事件的作用 1067
31.3.2 繼續(xù)或中止冒泡 1068
31.3.3 路由隧道事件的作用 1068
31.4 邏輯樹、可視樹和默認模板 1070
31.4.1 以編程方式查看邏輯樹 1070
31.4.2 以編程方式查看可視樹 1072
31.4.3 以編程方式查看控件的默認模板 1073
31.5 使用觸發(fā)器框架構(gòu)建自定義控件模板 1075
31.5.1 模板資源 1076
31.5.2 使用觸發(fā)器添加可視提示 1078
31.5.3 {TemplateBinding}標記擴展的作用 1079
31.5.4 ContentPresenter的作用 1080
31.5.5 融合模板和樣式 1081
31.6 小結(jié) 1082
第八部分 ASP.NET Web Form
第32章 ASP.NET Web Form 1084
32.1 HTTP的作用 1084
32.1.1 HTTP請求/響應(yīng)循環(huán) 1084
32.1.2 HTTP是無狀態(tài)協(xié)議 1085
32.2 Web應(yīng)用程序和Web服務(wù)器 1085
32.2.1 IIS虛擬目錄的作用 1085
32.2.2 ASP.NET Development Web Server 1086
32.3 HTML的作用 1087
32.3.1 HTML文檔結(jié)構(gòu) 1087
32.3.2 HTML表單的作用 1088
32.3.3 Visual Studio HTML設(shè)計器工具 1088
32.3.4 構(gòu)建HTML表單 1090
32.4 客戶端腳本的作用 1091
32.5 回發(fā)到Web服務(wù)器 1093
32.6 ASP.NET API概覽 1094
32.6.1 ASP.NET 2.0及其后續(xù)版本的主要特性 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 構(gòu)建單個文件的ASP.NET網(wǎng)頁 1097
32.7.1 引用AutoLotDAL.dll 1098
32.7.2 設(shè)計UI 1098
32.7.3 添加數(shù)據(jù)訪問邏輯 1099
32.7.4 ASP.NET指令的作用 1101
32.7.5 腳本塊 1102
32.7.6 ASP.NET控件聲明 1103
32.8 使用代碼文件構(gòu)建ASP.NET Web頁面 1104
32.8.1 引用AutoLotDAL.dll程序集 1106
32.8.2 更新代碼文件 1107
32.8.3 調(diào)試并跟蹤ASP.NET頁面 1107
32.9 ASP.NET Web Site和ASP.NET Web Application 1108
32.10 ASP.NET網(wǎng)站目錄結(jié)構(gòu) 1110
32.10.1 引用程序集 1110
32.10.2 App_Code文件夾的作用 1111
32.11 頁面類型的繼承鏈 1111
32.12 與傳入的HTTP請求交互 1113
32.12.1 獲得瀏覽器統(tǒng)計數(shù)據(jù) 1113
32.12.2 訪問傳入的表單數(shù)據(jù) 1114
32.12.3 IsPostBack屬性 1115
32.13 與輸出HTTP響應(yīng)交互 1115
32.13.1 提交HTML內(nèi)容 1116
32.13.2 重定向用戶 1116
32.14 ASP.NET網(wǎng)頁的生命周期 1117
32.14.1 AutoEventWireUp特性的作用 1118
32.14.2 Error事件 1118
32.15 web.config文件的作用 1120
32.16 小結(jié) 1121
第33章 ASP.NET Web控件、母版頁和主題 1122
33.1 Web控件的本質(zhì) 1122
33.1.1 服務(wù)器端事件處理 1123
33.1.2 AutoPostBack屬性 1123
33.2 Control和WebControl基類 1124
33.2.1 枚舉所包含的控件 1125
33.2.2 動態(tài)添加和刪除控件 1127
33.2.3 與動態(tài)創(chuàng)建的控件交互 1128
33.2.4 WebControl基類的功能 1128
33.3 ASP.NET Web控件的類別 1129
33.3.1 關(guān)于System.Web.UI.HtmlControls的簡短說明 1131
33.3.2 Web控件的文檔 1132
33.4 構(gòu)建ASP.NET汽車網(wǎng)站 1132
33.4.1 使用ASP.NET母版頁工作 1133
33.4.2 定義默認的內(nèi)容頁面 1138
33.4.3 設(shè)計Inventory內(nèi)容頁面 1140
33.4.4 設(shè)計Build-a-Car內(nèi)容頁面 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 創(chuàng)建ValidationSummary 1150
33.5.7 定義驗證分組 1151
33.6 使用主題 1152
33.6.1 *.skin文件 1153
33.6.2 應(yīng)用網(wǎng)站級別的主題 1155
33.6.3 在頁面級別應(yīng)用主題 1155
33.6.4 SkinID屬性 1155
33.6.5 以編程方式分配主題 1156
33.7 小結(jié) 1157
第34章 ASP.NET狀態(tài)管理技術(shù) 1158
34.1 狀態(tài)問題 1158
34.2 ASP.NET狀態(tài)管理技術(shù) 1160
34.3 ASP.NET視圖狀態(tài)的作用 1160
34.3.1 演示視圖狀態(tài) 1161
34.3.2 添加自定義視圖狀態(tài)數(shù)據(jù) 1162
34.4 Global.asax文件的作用 1163
34.4.1 全局最后異常事件處理程序 1164
34.4.2 HttpApplication基類 1165
34.5 應(yīng)用程序狀態(tài)與會話狀態(tài)的差別 1165
34.5.1 維護應(yīng)用程序級的狀態(tài)數(shù)據(jù) 1166
34.5.2 修改應(yīng)用程序數(shù)據(jù) 1168
34.5.3 處理Web應(yīng)用程序的關(guān)閉 1169
34.6 使用應(yīng)用程序緩存 1169
34.6.1 使用數(shù)據(jù)緩存 1170
34.6.2 修改*.aspx文件 1172
34.7 維護會話數(shù)據(jù) 1174
34.8 cookie 1177
34.8.1 創(chuàng)建cookie 1177
34.8.2 讀取傳入的cookie數(shù)據(jù) 1178
34.9 <sessionState>元素的作用 1179
34.9.1 在ASP.NET會話狀態(tài)服務(wù)器中保存會話數(shù)據(jù) 1179
34.9.2 把會話數(shù)據(jù)保存在專門的數(shù)據(jù)庫中 1180
34.10 ASP.NET用戶配置API 1181
34.10.1 ASPNETDB.mdf數(shù)據(jù)庫 1181
34.10.2 在web.config中定義用戶配置 1182
34.10.3 以編程方式訪問用戶配置數(shù)據(jù) 1183
34.10.4 分組用戶配置數(shù)據(jù)并且持久化自定義對象 1185
34.11 小結(jié) 1186
索引 1187
精通C#(中文版)內(nèi)容簡介
本書是C# 領(lǐng)域久負盛名的經(jīng)典著作,深入全面地講解了C# 編程語言和.NET 平臺的核心內(nèi)容,并結(jié)合大量示例剖析相關(guān)概念。全書分為八部分:C# 和.NET 平臺、C# 核心編程結(jié)構(gòu)、C# 面向?qū)ο缶幊獭⒏呒塁# 編程結(jié)構(gòu)、用.NET 程序集編程、.NET 基礎(chǔ)類庫、WPF 和ASP.NET Web Forms。第6 版是對第5 版的進一步更新和完善,內(nèi)容涵蓋了最先進的.NET 編程技術(shù)和技巧,并準確呈現(xiàn)出C# 編程語言的最新變化和.NET 4.5 Framework 的新特性。
本書由微軟C# MVP Andrew Troelsen 編寫,第6 版專門針對C# 5.0 和.NET 4.5 進行了細致入微的修訂,是各層次.NET 開發(fā)人員的必讀之作。
精通C#(中文版)內(nèi)容截圖
- PC官方版
- 安卓官方手機版
- IOS官方手機版