本書詳細介紹了C#程序設計的基本環(huán)境、概念、方法和應用。內容分為C#語言及C#應用兩方面:C#語言方面,包括C#基礎語法、面向對象的C#語言、C#語言高級特性等; C#應用方面,包括工具類、集合、常用算法、流式文件、文本應用、Windows窗體和控件、圖形用戶界面、多線程、ADO.NET數(shù)據(jù)庫應用、網絡通訊編程等。書中也詳細講解了C#一些新特新如Lambda表達式、Linq、異步編程以及深入理解C#語言。
本書內容詳盡、循序漸進,既介紹語法,又講解語言機制,還注重C#的應用。本書提供了大量典型實例,并配套有相關的電子資源、課件、視頻。
本書內容和組織方式立足高等學校的教學教材,也可作為計算機技術的培訓教材,還可作為Coursera、中國大學慕課上C#程序設計慕課的配套教材。
作為多本暢銷教材的作者和北京大學*受學生歡迎的計算機老師之一,本書作者延續(xù)了以往簡潔易懂的語言風格和清晰的邏輯結構,系統(tǒng)地介紹了C#的語言機制及其應用。本書也是中國大學MOOC上C#程序設計的配套教材,該課程被教育部認定為2017年國家精品在線開放課程。選擇由本書開始學習C#程序設計,讀者一定會受益匪淺。
作為一種優(yōu)秀的面向對象語言,C#不僅具有封裝、繼承與多態(tài)等特性,而且還增加了索引、委托、事件、Attribute、Linq等創(chuàng)新性元素。在繼承了C 和Java等語言的優(yōu)點的基礎上,C#代表了程序設計語言演變的一個新階段,這是與現(xiàn)代軟件工程相適應的。
C#語言還利用.NET Framework作為其強大的平臺,使得它在Windows圖形用戶界面、ASP.Net Web應用、以及ADO.Net數(shù)據(jù)庫等方面有廣泛的應用,并且C#已經可以運行在Windows、Linux、Mac OS等平臺上,甚至可以開發(fā)跨平臺的手機應用。正因為這樣,C#是目前主流的程序設計語言之一。
從學習的角度,C#語言的基本語法與傳統(tǒng)的C、C 、Java語言有不少的相似性,學習者易于入門,而且使用功能強大的Visual Studio集成開發(fā)工具可以進行快速應用開發(fā),因此將C#作為程序設計的教學和開發(fā)語言不失為一種好的選擇。
對于學習者而言,選擇一本好的教材至關重要。筆者基于多年程序設計語言的教學經驗,結合個人的軟件開發(fā)實踐,力圖突出以下特色:
1.在詳細介紹C#語言的語法的同時,還著重講解C#語言的機制,如類的封裝與繼承、類型轉換、參數(shù)傳遞、虛方法調用、構造與析構、異常處理、迭代器等,讓學習者知其然,并知其所以然。
2.對于C#的一些新特性,如Lambda、Linq及異步編程等,也進行了介紹,使學習者能簡化代碼的書寫、提高開發(fā)效率。
3.對C#用到的基本類庫和基本應用,包括集合、文件、文本界面、圖形界面等進行詳細講解,精選大量典型而實用的例子,力圖使學習者觸類旁通,舉一反三。
4.對一些高級應用,如正則表達式、XML、網絡信息獲取、數(shù)據(jù)庫訪問、網絡通訊編程等內容也介紹其概念和編程方法,以利于學習者能做出具有實際應用價值的程序。
本書在內容安排上,大致可以劃分為四個部分:第一部分介紹了C#語言基礎:數(shù)據(jù)、控制結構、數(shù)組、類、接口、結構等;第二部分介紹了C#高級特性,如事件、委托、泛型、Linq、運算符重載等;第三部分是C#的基本類及其在.NET應用:工具類、集合、常用算法、流式文件、文本應用、Windows窗體和控件、圖形用戶界面;第四部分是C#的高級應用:多線程、正則表達式、XML、網絡信息獲取、數(shù)據(jù)庫訪問、網絡通訊編程等,還專門用一章來講解深入理解C#語言。
本書提供了配套的電子資源,包括源代碼、課件、視頻,一些應用實例由于源代碼較長,書中列出了關鍵性代碼,全部的源代碼可以在配套的電子資源中找到。
本書內容和組織方式立足高等學校的教學教材,也可作為計算機技術的培訓教材或自學用書。筆者還在coursera、中國大學慕課等平臺上開設了C#程序設計慕課(MOOC),本書也適合作為慕課的配套教材。
本書從第一版以來,得到全國不少師生及慕課學員的意見和建議,在此表示感謝。對于書中仍然存在的不足,也懇請讀者批評指正。
唐大仕
于北京大學信息科學技術學院
目 錄
第1章 C#程序設計簡介 1-1
1.1
C#語言及其環(huán)境 1-1
1.1.1
C#的產生與發(fā)展 1-1
1.1.2
C#的環(huán)境Microsoft.NET 1-2
1.1.3
C#的特點 1-5
1.1.4
C#和C、C 的比較 1-6
1.1.5
C# 與Java 的比較 1-7
1.2 簡單的C#程序 1-8
1.2.1
Hello World 1-8
1.2.2
C#程序設計快速入門 1-12
1.2.3
對象的三個基本要素 1-16
1.2.4
C#程序的基本構成 1-19
1.3 程序中的輸入輸出及運算 1-21
1.3.1
控制臺應用程序的輸入輸出 1-21
1.3.2
Windows應用程序輸入輸出 1-23
1.3.3
常用的運算 1-24
1.4 開發(fā)工具 1-25
1.4.1
.NET Framework SDK及Visual Studio 1-25
1.4.2
使用命令行編譯及運行程序 1-25
1.4.3
輔助工具EditPlus 1-28
1.4.4
輔助工具Visual
Studio Code 1-31
1.5 應用程序類型 1-31
1.5.1
Visual Studio建立不同類型的應用程序 1-31
1.5.2
WPF應用程序 1-33
1.5.3
Web應用程序 1-33
1.6 面向對象程序設計的基本概念 1-34
1.6.1
面向對象概述 1-34
1.6.2
對象、類與實體 1-35
1.6.3
封裝、繼承、多態(tài) 1-37
1.6.4
面向對象的軟件開發(fā)過程 1-38
習題1 1-39
第2章 C#語言基礎 2-1
2.1 數(shù)據(jù)類型、變量與常量 2-1
2.1.1
數(shù)據(jù)類型 2-1
2.1.2
標識符、關鍵字 2-4
2.1.3
字面常量 2-5
2.1.4
變量 2-6
2.1.5
C#編碼慣例與注釋 2-7
2.2 運算符與表達式 2-11
2.2.1
算術運算符 2-11
2.2.2
關系運算符 2-13
2.2.3
邏輯運算符 2-13
2.2.4
位運算符 2-14
2.2.5
賦值與強制類型轉換 2-14
2.2.6
條件運算符 2-15
2.2.7
運算的優(yōu)先級、結合性 2-16
2.3 流程控制語句 2-17
2.3.1
結構化程序設計的三種基本流程 2-17
2.3.2
簡單語句 2-17
2.3.3
分支語句 2-18
2.3.4
循環(huán)語句 2-21
2.3.5
跳轉語句 2-26
2.4 數(shù)組 2-28
2.4.1
數(shù)組的聲明 2-28
2.4.2
數(shù)組的初始化 2-31
2.4.3
數(shù)組元素的使用 2-32
2.4.4
數(shù)組與System.Array 2-33
2.4.5
使用foreach語句訪問數(shù)組 2-34
2.4.6
數(shù)組應用舉例 2-34
習題2 2-37
第3章 類、接口與結構 3-1
3.1 類、字段、方法 3-1
3.1.1
定義類中的字段和方法 3-1
3.1.2
構造方法與析構方法 3-3
3.1.3
對象的創(chuàng)建與使用 3-4
3.1.4
方法的重載 3-5
3.1.5
使用this 3-7
3.2 屬性、索引器 3-8
3.2.1
屬性 3-9
3.2.2
索引器 3-13
3.3 類的繼承 3-16
3.3.1
派生子類 3-17
3.3.2
字段的繼承、添加與隱藏 3-18
3.3.3
方法的繼承、添加與覆蓋 3-18
3.3.4
使用base 3-20
3.3.5
父類與子類的轉換以及as運算符 3-21
3.3.6
屬性、索引器的繼承 3-23
3.4 修飾符 3-23
3.4.1
訪問控制符 3-24
3.4.2
static 3-29
3.4.3
const及readonly 3-31
3.4.4
sealed及abstract 3-33
3.4.5
new、virtual、override 3-34
3.4.6
一個應用模型單例(Singleton) 3-38
3.5 接口 3-38
3.5.1
接口的概念 3-38
3.5.2
定義接口 3-39
3.5.3
實現(xiàn)接口 3-41
3.5.4
對接口的引用 3-42
3.5.5
顯式接口成員實現(xiàn) 3-43
3.6 結構、枚舉 3-45
3.6.1
結構 3-45
3.6.2
枚舉 3-47
習題3 3-49
第4章 C#高級特性 4-1
4.1 泛型 4-1
4.1.1
泛型的基本使用 4-1
4.1.2
自定義泛型 4-2
4.2 委托及Lambda表達式 4-5
4.2.1
委托類型與賦值 4-5
4.2.2
Lambda表達式 4-13
4.2.3
使用系統(tǒng)定義的Action及Func 4-14
4.3 事件 4-15
4.3.1
事件的應用 4-15
4.3.2
自定義事件 4-16
4.3.3
事件的語法細節(jié) 4-19
4.4 異常處理 4-20
4.4.1
異常的概念 4-20
4.4.2
捕獲和處理異常 4-21
4.4.3
創(chuàng)建用戶自定義異常類 4-25
4.4.4
重拋異常及異常鏈接 4-26
4.4.5
算術溢出與checked 4-28
4.5 命名空間、嵌套類型、程序集 4-29
4.5.1
命名空間 4-29
4.5.2
嵌套類型 4-32
4.5.3
程序集 4-36
4.6
C#語言中的其他成分 4-41
4.6.1
運算符重載 4-41
4.6.2
使用Attribute 4-42
4.6.3
編譯預處理 4-43
4.6.4
unsafe及指針 4-44
4.6.5
C#幾個語法的小結 4-47
習題4 4-47
第5章 基礎類及常用算法 1
5.1
C#語言基礎類 1
5.1.1
.NET Framework基礎類庫 1
5.1.2
Object類 2
5.1.3
簡單數(shù)據(jù)類型及轉換 6
5.1.4
Math類及Random類 7
5.1.5
DateTime類及TimeSpan類 8
5.1.6
Console類 11
5.2 字符串 11
5.2.1
String類 12
5.2.2
StringBuilder類 13
5.2.3
數(shù)據(jù)的格式化 15
5.3 集合類 16
5.3.1
集合的遍歷 16
5.3.2
List、Stack及Queue類 18
5.3.3
Dictionary及Hashtable類 21
5.3.4
其他集合類 25
5.4 排序與查找 26
5.4.1
IComparable接口和IComparer接口 26
5.4.2
使用Array類進行排序與查找 27
5.4.3
集合類中的排序與查找 28
5.4.4
自已編寫排序程序 31
5.5
Linq 34
5.5.1
Linq的基本用法 34
5.5.2
Linq的查詢方法 36
5.6 遍試、迭代、遞歸 38
5.6.1
遍試 38
5.6.2
迭代 40
5.6.3
遞歸 42
習題5 46
第6章 流、文件IO 6-1
6.1 流及二進制輸入輸出 6-1
6.1.1
流 6-1
6.1.2
使用流進行二進制輸入輸出 6-5
6.1.3
使用File的二進制功能 6-7
6.1.4
序列化及反序列化 6-7
6.2 文本輸入輸出 6-10
6.2.1
使用Reader和Writer的文本I/O 6-10
6.2.2
使用File的文本文件功能 6-14
6.2.3
標準輸入輸出 6-16
6.2.4
應用示例:背單詞 6-16
6.3 文件、目錄、注冊表 6-18
6.3.1
文件與目錄管理 6-18
6.3.2
監(jiān)控文件和目錄的改動 6-24
6.3.3
注冊表 6-27
6. 4
環(huán)境參數(shù)及事件日志 6-28
6.4.1
命令行參數(shù) 6-28
6.4.2
獲得環(huán)境參數(shù) 6-30
6.4.3
使用事件日志 6-31
6. 5
程序的調試、追蹤與測試 6-35
6.5.1
程序的調試 6-35
6.5.2
程序的追蹤 6-37
6.5.3
程序的單元測試 6-39
習題6 6-41
第7章 Windows窗體及控件 7-1
7.1
Windows窗體應用程序概述 7-1
7.1.1
Windows圖形用戶界面 7-1
7.1.2
創(chuàng)建Windows窗體 7-2
7.1.3
添加控件 7-5
7.1.4
設定布局 7-8
7.1.5
事件處理 7-13
7.2 常用控件 7-17
7.2.1
Control類 7-17
7.2.2
標簽與按鈕 7-20
7.2.3
文本框 7-24
7.2.4
列表框、UpDown控件 7-27
7.2.5
滾動條、進度條 7-33
7.2.6
定時器、時間、日歷類 7-34
7.2.7
圖片框 7-36
7.2.8
其他幾個控件 7-37
7.3 一些容器類控件 7-39
7.3.1
Panel控件 7-39
7.3.2
ImageList控件 7-40
7.3.3
TreeView控件 7-41
7.3.4
ListView控件 7-43
7.3.5
TabControl控件 7-47
7.3.6
使用Spliter控件 7-48
7.4 窗體及對話框 7-48
7.4.1
Form類 7-48
7.4.2
窗體的創(chuàng)建 7-50
7.4.3
使用Form作對話框 7-51
7.4.4
通用對話框 7-53
7.4.5
顯示消息框 7-55
7.5
MDI窗體、菜單、工具欄 7-57
7.5.1
MDI窗體 7-57
7.5.2
菜單 7-57
7.5.3
使用主菜單及上下文菜單 7-59
7.5.4
工具欄 7-60
7.5.5
狀態(tài)欄 7-61
7.5.6
一個綜合的例子 7-62
習題7 7-74
第8章 繪圖及圖像 8-1
8.1 繪圖基礎支持類 8-1
8.1.1
位置及大小 8-1
8.1.2
顏色 8-4
8.1.3
畫筆 8-5
8.1.4
刷子 8-9
8.2 繪圖 8-11
8.2.1
Graphics類 8-11
8.2.2
獲得Graphics對象 8-13
8.2.3
進行繪圖的一般步驟 8-14
8.2.4
坐標變換 8-17
8.2.5
處理重繪和無效操作 8-21
8.2.6
繪圖示例 8-22
8.3 字體 8-28
8.3.1
Font類 8-28
8.3.2
使用字體來繪制文本 8-29
8.4 圖像 8-32
8.4.1
與圖像相關的類 8-32
8.4.2
在窗體上顯示圖像 8-34
8.4.3
窗體、圖片框上的圖標及圖像 8-36
8.4.4
圖像處理 8-37
8.5 在自定義控件中使用繪圖 8-42
8.5.1
自定義控件 8-42
8.5.2
在自定義控件中使用繪圖 8-45
習題8 8-48
第9章 文本、XML及網絡信息獲取 9-1
9.1 文本及正則表達式 9-1
9.1.1
文本命名空間 9-1
9.1.2
正則表達式 9-2
9.1.3
應用示例:播放歌詞 9-6
9.2
XML編程 9-11
9.2.1
XML概念 9-11
9.2.2
XML基本編程 9-13
9.2.3
Linq to XML 9-18
9.3 網絡信息獲取 9-20
9.3.1
網絡信息獲取 9-20
9.3.2
WebRequst及WebClient 9-22
9.4 幾類不同網絡信息的處理 9-24
9.4.1
使用正則表達式處理網絡文本 9-24
9.4.2
從網絡上獲取XML并進行處理 9-29
9.4.3
從網絡上獲取Json并進行處理 9-30
9.4.4
從網絡上獲取二進制信息并進行處理 9-33
習題9 9-34
第10章 多線程及異步編程 10-1
10.1
線程基礎 10-1
10.1.1
多線程的相關概念 10-1
10.1.2
線程的創(chuàng)建與控制 10-2
10.1.3
線程的同步 10-7
10.2
線程池與計時器 10-13
10.2.1
線程池 10-13
10.2.2
線程計時器 10-14
10.2.3
窗體計時器 10-16
10.3
集合與Windows程序中的線程 10-16
10.3.1
集合的線程安全性 10-16
10.3.2
窗體應用程序中的線程 10-18
10.4
并行編程 10-22
10.4.1
并行程序的相關概念 10-22
10.4.2
Task 10-22
10.4.3
Parallel類 10-24
10.4.4
并行Linq 10-28
10.5
異步編程 10-29
10.5.1
async及await 10-29
10.5.2
異步I/O 10-31
10.5.3
其他實現(xiàn)異步的方法 10-33
習題10 10-36
第11章 數(shù)據(jù)庫、網絡、多媒體編程 11-1
11.1
ADO.NET數(shù)據(jù)庫編程 11-1
11.1.1
ADO.NET簡介 11-1
11.1.2
數(shù)據(jù)集 11-2
11.1.3
連接到數(shù)據(jù)源 11-5
11.1.4
使用DataAdapter和DataSet 11-7
11.1.5
使用Command和DataReader 11-9
11.1.6
使用數(shù)據(jù)綁定控件 11-10
11.2 使用高級數(shù)據(jù)工具 11-12
11.2.1
使用Visual
Studio的數(shù)據(jù)工具 11-12
11.2.2
使用Entity
Framework 11-13
11.2.3
使用Linq訪問數(shù)據(jù)庫 11-14
11.3
網絡通訊編程 11-15
11.3.1
使用System.Net 11-15
11.3.2
TcpClient及TcpListener 11-17
11.3.3
Email編程 11-22
11.4
互操作與多媒體編程 11-24
11.4.1
C#、VB.NET、JScript的互操作 11-24
11.4.2
使用Win32 API進行聲音播放 11-26
11.4.3
使用COM組件操作Office文檔 11-28
11.4.4
使用ActiveX控件進行多媒體播放 11-29
習題11 11-30
第12章 深入理解C#語言 12-1
12.1
類型及轉換 12-1
12.1.1
值類型及引用類型 12-1
12.1.2
值類型的轉換 12-4
12.1.3
引用類型轉換 12-4
12.1.4
裝箱與拆箱 12-6
12.2
變量及其傳遞 12-9
12.2.1
字段與局部變量 12-9
12.2.2
按值傳遞的參數(shù) 12-10
12.2.3
ref參數(shù)及out參數(shù) 12-12
12.2.4
params參數(shù) 12-15
12.2.5
變量的返回 12-16
12.3
多態(tài)與虛方法調用 12-16
12.3.1
上溯造型 12-17
12.3.2
虛方法調用 12-17
12.4
類型與反射 12-21
12.4.1
typeof及GetType 12-21
12.4.2
is運算符 12-23
12.4.3
反射及動態(tài)類型創(chuàng)建 12-24
12.5
對象構造與析構 12-26
12.5.1
調用本類或父類的構造方法 12-26
12.5.2
構造方法的執(zhí)行過程 12-28
12.5.3
靜態(tài)構造方法 12-31
12.5.4
析構方法與垃圾回收 12-33
12.4.5
顯式資源管理與IDisposable 12-34
12.6
運算符重載 12-36
12.6.1
運算符重載的概念 12-36
12.6.2
一元運算符 12-38
12.6.3
二元運算符 12-39
12.6.4
轉換運算符 12-41
12.6.5
==及!=運算符 12-42
12.7
特性(Attribute) 12-43
12.7.1
使用系統(tǒng)定義的Attribute 12-44
12.7.2
自定義Attribute 12-46
12.8
枚舉器與迭代器 12-50
12.8.1
枚舉器 12-50
12.8.2
迭代器 12-52
習題12 12-56
附錄1 C#語言各個版本的新特性 1
附錄2 C#語言相關網絡資源 14
參考文獻 16