第1章 C#语言基础 1
1.1 C#语言特点 1
1.2 编写控制台应用程序 2
1.3 类的基本概念 3
1.3.1 类的基本概念 3
1.3.2 类成员的存取控制 4
1.3.3 类的对象 4
1.3.4 类的构造函数、构造函数重载和析构函数 5
1.3.5 使用Person类的完整的例子 5
1.3.6 程序调试与异常处理 6
1.4 C#的数据类型 7
1.4.1 值类型和引用类型的区别 7
1.4.2 值类型变量分类 8
1.4.3 结构类型 8
1.4.4 简单类型 9
1.4.5 枚举类型 10
1.4.6 值类型的初值和默认构造函数 10
1.4.7 可空类型 10
1.4.8 引用类型分类 10
1.4.9 object类 11
1.4.10 数组类 11
1.4.11 字符串类(string类) 12
1.4.12 类型转换 14
1.4.13 泛型和泛型集合 15
1.4.14 隐式类型局部变量(var) 16
1.5 运算符 17
1.5.1 运算符分类 17
1.5.2 溢出检查操作符checked和unchecked 17
1.5.3 new运算符 18
1.6 程序控制语句 18
1.6.1 C#语言语句和C语言语句的不同点 18
1.6.2 foreach语句 19
1.6.3 异常语句 19
1.6.4 using语句 20
1.7 类的继承 21
1.7.1 派生类的声明格式 21
1.7.2 隐藏基类方法 22
1.7.3 base关键字 22
1.7.4 C#语言类继承特点 22
1.8 类的成员 22
1.8.1 类的成员类型 22
1.8.2 类成员访问修饰符 23
1.9 类的字段和属性 23
1.9.1 静态字段、实例字段、常量和只读字段 23
1.9.2 属性 24
1.9.3 对象初始化器 25
1.9.4 自动属性 25
1.9.5 匿名类型 25
1.10 类的方法 26
1.10.1 方法的声明 26
1.10.2 方法中参数的传递 26
1.10.3 静态方法和实例方法 28
1.10.4 方法的重载 29
1.10.5 操作符重载 29
1.10.6 this关键字 30
1.10.7 扩展方法 30
1.11 类的多态性 31
1.12 抽象类和抽象方法 33
1.13 密封类和密封方法 34
1.14 静态类和静态类成员 34
1.15 C#2.0中的分部类 34
1.16 使自定义类支持foreach语句 34
1.17 接口 35
1.17.1 接口声明 35
1.17.2 接口的继承 35
1.17.3 类对接口的实现 36
1.18 委托类型 37
1.19 事件 38
1.19.1 事件驱动 38
1.19.2 事件的声明 38
1.19.3 事件的预订和撤销 39
1.19.4 匿名方法 39
1.19.5 Lambda表达式 40
1.20 索引指示器 40
1.21 命名空间 41
1.21.1 命名空间的声明 41
1.21.2 命名空间使用 42
1.22 LINQ 42
习题 42
第2章 WPF编程基础 44
2.1 Windows编程接口和类库 44
2.2 GDI和WPF 45
2.3 TextBlock、Label和Button控件 45
2.4 WPF控件通用属性 46
2.5 WPF程序基本结构 47
2.6 Application类和Window类 48
2.7 用VS2008创建WPF程序 50
2.8 控件的Z-序 51
2.9 XAML标记和类型转换器 52
2.10 代码隐藏 53
2.11 解决方案和项目 53
2.12 事件处理函数的参数 54
2.13 TextBox和PasswordBox控件 54
2.14 RadioButton、GroupBox和Expander 55
2.15 CheckBox(复选框)控件 56
2.16 定时器和DateTime类 58
2.17 ListBox(列表框)控件 59
2.18 路由事件 61
2.19 ComboBox(下拉列表组合框)控件 61
2.20 布局面板和ScrollViewer 62
2.21 附加属性 65
2.22 样式、样式触发器和资源 65
2.23 模板和模板触发器 67
2.24 依赖属性和控件树 68
2.25 数据绑定和标记扩展 69
2.26 ListView等列表控件数据绑定 70
2.27 绑定数据源为自定义类 72
2.28 利用异常对输入数据验证 73
2.29 自定义验证规则 74
2.30 正则表达式类Regex类 75
2.31 菜单、Command和键盘事件 76
2.32 快捷菜单 79
2.33 ToggleButton和RepeatButton 80
2.34 工具条 80
2.35 状态栏控件和鼠标事件 81
2.36 各种WPF应用程序 82
2.37 综合例子:计算器 82
2.38 类库和自定义控件 85
习题 90
第3章 WPF文本编辑器 92
3.1 文档布局 92
3.2 RichTextBox控件 94
3.3 Command实现编辑功能 95
3.4 存取文件 96
3.4.1 OpenFileDialog和SaveFileDialog类 96
3.4.2 存取文件功能实现 97
3.5 About对话框 98
3.6 文本编辑器查找替换功能 99
3.6.1 模式对话框和非模式对话框 99
3.6.2 查找替换功能的实现 99
3.7 提示用户保存已被修改的文件 101
3.7.1 MessageBox类 101
3.7.2 提示保存已被修改的文件 102
3.8 打印和打印预览 104
3.8.1 打印对话框PrintDialog 104
3.8.2 打印 104
3.8.3 打印预览 105
3.9 多选项卡页的文本编辑器 106
习题 109
第4章 文件和流 110
4.1 用流读/写文件 110
4.1.1 FileStream类读/写字节 110
4.1.2 BinaryReader、BinaryWriter类读/写基本数据类型 112
4.1.3 StreamReader和StreamWriter类读/写字符串 113
4.1.4 序列化 114
4.1.5 Stream类的其他派生类 116
4.2 File类和FileInfo类 116
4.2.1 File类常用的方法 116
4.2.2 判断文件是否存在 117
4.2.3 删除文件 117
4.2.4 复制文件 117
4.2.5 移动文件 118
4.2.6 设置文件属性 118
4.2.7 得到文件的属性 119
4.3 Directory类和DirectoryInfo类 119
4.3.1 Directory类常用的方法 119
4.3.2 判断目录是否存在 120
4.3.3 创建目录 120
4.3.4 删除目录 121
4.3.5 移动目录 121
4.3.6 获取当前目录下的所有子目录 122
4.3.7 获取当前目录下的所有文件 122
4.3.8 设置目录属性 122
4.4 例子:在指定文件夹中查找文件 123
4.5 例子:鼠标拖放打开文件 125
4.6 例子:拆分和合并文件 127
习题 128
第5章 WPF图形图像编程 129
5.1 WPF和GDI 129
5.2 常用的结构 129
5.2.1 Point和Size结构 130
5.2.2 Rect结构 130
5.2.3 Color结构 130
5.3 用Shape的派生类绘图 131
5.3.1 公用属性 131
5.3.2 画线控件Line 131
5.3.3 画矩形控件Rectangle 131
5.3.4 画圆或椭圆控件Ellipse 132
5.3.5 控件Polyline和Polygon 134
5.3.6 控件Path 135
5.4 用Drawing的派生类绘图 135
5.4.1 绘图基本方法 135
5.4.2 Geometry类 136
5.4.3 GeometryGroup类 137
5.4.4 CombinedGeometry类 138
5.5 用Visual类的派生类绘图 138
5.5.1 绘图基本方法 139
5.5.2 DrawingContext类方法 139
5.6 Pen类和Brush类 140
5.6.1 Pen类 140
5.6.2 SolidColorBrush画刷 141
5.6.3 LinearGradientBrush画刷 142
5.6.4 RadialGradientBrush画刷 142
5.6.5 ImageBrush画刷 143
5.6.6 TileBrush类 143
5.6.7 DrawingBrush画刷 144
5.6.8 VisualBrush画刷 144
5.7 图形变换 145
5.7.1 Transform派生类 145
5.7.2 TransformGroup类 145
5.7.3 Matrix结构 146
5.7.4 MatrixTransform类 147
5.7.5 控件的变换 148
5.7.6 Drawing类图形变换 148
5.7.7 Visual类图形变换 149
5.8 位图效果 149
5.9 处理图像 150
5.9.1 显示图像文件 150
5.9.2 将矢量图形保存为位图文件 152
5.9.3 彩色图像变换为灰度图像 155
5.9.4 处理图像每一点颜色 156
5.10 图像剪贴板功能 157
5.10.1 剪切复制区域选定 157
5.10.2 剪贴板复制功能的实现 157
5.10.3 剪贴板剪切功能的实现 157
5.10.4 剪贴板粘贴功能的实现 158
5.11 3D图形 158
5.11.1 3D图形学基础 159
5.11.2 绘制3D图形例子 160
5.11.3 分析例子XAML标记 160
5.11.4 照相机和投影 161
5.11.5 定义3D模型形状 162
5.11.6 背面剔除 163
5.11.7 光源 164
5.11.8 材质 165
5.11.9 纹理 166
5.11.10 3D图形变换 167
5.11.11 代码绘制3D图形 167
5.12 DirectX 3D和XNA介绍 168
习题 169
第6章 多媒体 170
6.1 WPF动画 170
6.1.1 传统实现动画方法 170
6.1.2 DoubleAnimation类动画 171
6.1.3 其他动画类 172
6.1.4 关键帧动画 172
6.1.5 基于路径的动画 175
6.2 音频支持 176
6.2.1 SoundPlayer类 176
6.2.2 SoundPlayerAction类 177
6.2.3 MediaPlayer类 177
6.2.4 MediaElement类 178
6.2.5 MediaTimeLine类 178
6.3 视频支持 179
6.3.1 MediaElement类 179
6.3.2 MediaTimeLine类 180
6.3.3 MediaPlayer类 181
6.4 语音功能介绍 181
习题 182
第7章 进程和多线程 183
7.1 进程 183
7.1.1 Process类 183
7.1.2 用代码启动和停止进程 184
7.1.3 得到进程信息 184
7.2 创建线程 186
7.2.1 线程类(Thread)的属性和方法 187
7.2.2 用Thread类创建线程 187
7.2.3 用Dispatcher类访问控件 189
7.2.4 委托异步调用方法 189
7.2.5 异步文件读/写 191
7.2.6 单线程完成费时工作 191
7.2.7 BackgroundWorker类 193
7.3 线程并发、互斥和死锁 195
7.3.1 多个线程同时修改共享数据可能发生错误 195
7.3.2 用Lock语句实现互斥 196
7.3.3 用Mutex类实现互斥 197
7.3.4 用Monitor类实现互斥 198
7.4 同步生产者和消费者线程 198
7.4.1 生产者线程和消费者线程不同步可能发生错误 198
7.4.2 生产者线程和消费者线程同步的实现 199
习题 200
第8章 Socket编程初步 201
8.1 TCP/IP和Socket 201
8.1.1 TCP/IP 201
8.1.2 套接字 202
8.2 基于TCP的Socket编程 202
8.2.1 TcpClient类 203
8.2.2 TcpListener类 203
8.2.3 服务器程序 204
8.2.4 客户机程序 204
8.2.5 TCP的Socket实例 205
8.2.6 异步TCP编程 207
8.2.7 基于TCP的P2P技术 212
8.3 基于UDP的Socket编程 217
8.3.1 基于UDP的编程 218
8.3.2 用UDP实现广播和组播 220
习题 222
第9章 数据库应用程序设计 223
9.1 两类数据库应用程序 223
9.2 VS2008创建数据库 224
9.3 结构化查询语言SQL 226
9.4 连接数据库 226
9.5 创建连接数据库应用程序 227
9.5.1 OleDbCommand和SQLCommand类 227
9.5.2 OleDbDataReader和SqlDataReader类 229
9.6 不连接数据库应用程序及数据绑定 229
9.6.1 SqlDataAdapter和DataSet类 230
9.6.2 DataTable、DataView和DataRow类 230
9.6.3 数据库表的数据绑定 231
9.7 学生信息管理系统设计 235
9.7.1 学生查询窗口 236
9.7.2 项目数据源 236
9.7.3 学生登录功能 239
9.7.4 管理员管理窗口 240
9.7.5 主从关系 242
9.7.6 编辑、删除和增加记录功能 243
9.7.7 将修改数据存回原数据库 244
9.7.8 查询 244
9.7.9 教师登分窗口 247
9.8 ComboBox绑定到数据库表 250
9.9 存储过程 254
9.10 LINQ to ADO.NET 254
9.10.1 LINQ to DataSet 254
9.10.2 LINQ to SQL 255
习题 258
第10章 可扩展标记语言 259
10.1 XML基本概念 259
10.1.1 SGML 259
10.1.2 XML 259
10.1.3 XML的文档格式 260
10.1.4 XPath表示XML文档路径 261
10.2 XML文档显示 261
10.2.1 定义XML文档显示格式 261
10.2.2 XML文件转换为HTML文件 263
10.2.3 TreeView控件和Xml数据绑定 263
10.3 查询XML文档 265
10.3.1 XmlTextReader类查询XML 265
10.3.2 XmlDocument类查询XML 267
10.3.3 XPathNavigator类查询XML 268
10.3.4 XDocument和LINQ to XML 268
10.4 编辑XML文档 269
10.4.1 XmlTextWriter类写XML文档 269
10.4.2 XmlDocument类编辑XML文档 270
10.4.3 XDocument编辑XML文档 271
10.5 XML架构 272
10.5.1 DTD或XML Schema定义XML架构 272
10.5.2 用XML Schema验证XML架构 273
10.6 数据库和XML 273
习题 274
第11章 Web服务和WCF基础 276
11.1 Web服务和WCF的概念 276
11.1.1 Web服务的概念和用途 276
11.1.2 Web服务的局限 277
11.1.3 WCF技术 278
11.1.4 WCF基本结构 278
11.2 和Web服务兼容的WCF服务 279
11.2.1 建立Web服务 279
11.2.2 WSDL 281
11.2.3 配置文件Web.config 282
11.2.4 建立客户端程序 283
11.3 其他宿主的WCF服务 284
11.3.1 建立WCF服务 284
11.3.2 建立客户端程序 285
11.3.3 双工协定 286
11.4 使用Web服务的例子 289
11.4.1 使用WCF服务返回数据库表 289
11.4.2 用Web服务传送图形文件 290
习题 291
第12章 Windows Form编程 292
12.1 WinForm和WPF的不同点 292
12.2 WinForm控件编程基础 292
12.2.1 最简单的WinForm程序 293
12.2.2 用VS2008创建WinForm程序 293
12.2.3 WinForm和WPF常用控件异同 294
12.2.4 菜单控件menuStrip 295
12.2.5 工具条控件ToolStrip 296
12.2.6 状态栏控件StatusStrip 296
12.3 文本编辑器 297
12.3.1 RichTextBox控件 297
12.3.2 多文档文本编辑器 298
12.4 GDI图形图像编程 301
12.4.1 画笔Pen类和画刷类 301
12.4.2 使用Graphics类 301
12.4.3 窗体的Paint事件 302
12.4.4 Bitmap类和PictureBox控件 305
12.5 数据库 308
12.5.1 BindingSource组件 308
12.5.2 BindingNavigator控件 309
12.5.3 学生信息管理系统设计 310
习题 311
参考文献 312