前 言
目前大多數(shù)高校計(jì)算機(jī)專(zhuān)業(yè)都開(kāi)設(shè)有計(jì)算機(jī)編程類(lèi)課程,這類(lèi)課程肩負(fù)著講授計(jì)算機(jī)程序設(shè)計(jì)的任務(wù),但側(cè)重面多有不同。\"C#軟件項(xiàng)目開(kāi)發(fā)基礎(chǔ)\"不同于一般的計(jì)算機(jī)編程類(lèi)課程,它是計(jì)算機(jī)科學(xué)與技術(shù)及相關(guān)專(zhuān)業(yè)的一門(mén)重要專(zhuān)業(yè)特色課,主要講授.NET框架下的程序設(shè)計(jì),使學(xué)生對(duì).NET技術(shù)有深入的了解,并能深刻認(rèn)識(shí)C#軟件項(xiàng)目開(kāi)發(fā)。同時(shí),該門(mén)課程也必須注重計(jì)算機(jī)應(yīng)用能力的培養(yǎng)和計(jì)算機(jī)素質(zhì)的全面提高,因此在理論教學(xué)的同時(shí),應(yīng)配套一定的實(shí)驗(yàn)環(huán)節(jié)。
本教材的編寫(xiě)本著與時(shí)俱進(jìn)的原則,針對(duì)計(jì)算機(jī)科學(xué)及相關(guān)專(zhuān)業(yè)的教學(xué)特點(diǎn)和需求,在內(nèi)容上力求反映教學(xué)改革的最新成果,指導(dǎo)學(xué)生進(jìn)一步掌握C#軟件項(xiàng)目開(kāi)發(fā)的方法,學(xué)習(xí)軟件分層、委托事件、Web服務(wù)以及設(shè)計(jì)模式等技術(shù)。
本書(shū)特別強(qiáng)調(diào)了軟件項(xiàng)目的思想、軟件分層的思想、三層架構(gòu)的思想、單元測(cè)試能力、設(shè)計(jì)模式的引入,只有掌握一定的軟件項(xiàng)目經(jīng)驗(yàn)、一定的大型程序的開(kāi)發(fā)思路,才能站得高、看得遠(yuǎn)。對(duì)于閱讀本書(shū)的讀者而言,帶著思考進(jìn)行基礎(chǔ)和本質(zhì)的探索,同時(shí)也能體驗(yàn)技術(shù)學(xué)習(xí)的有效方法。作者在論述大部分的知識(shí)要點(diǎn)時(shí),會(huì)總結(jié)和歸納其重要的規(guī)律和注意事項(xiàng),這些歸納為實(shí)際的編程提供了良好的執(zhí)行法則,讀者應(yīng)該花費(fèi)必要的精力熟練掌握所有的歸納內(nèi)容。
.NET技術(shù)正是一個(gè)大花園的集合,每個(gè)程序開(kāi)發(fā)者必須經(jīng)歷一次深入的磨煉,在基本認(rèn)識(shí)的水平上前進(jìn)一步,才能發(fā)現(xiàn)更多。就像練武之人,除了研習(xí)一招一式(了解常用的控件,了解典型的框架),還得修煉內(nèi)功(認(rèn)識(shí)運(yùn)行機(jī)制,理解框架類(lèi)庫(kù),品味設(shè)計(jì)架構(gòu))。
這些正是本書(shū)呈現(xiàn)于讀者的內(nèi)容,也體現(xiàn)了不同于其他.NET專(zhuān)著的風(fēng)格。
本書(shū)由蘇前敏擔(dān)任主編,楊孜茁、張輝擔(dān)任副主編,具體分工如下:蘇前敏編寫(xiě)了第2、3、4、5、7章,楊孜茁編寫(xiě)了第1章、第9章以及附錄,張輝編寫(xiě)了第6、8、10章。本書(shū)是集體智慧的結(jié)晶,在此對(duì)清華大學(xué)出版社的編輯對(duì)本書(shū)的編輯和出版所做的努力表示感謝。本書(shū)還得到了上海工程技術(shù)大學(xué)教材建設(shè)項(xiàng)目的資助,一并感謝。
由于作者水平有限,加之計(jì)算機(jī)科學(xué)與技術(shù)發(fā)展迅速、內(nèi)容覆蓋面廣,書(shū)中錯(cuò)誤和不妥之處在所難免,懇請(qǐng)讀者批評(píng)指正。
編 者
第1章 C#與.NET Framework1
1.1 C#的歷史1
1.1.1 從C到C++1
1.1.2 Java的出現(xiàn)2
1.1.3 C#的誕生3
1.1.4 C#的發(fā)展歷程5
1.2 .NET Framework6
1.2.1 什么是 .NET Framework6
1.2.2 .NET Framework的工作原理7
1.2.3 公共語(yǔ)言運(yùn)行時(shí)9
1.2.4 .NET Framework類(lèi)庫(kù)10
1.2.5 用C#創(chuàng)建.NET應(yīng)用程序11
1.3 C#軟件項(xiàng)目開(kāi)發(fā)14
1.3.1 需求分析14
1.3.2 概要設(shè)計(jì)15
1.3.3 詳細(xì)設(shè)計(jì)15
1.3.4 編碼15
1.3.5 測(cè)試15
1.3.6 軟件交付16
1.3.7 維護(hù)16
本章小結(jié)16
習(xí)題16
第2章 登錄功能18
2.1 登錄界面設(shè)計(jì)18
2.1.1 簡(jiǎn)化的用戶(hù)登錄界面18
2.1.2 新建項(xiàng)目19
2.1.3 界面設(shè)計(jì)20
2.2 登錄模塊23
2.2.1 模塊和模塊化23
2.2.2 登錄IPO23
2.2.3 登錄模塊代碼實(shí)現(xiàn)24
2.3 界面邏輯24
2.3.1 事件和事件驅(qū)動(dòng)24
2.3.2 單擊事件處理過(guò)程25
2.3.3 消息對(duì)話框顯示25
2.3.4 界面跳轉(zhuǎn)25
2.3.5 啟動(dòng)窗體設(shè)置26
2.4 詳細(xì)代碼和程序運(yùn)行26
2.4.1 詳細(xì)代碼26
2.4.2 程序運(yùn)行界面27
2.5 調(diào)試28
2.5.1 調(diào)試概述28
2.5.2 Visual Studio調(diào)試28
2.6 打字小游戲?qū)嵗?1
2.6.1 Timer控件31
2.6.2 鍵盤(pán)事件32
2.6.3 隨機(jī)數(shù)32
2.6.4 實(shí)現(xiàn)打字小游戲33
2.7 四則運(yùn)算器實(shí)例35
2.7.1 四則運(yùn)算器要求35
2.7.2 操作步驟36
本章小結(jié)39
習(xí)題39
第3章 用數(shù)據(jù)庫(kù)實(shí)現(xiàn)操作模塊40
3.1 數(shù)據(jù)準(zhǔn)備40
3.1.1 數(shù)據(jù)庫(kù)、數(shù)據(jù)表及測(cè)試數(shù)據(jù)40
3.1.2 結(jié)構(gòu)化查詢(xún)語(yǔ)言SQL41
3.2 ADO.NET42
3.2.1 ADO.NET概述42
3.2.2 ADO.NET核心組成43
3.2.3 ADO.NET通俗理解44
3.2.4 ADO.NET命名空間44
3.3 登錄模塊45
3.3.1 程序步驟45
3.3.2 關(guān)鍵代碼說(shuō)明47
3.4 用戶(hù)注冊(cè)、刪除和修改任務(wù)47
3.4.1 界面設(shè)計(jì)48
3.4.2 增刪改模塊48
3.5 用戶(hù)表顯示50
3.5.1 DataGridView控件50
3.5.2 DataSet和DataTable50
3.5.3 數(shù)據(jù)綁定過(guò)程51
3.6 運(yùn)行界面和詳細(xì)代碼52
3.6.1 用戶(hù)運(yùn)行界面52
3.6.2 完整代碼54
本章小結(jié)57
習(xí)題57
第4章 軟件分層和三層架構(gòu)58
4.1 軟件分層58
4.1.1 分層原理58
4.1.2 分層開(kāi)發(fā)的特點(diǎn)和優(yōu)勢(shì)59
4.1.3 分層開(kāi)發(fā)的缺點(diǎn)60
4.1.4 常用的軟件分層技術(shù)60
4.2 三層架構(gòu)63
4.2.1 基本原理63
4.2.2 三層架構(gòu)的演變64
4.2.3 三層架構(gòu)的形象對(duì)比65
4.3 搭建三層結(jié)構(gòu)66
4.3.1 程序集66
4.3.2 搭建數(shù)據(jù)訪問(wèn)層67
4.3.3 搭建業(yè)務(wù)邏輯層69
4.3.4 搭建表示層69
4.3.5 添加各層之間的依賴(lài)關(guān)系69
4.4 登錄案例70
4.4.1 編寫(xiě)實(shí)體類(lèi)User.cs71
4.4.2 編寫(xiě)數(shù)據(jù)訪問(wèn)類(lèi)UserService71
4.4.3 編寫(xiě)業(yè)務(wù)邏輯類(lèi)
UserManager72
4.4.4 編寫(xiě)表示層72
本章小結(jié)74
習(xí)題74
第5章 Web服務(wù)75
5.1 Web服務(wù)的概念和用途75
5.1.1 Web服務(wù)的基本概念75
5.1.2 Web服務(wù)的優(yōu)點(diǎn)75
5.1.3 Web服務(wù)的應(yīng)用77
5.1.4 Web服務(wù)的調(diào)用原理78
5.1.5 支付寶Web服務(wù)接口79
5.2 Web服務(wù)實(shí)現(xiàn)80
5.2.1 用Visual Studio.NET建立
Web服務(wù)80
5.2.2 自定義Web服務(wù)82
5.2.3 WinForm項(xiàng)目調(diào)用84
5.2.4 Web項(xiàng)目調(diào)用86
5.2.5 Web服務(wù)常用接口88
本章小結(jié)88
習(xí)題88
第6章 C#面向?qū)ο蟪绦蛟O(shè)計(jì)89
6.1 類(lèi)和對(duì)象概念89
6.1.1 對(duì)象89
6.1.2 類(lèi)90
6.1.3 屬性和字段90
6.1.4 方法91
6.1.5 對(duì)象的生命周期91
6.1.6 靜態(tài)成員92
6.2 定義類(lèi)92
6.3 定義類(lèi)成員93
6.3.1 定義字段94
6.3.2 定義方法94
6.3.3 定義屬性95
6.3.4 定義構(gòu)造函數(shù)和析構(gòu)函數(shù)96
6.3.5 重載97
6.3.6 類(lèi)定義示例99
6.3.7 聰明豬實(shí)例100
6.4 繼承、接口和抽象類(lèi)103
6.4.1 繼承103
6.4.2 接口定義103
6.4.3 接口和抽象類(lèi)104
6.4.4 接口和抽象類(lèi)示例104
6.5 常用字符串類(lèi)String108
6.5.1 字符串與System.String108
6.5.2 字符串對(duì)象的不可變性109
6.5.3 正則字符串和原義字符串110
6.5.4 字符串轉(zhuǎn)義序列110
6.5.5 格式字符串111
6.5.6 子字符串112
6.5.7 null字符串和空字符串113
6.5.8 使用 StringBuilder 快速創(chuàng)建
字符串115
本章小結(jié)115
習(xí)題116
第7章 委托與事件117
7.1 委托117
7.1.1 委托的引入117
7.1.2 委托使用方法120
7.1.3 定義和使用委托實(shí)例120
7.1.4 組合委托121
7.2 事件122
7.2.1 事件的概念122
7.2.2 創(chuàng)建步驟123
7.3 實(shí)例125
7.3.1 委托租房125
7.3.2 清晨雞叫128
本章小結(jié)130
習(xí)題130
第8章 圖形編程和Bitmap處理基礎(chǔ)131
8.1 GDI+繪圖基礎(chǔ)131
8.1.1 GDI+概述131
8.1.2 Graphics類(lèi)132
8.1.3 常用畫(huà)圖對(duì)象133
8.1.4 繪圖程序示例137
8.2 Bitmap類(lèi)141
8.2.1 Bitmap類(lèi)支持的圖像類(lèi)型141
8.2.2 Bitmap類(lèi)的方法141
8.2.3 圖片處理實(shí)例142
本章小結(jié)144
習(xí)題144
第9章 異常處理和單元測(cè)試145
9.1 異常處理概述145
9.1.1 為何要用異常處理145
9.1.2 .NET異常處理機(jī)制146
9.2 異常處理148
9.2.1 基本格式148
9.2.2 異常的順序和嵌套151
9.2.3 throw語(yǔ)句和自定義
異常類(lèi)152
9.3 單元測(cè)試153
9.3.1 單元測(cè)試概述153
9.3.2 測(cè)試用例154
9.4 單元測(cè)試實(shí)例155
9.4.1 項(xiàng)目準(zhǔn)備155
9.4.2 單元測(cè)試向?qū)Ыy(cè)試
項(xiàng)目156
9.4.3 建立測(cè)試用例159
9.4.4 Assert斷言162
本章小結(jié)163
習(xí)題163
第10章 設(shè)計(jì)模式164
10.1 設(shè)計(jì)模式概述164
10.1.1 為什么要用設(shè)計(jì)模式164
10.1.2 設(shè)計(jì)模式的概念164
10.1.3 設(shè)計(jì)模式的基本要素165
10.1.4 常見(jiàn)設(shè)計(jì)模式165
10.2 簡(jiǎn)單工廠模式167
10.2.1 簡(jiǎn)單工廠模式的概念167
10.2.2 實(shí)例168
10.3 單例模式171
10.3.1 單例模式的概念171
10.3.2 為什么要用單例模式171
10.3.3 剖析單例模式的實(shí)現(xiàn)
思路171
10.3.4 代碼實(shí)現(xiàn)172
本章小結(jié)174
習(xí)題174
附錄A C#代碼規(guī)范175
A.1 編程風(fēng)格175
A.1.1 統(tǒng)一編程風(fēng)格的意義175
A.1.2 變量命名規(guī)則175
A.1.3 函數(shù)命名規(guī)則176
A.1.4 類(lèi)命名規(guī)則177
A.1.5 常見(jiàn)語(yǔ)句書(shū)寫(xiě)規(guī)則177
A.1.6 注釋風(fēng)格178
A.2 代碼組織179
A.3 代碼優(yōu)化179
A.3.1 代碼優(yōu)化的意義179
A.3.2 函數(shù)內(nèi)的代碼優(yōu)化180
A.3.3 類(lèi)內(nèi)的代碼優(yōu)化181
A.3.4 類(lèi)之間的代碼優(yōu)化181
A.4 調(diào)試技巧182
A.4.1 編譯時(shí)的錯(cuò)誤182
A.4.2 運(yùn)行時(shí)的錯(cuò)誤182
A.4.3 C#常見(jiàn)問(wèn)題182
附錄B C#基本語(yǔ)法183
B.1 變量和常量183
B.1.1 變量183
B.1.2 常量184
B.2 值類(lèi)型和引用類(lèi)型185
B.2.1 值類(lèi)型186
B.2.2 引用類(lèi)型188
B.3 裝箱和拆箱190
B.4 類(lèi)型轉(zhuǎn)換190
B.5 流程控制191
B.5.1 條件語(yǔ)句191
B.5.2 循環(huán)195
B.5.3 跳轉(zhuǎn)語(yǔ)句199
B.6 數(shù)組和集合200
B.6.1 數(shù)組200
B.6.2 集合201
參考文獻(xiàn)212