《C#程序設計實用教程》是一本講解C#語言和.NET技術的教材,主要內容包括.NET概述、C#語法基礎、控制語句、面向對象技術、集合和泛型、常用類和數據結構、Windows窗體和控件、GDI+、文件和流操作、線程和進程、ADO.NET 和Web編程等。《C#程序設計實用教程》結合微軟公司Visual Studio 2008和.NET平臺進行講解,同時每一章后都安排有針對性的練習題。全書各章都精心編排了相關實例,同時為了幫助讀者更好地在實際項目中體會《C#程序設計實用教程》所講內容,特別安排了五個綜合項目,供讀者學習參考。
《C#程序設計實用教程》內容翔實、結構合理清晰、實用性強。初學者可以很容易借助《C#程序設計實用教程》掌握Visual Studio 2008和.NET平臺的使用,開始C#編程開發之旅。有一定基礎的讀者也可以從《C#程序設計實用教程》中獲得很多有價值的參考信息。《C#程序設計實用教程》適合作為高等院校C#語言課程的教材,也可作為初中級編程人員的自學參考書。
言
第1章 .NET概述1
1.1 .NET1
1.2 .NET平臺的組成1
1.3 .NET Framework2
1.3.1 公共語言運行時3
1.3.2 .NET Framework類庫和命名空間4
1.4 C#與其他編程語言的比較5
1.4.1 與C、C++的比較5
1.4.2 與Java的比較5
1.5 Visual Studio 20085
1.5.1 Visual Studio 2008的安裝6
1.5.2 使用Visual Studio 20088
1.6 小結13
1.7 習題13
第2章 數據類型、運算符及其表達式15
2.1 C#基本語法15
2.1.1 語句15
2.1.2 空白15
2.1.3 注釋16
2.2 變量和常量18
2.2.1 變量18
2.2.2 常量19
2.3 值類型20
2.3.1 簡單值類型20
2.3.2 枚舉類型23
2.3.3 結構體類型25
2.4 引用類型27
2.5 運算符27
2.5.1 算術運算符27
2.5.2 賦值運算符28
2.5.3 關系運算符28
2.5.4 邏輯運算符28
2.5.5 條件運算符29
2.5.6 typeof運算符29
2.6 小結29
2.7 習題29
第3章 控制語句31
3.1 流程控制概述31
3.2 分支語句32
3.2.1 if語句32
3.2.2 switch語句34
3.3 循環結構35
3.3.1 while循環語句36
3.3.2 do-while循環37
3.3.3 for循環38
3.3.4 foreach循環40
3.4 跳轉語句41
3.4.1 break語句41
3.4.2 continue語句42
3.4.3 return語句42
3.4.4 goto語句43
3.5 預處理指令44
3.5.1 region預處理指令45
3.5.2 定義預處理指令45
3.5.3 條件預處理指令45
3.5.4 warning和error預處理指令46
3.6 小結47
3.7 習題47
3.8 綜合項目-猜數字游戲48
3.8.1 項目分析48
3.8.2 項目設計49
3.8.3 項目實現50
第4章 面向對象程序設計基礎55
4.1 類與對象概述55
4.2 類的定義56
4.3 類的使用-實例化及使用對象57
4.3.1 聲明對象57
4.3.2 實例化類得到對象58
4.3.3 訪問對象58
4.4 訪問控制59
4.4.1 訪問修飾符public59
4.4.2 訪問修飾符private59
4.4.3 訪問修飾符protected59
4.4.4 訪問修飾符internal60
4.5 類的封裝性與屬性60
4.5.1 類的封裝性60
4.5.2 屬性60
4.5.3 方法62
4.6 方法的重載63
4.7 類的構造函數與析構函數63
4.8 靜態成員66
4.9 委托和事件68
4.10 應用實例70
4.11 小結73
4.12 習題73
第5章 面向對象提高74
5.1 封裝、繼承、多態74
5.1.1 封裝74
5.1.2 繼承74
5.1.3 多態78
5.2 抽象類、密封類與接口82
5.2.1 抽象類82
5.2.2 密封類83
5.2.3 接口84
5.3 this和base關鍵字87
5.4 異常處理90
5.5 小結91
5.6 習題91
5.7 綜合實例項目-汽車公司93
5.7.1 項目分析93
5.7.2 項目設計93
5.7.3 項目實現94
第6章 集合與泛型99
6.1 數組99
6.2 集合100
6.2.1 列表101
6.2.2 隊列103
6.2.3 哈希表105
6.2.4 棧107
6.2.5 有序表109
6.3 泛型111
6.3.1 List111
6.3.2 Stack113
6.4 小結114
6.5 習題114
第7章 常用類和數據類型115
7.1 字符串115
7.1.1 System.String類116
7.1.2 System.Text.StringBuilder類121
7.2 日期時間125
7.2.1 DateTime結構126
7.2.2 TimeSpan結構128
7.3 System.Object類129
7.4 隨機數對象130
7.5 類型之間的轉換131
7.6 小結134
7.7 習題134
第8章 Windows窗體和控件135
8.1 窗體概述135
8.1.1 創建窗體應用程序135
8.1.2 設置窗體的屬性136
8.1.3 窗體的事件136
8.1.4 窗體的方法137
8.1.5 特殊窗體的創建137
8.2 窗體控件138
8.2.1 窗體控件概述138
8.2.2 窗體控件屬性138
8.2.3 常用的窗體控件139
8.3 窗體的菜單154
8.4 鼠標鍵盤事件155
8.4.1 鼠標操作155
8.4.2 鍵盤操作157
8.5 對話框控件158
8.5.1 使用MessageBox對話框158
8.5.2 使用FontDialog對話框159
8.5.3 使用ColorDialog對話框161
8.5.4 使用FolderBrowserDialog對話框162
8.6 SDI和MDI應用程序163
8.7 小結165
8.8 習題165
第9章 GDI+166
9.1 GDI+概述166
9.2 C#的圖形繪制結構和類166
9.2.1 常用繪圖結構166
9.2.2 Graphics類167
9.2.3 Pen類168
9.2.4 Brush類及Brush的派生類169
9.2.5 Color類170
9.2.6 Font 類171
9.3 繪制圖形171
9.3.1 繪制直線171
9.3.2 繪制矩形172
9.3.3 繪制圓和橢圓173
9.3.4 繪制文本173
9.3.5 繪制圓弧175
9.3.6 繪制曲線175
9.3.7 繪制多邊形175
9.3.8 繪制圖標176
9.3.9 繪制路徑176
9.3.10 繪制扇形176
9.4 填充圖形和清除方法177
9.5 位圖處理178
9.6 坐標變換178
9.7 Paint事件181
9.8 GDI+應用實例183
9.9 小結192
9.10 習題193
9.11 綜合實例項目-小助手193
9.11.1 項目分析193
9.11.2 項目設計193
9.11.3 項目實現195
第10章 文件管理203
10.1 System.IO命名空間概述203
10.2 Windows文件系統204
10.2.1 Directory類與DirectoryInfo類205
10.2.2 File類與FileInfo類207
10.2.3 Path類210
10.2.4 文件屬性212
10.3 讀寫文件213
10.3.1 流概述213
10.3.2 讀寫文本文件214
10.3.3 讀寫二進制文件216
10.4 文件對話框218
10.4.1 打開文件對話框219
10.4.2 保存文件對話框220
10.5 小結221
10.6 習題222
第11章 線程223
11.1 線程概述223
11.2 System.Threading.Thread類224
11.3 線程狀態與線程優先級226
11.3.1 線程狀態226
11.3.2 線程優先級227
11.4 線程間通信229
11.5 線程池230
11.6 線程鎖232
11.6.1 線程同步232
11.6.2 死鎖235
11.7 進程操作238
11.8 小結239
11.9 習題240
11.10 綜合項目-幸運之星240
11.10.1 項目分析240
11.10.2 項目設計240
11.10.3 項目實現241
第12章 ADO.NET247
12.1 ADO.NET簡介247
12.2 ADO.NET的結構247
12.2.1 數據提供者248
12.2.2 數據集249
12.3 使用ADO.NET對象連接SQL Server數據庫250
12.3.1 DataReader讀取數據250
12.3.2 數據集讀取數據252
12.3.3 設置連接屬性253
12.4 使用數據綁定控件257
12.5 更新數據庫259
12.5.1 添加數據記錄259
12.5.2 修改數據記錄261
12.5.3 刪除數據記錄262
12.6 小結264
12.7 習題264
第13章 WEB編程266
13.1 ASP.NET概述266
13.2 ASP.NET網頁267
13.3 服務器控件270
13.3.1 HTML服務器控件270
13.3.2 Web服務器控件271
13.4 驗證控件273
13.5 用戶控件276
13.6 內置對象277
13.7 使用ADO.NET顯示數據庫信息283
13.8 使用AJAX285
13.9 小結287
13.10 習題287
13.11 綜合實例項目-圖書管理系統289
13.11.1 項目分析289
13.11.2 項目設計289
13.11.3 項目實現293
參考文獻301
前面介紹了為了做到線程同步而進行鎖定對象的情況,但是如果用不好線程鎖的話,反倒可能引起線程間的死鎖問題。
死鎖是指兩個或多個進程(或線程)在執行過程中,因爭奪某項資源而造成的一種互相等待的現象,若不強制終止它們,它們將一直等待下去。這時稱系統處于死鎖狀態或系統內產生了死鎖情況,這些一直在互相等待的進程稱為死鎖進程。死鎖對于操作系統來說是個非常嚴重的問題,因為死鎖一般都會引起操作系統的崩潰。對于編程人員來說,一定要避免引起死鎖。
一種情形,發生死鎖的線程都在等待被其他線程占用并堵塞了的資源。例如,如果線程A鎖住了資源1并等待申請資源2,而線程B則鎖住了資源2并等待其他線程釋放資源1,這樣兩個線程就發生了死鎖。
計算機系統中,如果操作系統的資源分配策略不當,更常見的可能是編程人員的程序有問題,就會導致進程因競爭資源不當而產生死鎖的現象。
產生死鎖的主要原因如下。
1)系統內資源不夠所有進程(線程)使用。2)進程問執行的順序不合適。3)資源分配策略不當。
如果系統資源相對充足,進程的資源申請都能夠得到及時滿足;出現死鎖的可能性就很低;否則進程間就會因爭奪有限的資源而陷入死鎖。進程的運行順序與速度不同,也可能產生死鎖。
產生死鎖的必要條件如下。
1)資源互斥:某個資源每次只能被一個進程使用。
2)請求與保持:一個進程因請求資源而陷入等待時,對已申請到的資源保持不放。
3)不剝奪條件:進程己獲得的資源,在未使用完之前,系統不能強行剝奪。
4)循環等待:若干進程之間形成一種頭尾相接的相互循環等待申請資源。