內容簡介
本書采用“案例引導,任務驅動”的編寫方式,深入淺出地講解了C#程序設計的基本方法。
本書重點講解C#程序設計語言的基本語法和常用方法,去掉一些不常用的語法細節,采用語法與實例相結合的形式,將C#基本語言以及各種編程對象融合到具體實例中,側重培養學生解決實際編程問題的能力,同時又可增強學生對C#編程思想的理解。
全書分為18個單元,涵蓋四大專題,包括C#語言基礎、Windows編程、數據訪問、網絡編程。每個單元的案例按照“案例描述→知識鏈接→案例分析與實現→拓展實訓→習題”的順序編寫,實例豐富,內容詳盡,難易適中,重點突出,降低了讀者學習的難度。
本書適合作為高等院校計算機專業學生的教材使用,也可作為自學C#語言程序設計的參考用書。
前 言
首先,感謝您翻閱這本書。
本書的背景
在 .NET 被正式發布之前,NGWS這個術語一直被用于微軟的某些計劃,這些計劃旨在創建一個下一代視窗服務的基于因特網的平臺(Internet-based platform of Next Generation Windows Services)。
史蒂夫·鮑爾默于2000年指出:“交付一個基于因特網的下一代視窗服務平臺是我們公司的重中之重。我們在此談論的突破包括對編程模型、用戶界面、應用程序整合模型、文件系統、新的XML Schema 等的改變。”
作為微軟最重要的開發者工具集,新版Visual Studio 2017旨在幫助開發人員圍繞微軟核心產品和服務打造高效完美的解決方案。當前Visual Studio 2017已經擴展到Mac平臺,這意味著開發者可以在Mac上使用C#、F#、.NET Core、ASP.NET Core、Xamarin和Unity來搭建應用程序。而C#正是.NET平臺主流的開發語言,也是一個現代的、通用的、面向對象的編程語言。因此,它的應用范圍十分廣泛。
本書由作者將過去的教學經驗和實驗指導經驗整理而成,主要針對大學本科或專科相關專業學生的程序設計學習,亦可供相關的開發人員及愛好者入門學習使用。
本書的特色
編程屬于利用抽象概念來思維,通常可以通過簡單的例程形象地進行學習。本書采用“案例描述→知識鏈接→案例分析與實現→拓展實訓→習題”這樣的編寫體例。通過精心選取案例,一改傳統案例的枯燥性,挑選更符合應用,而且生動有趣的案例幫助讀者提高學習效率。在每個單元中,針對初學者容易忽略、出錯,或難于理解的知識點及代碼塊,采用注意、說明等特別形式重點提醒讀者。
本書的組織
在學習面向對象技術的過程中,既需要學習編程的抽象概念,又需要培養編程的實際技能,二者都是非常重要的。學習理論知識時,要防止沉迷于語言細節。如果過多地關注細節,就會分散注意力,導致對某些概念“知其然,而不知其所以然。”
本書面向愛好 C#的零基礎讀者,全面講解C#的基礎知識。在實例的選取上注重實用性,內容詳盡,難易適中,重點突出,降低了讀者學習的難度。
本書涵蓋四大專題,包括C#語言基礎、Windows編程、數據訪問、網絡編程,共18個單元。
第一篇 C#語言基礎
包括1~12單元。
單元1從C#的基礎知識開始進行簡要的介紹,其中包括.NET Framework、Common Language Runtime以及C#的特點等。該單元的目的,是讓讀者快速了解C#的基本概念,讓讀者對C#有一個基本的認識。
單元2全面介紹C#中的數據類型,以及數據類型間的轉換。
程序中變量的值不斷變化,最終產生人們想要的處理結果,而變量值的變化是通過運算符和表達式來實現的。在單元3中,詳細闡述表達式中每種運算符的功能、優先級、結合性及在使用中的注意事項。
在實際的任務中,大多數問題的求解步驟(也就是通常所說的算法)往往都會有若干分支選項或重復執行的情況。所以單元4講解選擇結構程序設計,單元5講解循環結構的程序設計。
隨著程序代碼的增多,任何軟件都難免會出錯,在軟件開發的過程中,進行錯誤捕捉顯得尤為重要,因為有的錯誤會導致軟件功能失常,有的錯誤甚至會造成破壞性損失。在單元6中,主要講解異常處理方法和調試方法。
有時需要存儲多個相同類型的值,這就要用到單元7中介紹的數組和集合的知識。
C#是面向對象的語言,所以在單元8~12中,全面介紹面向對象的知識,包括類和對象的概念及其使用、類的屬性和方法、類的繼承與多態性(虛方法和重寫、抽象類、接口)、委托與事件、泛型程序設計。
第二篇 Windows編程
單元13是Windows編程基礎,單元14是Windows 編程進階。這部分結合一些Windows應用程序實例,介紹最常用控件的屬性、方法、事件及應用,讓讀者對Windows應用程序的設計有進一步的了解和認識。
第三篇 數據訪問
主要分為ADO.NET數據訪問和磁盤文件的讀寫。
ADO.NET是一組用于和數據源進行交互的面向對象類庫,因此,要掌握信息管理系統軟件的開發,就必須掌握ADO.NET數據庫的編程。單元15~16以簡單通俗的例子,闡述C#語言中進行數據庫編程的幾個基本核心對象。
文件是系統的重要組成部分。在物聯網系統中,如何將數據永久保存為文件?如何讀取已有的數據文件?單元17介紹涉及到的文件讀寫技術。
第四篇 網絡編程
計算機技術發展到現在,從應用服務器到PC機,再到手持設備,幾乎都要通過網絡連接起來。現在的應用軟件,大都需要通過網絡來進行通信。所以在單元18中,簡單地引入C#在網絡編程中的應用,而更多的網絡編程技術將在其他教材和課程里深入學習。感興趣的讀者也可以自學。
本書所有案例均在Visual Studio 2017環境下編譯通過。
由于書籍篇幅有限,通常不能將代碼完全列出。強烈建議讀者多編寫代碼實踐,可以運行、調試、修改、補充各個案例與練習。編程技能的訓練目的是掌握足夠多的語言細節以便完成有意義的程序。而真實軟件開發項目中的代碼,則需要更為周全的考慮,例如統一的編程風格、完善的注釋和文檔、各種修飾符的選擇、方法的參數檢查、完整的異常處理和防御編程、有彈性的類層次設計等,所有這些,都需要在編程練習中逐步學會。
本書由向燕飛擔任主編,魏菊霞、彭之軍擔任副主編。具體分工是:第1~14單元由向燕飛編寫,15~16單元由魏菊霞編寫,17~18單元由彭之軍編寫。在出版過程中,我們得到了所在學校領導、同事以及出版社編輯的幫助和指教,特別是奚建清教授、曹琳教授對本書的編寫提出了許多寶貴意見。謹向他們表示衷心感謝。
由于作者水平有限,書中的錯誤和不妥之處在所難免,希望讀者批評指正。有關本書的意見反饋和咨詢,讀者可在清華大學出版社網站的相關版塊中與作者進行交流。
向燕飛
目錄
單元1 我的第一個C#程序 1
1.1 案例描述 2
1.2 知識鏈接 2
1.2.1 .NET概述 2
1.2.2 .NET Framework 3
1.2.3 開發環境和C#語言 4
1.2.4 使用Visual Studio創建項目 9
1.2.5 C#程序結構 12
1.2.6 命名空間 13
1.2.7 程序的運行與調試 13
1.2.8 了解MSDN 14
1.3 案例分析與實現 15
1.3.1 案例分析 15
1.3.2 案例實現 15
習題一 16
單元2 變量與數據類型 17
2.1 案例描述 18
2.2 知識鏈接 18
2.2.1 數據類型 18
2.2.2 變量與常量 25
2.2.3 數據類型間的轉換 28
2.2.4 DateTime 30
2.3 案例分析與實現 32
2.3.1 案例分析 32
2.3.2 案例實現 32
2.4 拓展訓練 34
2.4.1 拓展實訓1:使用變量存儲
一部手機的信息 34
2.4.2 拓展實訓2:數字加密器 34
習題二 35
單元3 運算符和表達式 36
3.1 案例描述 37
3.2 知識鏈接 37
3.2.1 算術運算符與算術表達式 38
3.2.2 賦值運算符與賦值表達式 40
3.2.3 關系運算符與關系表達式 40
3.2.4 邏輯運算符與邏輯表達式 40
3.2.5 條件運算符與條件表達式 41
3.2.6 運算符的優先級與結合順序 42
3.3 案例分析與實現 42
3.3.1 案例分析 42
3.3.2 案例實現 43
3.4 拓展訓練:判斷計算是否正確 44
習題三 44
單元4 順序和選擇結構程序的設計 46
4.1 案例描述 47
4.2 知識鏈接 47
4.2.1 順序結構 48
4.2.2 if分支 49
4.2.3 switch分支 53
4.3 案例分析與實現 56
4.3.1 案例分析 56
4.3.2 案例實現 56
4.4 拓展訓練:旅游價格計算 57
習題四 59
單元5 循環結構程序設計 60
5.1 案例描述 61
5.2 知識鏈接 61
5.2.1 循環結構概述 61
5.2.2 while循環 63
5.2.3 do-while循環 65
5.2.4 for循環 66
5.2.5 循環跳轉:continue語句 68
5.2.6 提前結束循環:break語句 69
5.3 案例分析與實現 70
5.3.1 案例分析 70
5.3.2 案例實現 70
5.4 拓展訓練 73
5.4.1 拓展實訓1:直到型循環 73
5.4.2 拓展實訓2:嵌套循環 73
習題五 74
單元6 程序調試與異常處理 76
6.1 案例描述 77
6.2 知識鏈接 78
6.2.1 異常的概念 78
6.2.2 Visual Studio中的調試方法 79
6.2.3 異常處理 84
6.3 案例分析與實現 87
6.3.1 案例分析 87
6.3.2 案例實現 87
6.4 拓展訓練:創建用戶自定義異常 89
習題六 90
單元7 數組與集合 92
7.1 案例描述 93
7.2 知識鏈接 94
7.2.1 數組的定義和使用 94
7.2.2 用foreach語句遍歷數組 97
7.2.3 數組的常用排序算法 97
7.2.4 集合類 99
7.3 案例分析與實現 103
7.3.1 案例分析 103
7.3.2 案例實現 104
7.4 拓展訓練 105
7.4.1 拓展實訓1:二維數組的
使用 105
7.4.2 拓展實訓2:利用Array進行
排序 106
習題七 106
單元8 類和對象 108
8.1 案例描述 109
8.2 知識鏈接 109
8.2.1 面向對象的基本思想 109
8.2.2 類的聲明和成員組織以及訪問
修飾符 111
8.2.3 創建類實例 114
8.2.4 類的構造函數和析構函數 115
8.3 案例分析與實現 119
8.3.1 案例分析 119
8.3.2 案例實現 120
8.4 拓展訓練 121
8.4.1 拓展實訓1:定義長方
體類 121
8.4.2 拓展實訓2:識別靜態
成員 122
習題八 123
單元9 類的方法和屬性 125
9.1 案例描述 126
9.2 知識鏈接 127
9.2.1 方法的定義 127
9.2.2 方法的調用 128
9.2.3 方法中的參數傳遞 130
9.2.4 方法重載 135
9.2.5 屬性 137
9.3 案例分析與實現 139
9.3.1 案例分析 139
9.3.2 案例實現 141
9.4 拓展訓練:設計一個類的定義和
封裝 143
習題九 145
單元10 類的繼承與多態性 147
10.1 案例描述 148
10.2 知識鏈接 149
10.2.1 類的繼承 149
10.2.2 多態性:虛方法和重寫 155
10.2.3 多態性:抽象類 159
10.2.4 多態性:接口 161
10.3 案例分析與實現 164
10.3.1 案例分析 164
10.3.2 案例實現 165
10.4 拓展訓練:從接口繼承 167
習題十 170
單元11 委托與事件 171
11.1 案例描述 172
11.2 知識鏈接 172
11.2.1 委托和方法 172
11.2.2 事件處理 176
11.3 案例分析與實現 178
11.3.1 案例分析 178
11.3.2 案例實現 180
11.4 拓展訓練:使用委托和事件 182
習題十一 184
單元12 泛型 186
12.1 案例描述 187
12.2 知識鏈接 187
12.2.1 泛型的引入 187
12.2.2 使用泛型類 190
12.2.3 泛型方法 192
12.2.4 泛型約束 193
12.3 案例分析與實現 196
12.3.1 案例分析 196
12.3.2 案例實現 197
12.4 拓展訓練:使用List<T>類 198
習題十二 200
單元13 Windows編程基礎 201
13.1 案例描述 202
13.2 知識鏈接 202
13.2.1 可視化編程原理與技巧 202
13.2.2 Windows窗體 205
13.2.3 控件的常用屬性、方法和
事件 209
13.2.4 Button控件 213
13.2.5 ListBox控件 213
13.2.6 ComboBox控件 217
13.2.7 Label控件 217
13.2.8 LinkLabel控件 218
13.2.9 TextBox控件 219
13.2.10 PictureBox控件 220
13.2.11 Timer控件 221
13.2.12 GroupBox控件 222
13.2.13 Panel控件 222
13.2.14 RadioButton控件 222
13.2.15 CheckBox控件 224
13.2.16 TabControl控件 224
13.3 案例分析與實現 226
13.3.1 案例分析 226
13.3.2 案例實現 226
13.4 拓展訓練:簡易計算器的設計與
實現 228
習題十三 232
單元14 Windows編程進階 233
14.1 案例描述 234
14.2 知識鏈接 234
14.2.1 RichTextBox控件 234
14.2.2 TreeView控件 236
14.2.3 MenuStrip控件 240
14.2.4 ToolStrip控件 242
14.2.5 StatusStrip控件 244
14.2.6 OpenFileDialog控件 244
14.2.7 SaveFileDialog控件 245
14.3 案例分析與實現 246
14.3.1 案例分析 246
14.3.2 案例實現 246
14.4 拓展訓練:搖獎程序的設計與
實現 248
習題十四 252
單元15 創建數據庫連接與數據操作
命令 254
15.1 案例描述 255
15.2 知識鏈接 256
15.2.1 數據庫基礎 256
15.2.2 ADO.NET基礎 258
15.2.3 用Connection對象連接
數據庫 260
15.2.4 用Command對象執行
命令 262
15.2.5 用DataReader對象讀取
數據 263
15.3 案例分析與實現 265
15.3.1 案例分析 265
15.3.2 案例實現 265
15.4 拓展訓練 270
15.4.1 拓展實訓1:綁定下拉框
數據 270
15.4.2 拓展實訓2:用戶注冊 274
習題十五 276
單元16 數據集DataSet與數據綁定
組件 278
16.1 案例描述 279
16.2 知識鏈接 280
16.2.1 數據集DataSet 280
16.2.2 數據適配器DataAdapter 281
16.2.3 數據表DataTable 282
16.2.4 命令生成器Command
Builder 282
16.2.5 DataGridView控件 284
16.3 案例分析與實現 287
16.3.1 案例分析 287
16.3.2 案例實現 287
16.4 拓展訓練 294
16.4.1 拓展實訓1:銷售前臺 294
16.4.2 拓展實訓2:三層架構的設計
與實現 300
習題十六 308
單元17 C#讀寫文件 309
17.1 案例描述 310
17.2 知識鏈接 310
17.2.1 System.IO命名空間介紹 310
17.2.2 File類的重要方法 311
17.2.3 文本文件的讀寫 313
17.2.4 二進制文件的讀寫 315
17.3 案例分析與實現 316
17.3.1 案例分析 316
17.3.2 案例實現 317
17.4 拓展訓練:圖片查看器