第1篇 开发环境及C#语言简介 2
第1章 Visual Studio 2010介绍(教学视频:31分钟) 2
1.1 .NET概述 2
1.1.1 .NET的前世今生 2
1.1.2 什么是微软中间语言 3
1.1.3 背后默默付出的垃圾收集器 4
1.2 .NET Framework概述 5
1.2.1 .NET Framework包含什么 5
1.2.2 .NET平台的核心:CLR 7
1.2.3 基类库是神马 7
1.2.4 公共语言运行规范 9
1.3 Visual Studio 2010有哪些新增功能 9
1.4 Visual Studiō 2010开发环境介绍 11
1.4.1 安装Visual Studio 2010 11
1.4.2 Visual Studio 2010提供哪些项目模板 13
1.4.3 Visual Studio 2010提供哪些网站模板 15
1.4.4 Visual Studio 2010提供哪些文件模板 15
1.4.5 与Visual Studio 2010的第一次相会 16
1.4.6 必须熟悉的开发工具栏和菜单栏 17
1.4.7 用对象浏览器查看对象信息 20
1.4.8 可视化利器:工具箱和属性窗口 21
1.5 定制环境 23
1.5.1 让字体和颜色更适合自己 23
1.5.2 在项目和解决方案中保存文件 23
1.5.3 使用任务列表和注释管理代码 24
1.5.4 在命令窗口中执行命令 24
1.5.5 代码显示行号与代码折叠 26
1.5.6 管理Visual Studio 2010中的子窗口 27
1.5.7 调试与生成程序 28
1.6 学会使用MSDN帮助系统 30
1.7 用Visual Studio 2010编写第一个程序 31
1.8 本章总结 33
1.9 实战练习 34
第2章 C#简介(教学视频:16分钟) 35
2.1 C#与.NET的关系 35
2.2 C#有哪些特点 35
2.2.1 简单性 36
2.2.2 类型统一性 38
2.2.3 面向对象性 39
2.2.4 类型安全性 40
2.2.5 兼容性 41
2.3 C#与其他语言对比 41
2.4 C#与VB.NET的异同 42
2.4.1 代码表现形式的差异 42
2.4.2 数据类型和变量使用的差异 43
2.4.3 类、数据类型、函数以及接口 44
2.4.4 操作符与表达式的差异 44
2.4.5 控制流程语句的差异 45
2.4.6 错误处理的差异 47
2.4.7 关键字的差异 47
2.4.8 访问修饰符的差异 47
2.4.9 语法的差异 48
2.4.10 C#与VB.NET实例对比 48
2.5 C#与C++的异同 51
2.5.1 托管环境的差异 51
2.5.2 C#使用.NET的对象 52
2.5.3 C#的语句 52
2.5.4 C#中取消的要素 52
2.5.5 操作符重载的差异 52
2.5.6 头文件的差异 53
2.5.7 程序书写的差异 53
2.5.8 被取消的指针 53
2.5.9 虚函数的差异 53
2.5.10 C#与C++实例对比 55
2.6 C#与.Java的异同 56
2.6.1 数据类型的差异 56
2.6.2 类的差异 57
2.6.3 属性定义的差异 58
2.6.4 事件、指针与界面的差异 59
2.6.5 C#与Java实例对比 59
2.7 本章总结 60
2.8 实战练习 61
第2篇 C#程序设计基础 64
第3章 C#数据类型(教学视频:37分钟) 64
3.1 初识C#的数据类型 64
3.2 存储实际数据的值类型 65
3.2.1 什么是值类型 65
3.2.2 整型 66
3.2.3 字符型 67
3.2.4 浮点型 68
3.2.5 小数型 69
3.2.6 大整数型 69
3.2.7 复数型 70
3.2.8 布尔型 71
3.2.9 C#值类型的数值类型 71
3.3 存储引用地址的引用类型 72
3.3.1 什么是引用类型 72
3.3.2 类类型 72
3.3.3 对象类型 73
3.3.4 字符串类型 73
3.3.5 接口类型 75
3.3.6 dynamic类型 76
3.4 数据类型是可以转换的 78
3.4.1 什么时候发生类型转换 78
3.4.2 显式转换 78
3.4.3 隐式转换 79
3.4.4 不同数值类型之间的转换 79
3.4.5 数值类型和字符串之间的转换 80
3.4.6 字符的ASCII码和Unicode码之间的转换 82
3.4.7 字符串和字符数组之间的转换 84
3.4.8 字符串和字节数组之间的转换 85
3.4.9 数值类型和字节数组之间的转换 86
3.4.10 不同类型之间的强制转换 87
3.5 C#的用户自定义数据类型 88
3.5.1 认识枚举类型 88
3.5.2 枚举编程示例 89
3.5.3 认识结构类型 90
3.5.4 结构编程示例 90
3.5.5 结构也支持方法 92
3.5.6 结构与类有什么不同 93
3.5.7 哪些地方应使用结构类型 94
3.6 本章总结 94
3.7 实战练习 94
第4章 变量与表达式(教学视频:42分钟) 96
4.1 常量与变量 96
4.1.1 什么是常量 96
4.1.2 静态常量的特点 96
4.1.3 动态常量的特点 97
4.1.4 该用静态常量还是动态常量 97
4.1.5 什么是变量 98
4.1.6 认识变量的实质 99
4.1.7 变量有哪些种类 100
4.1.8 怎样给变量命名 102
4.2 连接的桥梁——运算符与表达式 102
4.2.1 C#的运算符分类 102
4.2.2 算术运算符 103
4.2.3 关系运算符 105
4.2.4 一般赋值运算符 106
4.2.5 复合赋值运算符 107
4.2.6 逻辑运算符 109
4.2.7 复习二进制知识 112
4.2.8 二进制的位运算符 113
4.2.9 有逻辑判断功能的三元运算符 115
4.2.10 自增和自减运算符 116
4.2.11 应该先进行什么运算 117
4.3 关键字 118
4.4 本章总结 119
4.5 实战练习 119
第5章 程序控制语言(教学视频:46分钟) 120
5.1 C#有哪些种类的语句 120
5.2 选择语句让程序具有智能 121
5.2.1 选择语句的作用 121
5.2.2 认识if语句 121
5.2.3 单分支if语句 122
5.2.4 二分支if语句 123
5.2.5 多分支if语句 124
5.2.6 if语句多层嵌套 125
5.2.7 switch多分支选择语句 127
5.2.8 switch语句编程示例 128
5.3 用循环语句进行重复劳动 129
5.3.1 dO循环语句 129
5.3.2 while循环语句 130
5.3.3 for循环语句 131
5.3.4 foreach循环语句 133
5.4 用跳转语句改变程序流程 134
5.4.1 用break语句跳出循环 134
5.4.2 用continue语句进入下次循环 135
5.4.3 用return语句返回 136
5.4.4 用goto语句跳到指定行 137
5.4.5 用goto语句跳出switch语句 138
5.4.6 用goto语句跳出一层嵌套循环 139
5.4.7 用throw语句抛出异常 141
5.5 用注释语句让代码意图更明了 142
5.5.1 普通注释语句 142
5.5.2 可生成帮助文档的注释语句 143
5.6 本章总结 146
5.7 实战练习 146
第6章 函数与方法(教学视频:38分钟) 147
6.1 函数是C#的基本结构 147
6.1.1 函数与方法 147
6.1.2 无参和有参函数 147
6.2 函数的必备件:参数与返回值 148
6.2.1 参数有什么用 148
6.2.2 值参数的使用 148
6.2.3 引用参数的使用 149
6.2.4 输出参数的使用 152
6.2.5 数组参数的使用 153
6.2.6 命名参数和可选参数 154
6.2.7 利用返回值获取数值 156
6.2.8 利用返回值判断逻辑 157
6.3 变量的作用域 159
6.3.1 最常见的局部变量 159
6.3.2 需要惧用的全局变量 160
6.4 认识主入口函数Main() 161
6.5 C#中最常用的函数 165
6.6 本章总结 166
6.7 实战练习 166
第3篇 C#面向对象编程简介 170
第7章 类和对象(教学视频:33分钟) 170
7.1 类和对象的关系 170
7.2 类的定义 171
7.2.1 创建一个类 171
7.2.2 类成员的访问类型 173
7.2.3 创建类的成员方法 174
7.3 创建对象 175
7.3.1 类的构造函数有什么用 175
7.3.2 成员变量的初始化 177
7.3.3 创建类的拷贝构造函数 179
7.3.4 用关键字this引用当前对象 179
7.4 静态成员的使用 180
7.4.1 什么是类的静态成员 180
7.4.2 静态方法怎样调用 181
7.4.3 静态构造函数的优势 182
7.4.4 使用私有构造函数保护静态成员 182
7.4.5 使用静态成员变量计录对象数量 183
7.5 对象的销毁 184
7.5.1 C#的析构函数 184
7.5.2 用Dispose()方法释放资源 185
7.5.3 用using声明作用范围 185
7.6 参数传递 186
7.6.1 通过引用传递返回多个值 186
7.6.2 用out类型参数返回值 189
7.7 重写方法和构造函数让类更宜用 191
7.8 用属性封装类的数据 193
7.8.1 类的属性定义 193
7.8.2 用get访问器返回属性值 195
7.8.3 用set访问器设置属性值 196
7.9 用Readonly类型变量为类设置不变的值 196
7.10 本章总结 198
7.11 实战练习 199
第8章 继承与多态(教学视频:39分钟) 200
8.1 用继承对类进行扩展 200
8.1.1 面向对象程序中的继承 200
8.1.2 C#的继承机制 201
8.1.3 继承是怎样调用构造函数 205
8.1.4 用base关键字调用基类构造函数 206
8.1.5 使用protected访问类型 208
8.1.6 用sealed关键字终止继承 209
8.2 万类之根——Object类 210
8.3 C#类的多态特性 212
8.3.1 什么是多态 212
8.3.2 在基类与子类中定义同名方法 213
8.3.3 方法重写——virtual和override关键字的使用 214
8.3.4 用new关键字指出重写方法 216
8.4 对象类型转换——Up-casting和Down-casting 217
8.4.1 子类到基数的Up-casting类型转换 217
8.4.2 基数到子类的Down-casting类型转换 217
8.4.3 用is和as关键字做对象类型检查 218
8.5 装箱和拆箱 219
8.6 本章总结 219
8.7 实战练习 220
第9章 抽象类和接口(教学视频:24分钟) 221
9.1 定义抽象类 221
9.2 定义统一规划的接口 224
9.2.1 定义接口 224
9.2.2 一个类实现多个接口 227
9.2.3 实现多接口同名方法 229
9.2.4 使用is和as操作符实现接口转换 231
9.2.5 接口间能继承吗 232
9.3 本章总结 234
9.4 实战练习 234
第10章 数组与集合(教学视频:38分钟) 235
10.1 数组的数组——多维数组 235
10.1.1 认识多维数组 235
10.1.2 怎样实例化多维数组 236
10.1.3 什么是变长数组 238
10.2 用foreach循环进行数组的遍历 240
10.3 比数组灵活好用的集合 243
10.3.1 用ArrayList集合保存不同类型数据 244
10.3.2 用Stack集合处理栈 246
10.3.3 用Queue集合处理队列 248
10.4 键-值对应形式的字典类型集合 249
10.4.1 Hashtable类存储方式 250
10.4.2 创建Hashtable集合的方法 250
10.4.3 用Add方法向Hashtable集合中添加元素 250
10.4.4 从Hashtable集合中获取元素的方法 251
10.4.5 用Remove方法移除Hashtable集合中的元素 251
10.4.6 获取Hashtable集合的元素与键值 252
10.4.7 在Hashtable集合中检索元素 253
10.4.8 SortedList类与Hashtable类的区别 253
10.4.9 SortedList类常用方法 253
10.5 本章总结 255
10.6 实战练习 256
第11章 代理和事件(教学视频:31分钟) 257
11.1 代理 257
11.1.1 什么是代理 257
11.1.2 代理所指向方法的类型和标识 258
11.1.3 代理引用的声明和使用 258
11.1.4 .NET Framework中的代理 262
11.1.5 代理用作方法的参数 262
11.1.6 了解多重代理 264
11.1.7 多重代理的实现方法 264
11.1.8 怎样移除多重代理指向的方法 266
11.2 事件和事件处理 267
11.2.1 C#的事件处理 267
11.2.2 事件举例——时钟事件 268
11.2.3 多重事件的处理 270
11.2.4 利用事件传递数据 271
11.3 本章总结 274
11.4 实战练习 275
第4篇 Windows程序设计 278
第12章 WindowS应用程序概述(教学视频:29分钟) 278
12.1 Windows应用程序 278
12.1.1 什么是Windows应用程序 278
12.1.2 创建Windows应用程序 278
12.1.3 程序入口文件Program.cs 279
12.1.4 窗口程序文件Forml.cs 279
12.1.5 窗口设计文件Forml.Designer.cs 280
12.2 Windows应用程序窗体 281
12.2.1 C#的Form类 281
12.2.2 Form类常用属性 281
12.2.3 Form类常用事件 282
12.3 为窗体添加控件 283
12.3.1 Windows窗体控件 283
12.3.2 控件常见属性 284
12.3.3 控件常用公共事件 284
12.3.4 向窗体添加控件的方法 285
12.3.5 调整控件的布局 285
12.4 Windows应用程序编程示例 287
12.4.1 创建一个窗体 287
12.4.2 用属性控制窗体外观 287
12.4.3 向窗体添加控件 288
12.4.4 添加控件事件处理程序 288
12.4.5 查看窗体运行效果 288
12.5 本章总结 289
12.6 实战练习 289
第13章 visual Studio 2010控件介绍(教学视频:39分钟) 290
13.1 接收输入的文本编辑控件 290
13.1.1 TextBox控件的作用 290
13.1.2 怎样获取或设置TextBox控件的内容 291
13.1.3 TextBox控件也可输入多行文本 292
13.1.4 选择TextBox控件中的文本 293
13.1.5 设置Textbox控件为密码框 294
13.1.6 检查TextBox控件的输入值 295
13.1.7 支持格式化的RichTextBox控件 295
13.1.8 选择RichTextBox控件中的文本 296
13.1.9 在RichTextBox控件中撤销上次操作 297
13.1.10 拖放RichTextBox控件中的文本 298
13.1.11 设置RichTextBox控件中的文本格式 299
13.1.12 设置RichTextBox控件的文本缩进 300
13.1.13 在RichTextBox控件中添加超链接 302
13.1.14 RichTextBox控件的文件操作 302
13.2 不能编辑的文本显示控件 304
13.2.1 用Label控件显示文本 304
13.2.2 用LinkLabel控件显示超链接文本 305
13.2.3 保存超链接的LinkCollection集合 307
13.2.4 LinkLabel控件编程示例 307
13.3 包容其他控件的容器控件 309
13.3.1 用Panel控件细分窗体 309
13.3.2 有标题的容器控件GroupBox 312
13.3.3 多页容器控件TabControl 313
13.3.4 TabControl控件的几种常见外观 314
13.3.5 TabControl控件中标签页的选择 316
13.3.6 添加TabControl控件中的标签页 318
13.3.7 网格形式容器控件TableLayoutPanel 320
13.3.8 设置TableLayoutPanel控件的外观 321
13.3.9 添加控件到TableLayoutPanel控件 323
13.4 值设置控件 325
13.4.1 用CheckBox控件选择打开或关闭状态 325
13.4.2 用RadioButton控件进行多选一操作 328
13.5 本章总结 329
13.6 实战练习 329
第14章 列表选择控件介绍(教学视频:43分钟) 330
14.1 ListBox控件 330
14.1.1 用ListBox显示列表 330
14.1.2 用ListBox添加列表项 330
14.1.3 设置ListBox的行为 332
14.1.4 让ListBox支持多选 334
14.1.5 设置ListBox的外观 336
14.1.6 对ListBox列表进行排序 337
14.1.7 控制ListBox列表项的刷新 337
14.1.8 查找ListBox中的列表 338
14.1.9 ListBox控件的常用方法 340
14.2 ComboBox控件 342
14.2.1 认识ComboBox控件 342
14.2.2 设置ComboBox下拉样式 342
14.2.3 设置ComboBox的自动补齐 344
14.2.4 ComboBox自动补齐的数据源 344
14.2.5 设置ComboBox自动补齐方式 347
14.2.6 ComboBox的常见事件 348
14.2.7 修改ComboBox的子项 349
14.2.8 ComboBox的子项绘制 350
14.3 CheckedListBox控件 353
14.3.1 带复选标记的列表控件CheckedListBox 353
14.3.2 CheckedListBox控件编程示例 355
14.4 ListView控件 359
14.4.1 带图标的列表控件ListView 359
14.4.2 ListView的5种视图 360
14.4.3 使用任务窗体设置ListView 361
14.4.4 用ImageList给ListView提供图标 362
14.4.5 设置ListView的子项 364
14.4.6 设置Details视图模式的数据 365
14.4.7 给ListView添加分组设置 367
14.4.8 让ListView支持拖曳操作 368
14.4.9 在ListView中进行搜索 370
14.5 TreeView控件 371
14.5.1 用TreeView控件显示分层数据 371
14.5.2 添加节点到TreeView 372
14.5.3 在节点前显示复选框 374
14.5.4 选中节点的常用约定 376
14.5.5 用ImageList为TreeView提供图标 376
14.5.6 展开与折叠TreeView的节点 377
14.5.7 允许编辑TreeView的节点文本 379
14.5.8 让TreeView支持拖曳操作 380
14.6 本章总结 383
14.7 实战练习 383
第15章 数据显示控件(教学视频:27分钟) 384
15.1 DataGridView控件以表格显示数据 384
15.1.1 DataGridView有哪些功能 384
15.1.2 设置对表格数据的操作 385
15.1.3 在窗体中如何放置DataGridView 388
15.1.4 为DataGridView提供数据 389
15.1.5 DataGridView添加列 389
15.1.6 冻结DataGridView中的列 390
15.1.7 编辑DataGridView中的列 391
15.2 为DataGridView服务的类 392
15.2.1 DataGridViewElement对象模型 392
15.2.2 单元格对象模型DataGridViewCell 393
15.2.3 数据列对象模型DataGridViewColumn 394
15.2.4 数据行对象模型DataGridViewRow 394
15.3 设置DataGridView的格式 395
15.3.1 设置单元格边框样式 395
15.3.2 设置DataGridView控件边框样式 396
15.3.3 设置单元格边框样式 397
15.3.4 设置左上角单元格边框样式 398
15.3.5 设置单元格样式 399
15.3.6 单元格样式设置的优先级 402
15.3.7 设置DataGridView外观 404
15.3.8 用属性设置可对表格的操作 404
15.3.9 DataGridView其他常用属性 405
15.3.10 用AutoResizeColumm方法调列宽 407
15.3.11 用AutoResizeColumns方法调整所有列宽 409
15.3.12 用AutoResizeColumnHeadersHeight方法调整列标题高度 410
15.3.13 用AutoResizeRowHeadersWidth方法调整行标题宽度 411
15.3.14 DataGridView其他常用方法 412
15.4 DataGridView中显示数据的相关类 413
15.4.1 设置数据排序模式 413
15.4.2 用DataGridViewTextBoxColumn显示文本数据列 413
15.4.3 用DataGridViewCheckBoxColumn显示二元状态数据列 415
15.4.4 用DataGridViewlmageColumn显示图像数据列 416
15.4.5 用DataGridViewButtonColumn显示按钮数据列 418
15.4.6 用DataGridViewComboBoxColumn显示下拉列表数据列 419
15.4.7 用DataGfidViewLinkColumn显示超链接数据列 421
15.5 本章总结 423
15.6 实战练习 423
第16章 通用对话框(教学视频:40分钟) 424
16.1 消息对话框 424
16.1.1 用消息对话框显示信息 424
16.1.2 该怎样显示消息对话框 425
16.1.3 消息对话框能显示哪些按键 426
16.1.4 用户按了哪个按钮 427
16.1.5 消息对话框可显示哪些图标 429
16.1.6 消息对话框编程示例 430
16.2 文件对话框 433
16.2.1 认识OpenFileDialog组件 433
16.2.2 显示“打开文件”对话框 434
16.2.3 打开快捷方式引用的文件 434
16.2.4 同时选择多个文件 435
16.2.5 设置可打开的文件类型 436
16.2.6 设置“打开”文件对话框的外观 438
16.2.7 检查指定的文件是否存在 440
16.2.8 使用SaveFileDialog组件 441
16.2.9 SaveFileDialog组件编程示例 442
16.2.10 另存文件时的覆盖与新建 444
16.2.11 使用FolderBrowserDialog组件 444
16.2.12 FolderBrowserDialog组件编程示例 445
16.3 字体选择对话框 448
16.3.1 使用FontDialog组件 448
16.3.2 FontDialog组件编程示例 449
16.4 颜色选择对话框 451
16.4.1 使用ColorDialog组件 451
16.4.2 ColorDialog组件编程示例 452
16.5 打印相关对话框 454
16.5.1 使用PrintDocument组件 454
16.5.2 PrintDocument组件编程示例 454
16.5.3 使用PageSetupDialog组件 457
16.5.4 PageSetupDialog组件编程示例 458
16.5.5 使用PrintPreviewDialog组件 458
16.5.6 PrintPreviewDialog组件编程示例 460
16.5.7 使用PrintDialog组件 462
16.6 本章总结 463
16.7 实战练习 464
第17章 其他常用控件(教学视频:29分钟) 465
17.1 计时器组件 465
17.1.1 Timer组件有什么用 465
17.1.2 用Timer控制程序定时执行 466
17.1.3 用Timer制作秒表 467
17.1.4 启动和重置Timer 469
17.2 图形控件 470
17.2.1 用PictureBox控件显示图片 470
17.2.2 PictureBox显示图片的5种方式 471
17.2.3 更新PictureBox 中的图片 472
17.2.4 用ImageList存储图片 473
17.2.5 哪些控件可用ImageList中的图片 474
17.3 菜单控件 475
17.3.1 用MenuStrip创建菜单 475
17.3.2 有哪些方法添加菜单项 476
17.3.3 为菜单项编写代码完成相应功能 479
17.3.4 用ToolStrip创建工具栏 481
17.3.5 工具栏中可使用的按钮类型 482
17.3.6 设置工具栏的外观和行为 483
17.3.7 设置ToolStripComboBox的自动完成功能 485
17.3.8 设置ToolStrip的外观 486
17.3.9 用ContextMenuStrip创建快捷菜单 486
17.4 本章总结 487
17.5 实战练习 487
第18章 WindowS应用程序的部署(教学视频:22分钟) 489
18.1 你了解这两种部署方案吗 489
18.1.1 什么是ClickOnce部署方案 489
18.1.2 什么是Windows Installer部署方案 490
18.2 ClickOnce部署 490
18.2.1 创建一个部署用的示例程序 490
18.2.2 启动“发布向导”的3种方法 491
18.2.3 设置发布应用程序的3个URL地址 492
18.2.4 为应用程序设置名称 494
18.2.5 设置需发布的非代码文件 494
18.2.6 为应用程序添加下载组 495
18.2.7 设置应用程序的系统必备组件 495
18.2.8 设置安装组件的权限 496
18.2.9 应用程序的3种发布方式 497
18.2.10 将应用程序发布到网站 497
18.2.11 将应用程序发布到共享文件夹 499
18.2.12 将应用程序发布到CD-ROM 500
18.2.13 发布应用程序 501
18.2.14 安装发布的应用程序 503
18.3 Windows Installer部署 504
18.3.1 创建一个部署用的示例程序 504
18.3.2 创建部署项目 505
18.3.3 设置文件安装到目标机器的位置 505
18.3.4 添加项目输出组 506
18.3.5 设置安装后的桌面快捷方式 507
18.3.6 更改安装应用程序的部署特性 508
18.3.7 将应用程序信息添加到注册表 509
18.3.8 安装过程中可使用的对话框 509
18.3.9 “欢迎使用”用户界面对话框 510
18.3.10 “选择安装文件夹”用户界面对话框 511
18.3.11 “确认安装”用户界面对话框 511
18.3.12 “进度”用户界面对话框 512
18.3.13 “安装完成”用户界面对话框 512
18.3.14 安装过程中的自定义默认对话框 513
18.3.15 “单选按钮”用户界面对话框 514
18.3.16 “复选框”用户界面对话框 515
18.3.17 “文本框”用户界面对话框 516
18.3.18 “客户信息”用户界面对话框 517
18.3.19 “许可协议”用户界面对话框 517
18.3.20 “自述文件”用户界面对话框 518
18.3.21 “注册用户”用户界面对话框 518
18.3.22 生成应用程序安装文件 519
18.4 比较两种部署方案 519
18.5 本章总结 520
18.6 实战练习 520
第5篇 C#高级编程技术和工具 522
第19章 异常处理(教学视频:28分钟) 522
19.1 程序运行中的 522
19.2 C#和.NET中的异常处理 524
19.2.1 使用try…catch…finally结构处理异常 524
19.2.2 捕获程序中可能产生的异常 526
19.2.3 用finally语段释放资源 528
19.3 多异常的捕获 530
19.3.1 什么多异常 530
19.3.2 异常的继承关系 533
19.3.3 捕获所有异常的方法 534
19.4 定义用户异常的方法 534
19.5 本章总结 537
19.6 实战练习 537
第20章 文件系统与流(教学视频:45分钟) 538
20.1 软件系统环境相关信息 538
20.1.1 用System.Environment类获得应用程序运行环境的信息 538
20.1.2 System.Environment类的应用举例 538
20.1.3 用Enviroment.GetFolderPath()获得各种Windows标准文件夹的路径 540
20.2 对文件进行操作 542
20.2.1 C#对文件进行操作的类 542
20.2.2 用System.IO.File类的静态方法操作文件 542
20.2.3 用System.IO.FileInfo类的方法操作文件 544
20.3 对文件夹进行操作 545
20.3.1 C#对文件夹操作的类 545
20.3.2 用System.IO.Directory类的静态方法操作文件夹 545
20.3.3 用System.IO.DirectoryInfo类的方法操作文件夹 547
20.4 流文件概述 549
20.4.1 了解流 549
20.4.2 Stream类的常用方法和属性 549
20.5 使用流对文件进行读写 550
20.5.1 使用System.IO.FileStream类进行文件读写 550
20.5.2 用System.IO.FileStream类打开文本文件 551
20.5.3 用BinaryReader和BinaryWriter类读写原始文件 553
20.5.4 用StreamReader和StreamWriter类读写文本文件 554
20.6 序列化和反序列化 554
20.6.1 什么是对象序列化 555
20.6.2 用格式器描述被序列化对象 555
20.6.3 对象序列化使用示例一 555
20.6.4 对象序列化使用示例二 558
20.6.5 对象序列化使用示例三 560
20.7 异步读取数据 562
20.7.1 什么是异步读取数据 562
20.7.2 异步读取数据使用示例 562
20.8 本章总结 564
20.9 实战练习 564
第21章 可扩展标记语言(教学视频:30分钟) 565
21.1 认识XML 565
21.1.1 文档对象模型的功能 566
21.1.2 用XPath查询XML文档 567
21.1.3 了解可扩展样式表语言XSL 567
21.1.4 用XML Schemas设置数据元素和属性 568
21.1.5.NET中处理XML的相关类 568
21.2 使用XML DOM进行编程 569
21.2.1 创建一个空的XML文档 571
21.2.2 向XML文档添加元素 572
21.2.3 更新XML文档中的元素 573
21.2.4 删除XML文档中的元素 576
21.2.5 加载和保存XML文档 577
21.3 用DataSet保存XML数据 577
21.3.1 不使用Schema文件加载XML文档 580
21.3.2 使用Schema文件加载XML文档 582
21.3.3 遍历XML文档 584
21.4 用XPath查找节点 586
21.4.1 XPath简介 586
21.4.2 XPath查询示例代码 586
21.4.3 XPath示例代码讲解 590
21.5 使用XSL将XML文档转化为另一种格式 591
21.5.1 XSL转换示例一 591
21.5.2 XSL转换示例讲解 595
21.5.3 XSL转换示例二 596
21.6 本章总结 597
21.7 实战练习 597
第22章 多线程编程(教学视频:27分钟) 599
22.1 C#线程的主要特征 599
22.1.1 输出不同内容的两个线程 599
22.1.2 调用同一方法的两个线程 600
22.1.3 静态变量在多线程多线程中的应用 601
22.1.4 线程调度 603
22.1.5 线程和进程的关系 603
22.1.6 何时需要使用多线程 603
22.1.7 何时不要使用多线程 604
22.2 创建并开始一个线程 604
22.2.1 用Thread类创建线程 604
22.2.2 向ThreadStart传递参数 605
22.2.3 给线程命名 607
22.2.4 C#的后台线程 607
22.2.5 设置线程优先级 608
22.2.6 线程中的异常处理 608
22.3 线程同步 610
22.3.1 线程同步和协同的可用性工具 610
22.3.2 阻止现在的线程 611
22.3.3 Joining一个线程 612
22.4 线程安全 612
22.4.1 了解线程安全 612
22.4.2 选择一个同步对象 614
22.4.3 使用嵌套锁 615
22.4.4 什么时候上锁合适 615
22.4.5 使用锁的效率考虑 616
22.4.6 线程安全与.NET Framework 617
22.5 用中断和取消提前释放线程 618
22.5.1 中断线程 618
22.5.2 取消线程 619
22.6 线程有哪些状态 619
22.7 等待处理 620
22.7.1 了解自动设置方法 621
22.7.2 自动设置方法示例一 621
22.7.3 自动设置方法示例二 622
22.7.4 自动设置方法示例三 623
22.7.5 ManualResetEvent类控制多个线程 625
22.7.6 跨线程的互斥量 626
22.7.7 使用信号量 626
22.7.8 使用WaitAny、WaitAll和SignalAndWait方法 627
22.8 同步性作用域 628
22.9 套间线程 630
22.9.1 什么是套间线程 630
22.9.2 使用套间模型 631
22.9.3 用Control.Invoke方法进行跨线程调用 631
22.10 管理工作线程的BackgroundWorker组件 631
22.10.1 BackgroundWorker的特征 632
22.10.2 BackgroundWorker组件编程示例 632
22.10.3 BackgroundWorker组件编程示例二 633
22.10.4 BackgroundWorker组件编程示例三 635
22.11 用于读/写操作的锁 636
22.11.1 了解读/写操作的锁 636
22.11.2 管理资源访问锁定状态类ReaderWriterLockSlim 637
22.11.3 读/写操作锁的进一步说明 638
22.12 用线程池管理线程 639
22.13 用异步代理得到线程返回的数据 641
22.14.NET提供的计时器 642
22.15 各线程数据的局部存储 644
22.16 本章总结 644
22.17 实战练习 645
第6篇 Web数据库开发 648
第23章 数据库基础知识(教学视频:15分钟) 648
23.1 了解SQL Server 648
23.2 操作MSSQL数据表 649
23.2.1 在数据库中创建、修改和删除表 650
23.2.2 向表中插入、修改、删除和检索数据 650
23.2.3 设置表的主键约束 653
23.2.4 设置表的外键约束 654
23.2.5 设置表的唯一性约束 654
23.2.6 设置表的CHECK约束 655
23.2.7 设置列的默认约束 655
23.3 数据库的存储过程 655
23.3.1 创建存储过程的SQL语句 656
23.3.2 执行和删除存储过程的SQL语句 657
23.3.3 用SQL Server Management Studio管理存储过程 657
23.4 数据库中的触发器 659
23.4.1 创建和使用触发器的SQL语句 659
23.4.2 用SQL Server Management Studio管理触发器 660
23.5 本章总结 661
23.6 实战练习 661
第24章 ADO.NET数据库编程(教学视频:32分钟) 662
24.1 ADO.NET介绍 662
24.1.1 ADO.NET是神马 662
24.1.2 ADO.NET相关的类和接口 663
24.2 DataSet和DataTable类 664
24.2.1 表示内存数据表的DataTable类 664
24.2.2 创建DataTable的方法 666
24.2.3 遍历DataTable中保存的记录 669
24.2.4 接受和回滚DataTable的更改 670
24.2.5 表示内存数据集合的DataSet类 673
24.2.6 使用DataSet类的步骤 675
24.2.7 接受和回滚DataSet的更改 679
24.3 用ADO.NET访问SQL Server数据库 680
24.3.1 ADO.NET访问数据库的步骤 680
24.3.2 用SqlConnection连接数据库 681
24.3.3 用SqlCommand执行SQL命令 684
24.3.4 用SqlDataReader读取数据库记录 687
24.3.5 用SqlDataAdapter获取数据库记录 689
24.3.6 用SqlDataAdapter更改数据库记录 692
24.4 用ADO.NET访问Access数据库 694
24.4.1 System.Data.OleDb命名空间提供的功能 694
24.4.2 访问Access数据库的各种类 695
24.5 使用数据库访问控件 696
24.5.1 用DataGridView控件管理数据库中的记录 696
24.5.2 用BindingNavigator控件导航记录 699
24.6 本章总结 700
24.7 实战练习 700
第25章 ASP.NET技术入门(教学视频:24分钟) 702
25.1 初识ASP.NET 702
25.1.1 了解ASP.NET 702
25.1.2 System.Web常用的类 703
25.1.3 创建一个Web应用程序 703
25.2 用ASP.NET控件创建网页 706
25.2.1 用TextBox控件显示文本框 706
25.2.2 用Button控件显示按钮 707
25.2.3 用HyperLink控件显示超链接 709
25.2.4 用DropDownList、ListBox等显示下拉列表、列表 709
25.2.5 用Menu控件显示导航菜单 711
25.3 留言板网站实例 713
25.3.1 数据库和页面设计 713
25.3.2 设计欢迎页面 714
25.3.3 设计添加留言页面 715
25.3.4 设计查看留言页面 718
25.3.5 发布留言板网站 721
25.4 本章总结 723
25.5 实战练习 724
第26章 服务器端控件详解(教学视频:24分钟) 725
26.1 认识服务器控件 725
26.1.1 为什么使用服务器控件 725
26.1.2 服务器控件与HTML控件的区别 725
26.2 数据操作控件 726
26.2.1 SqlDataSource的作用 726
26.2.2 用SqlDataSource控件连接到数据库 727
26.2.3 用GridView控件显示数据 732
26.2.4 用DetailsView控件显示指定记录 735
26.3 用验证控件检查用户输入 739
26.3.1 必填内容的验证控件RequiredFieldValidator 739
26.3.2 比较两个值的验证控件CompareValidator 740
26.3.3 检查指定范围的验证控件RangeValidator 743
26.3.4 正则表达式验证控件RegularExpressionValidator 743
26.3.5 自定义验证控件CustomValidator 744
26.3.6 验证错误信息汇总控件ValidationSummary 747
26.4 创建ASP.NET用户控件 748
26.5 本章总结 751
26.6 实战练习 751
第7篇 .NET 4.0的增强功能 754
第27章 WPF框架(教学视频:19分钟) 754
27.1 WPF基础 754
27.1.1 了解WPF基础架构 754
27.1.2 与WPF相关的技术 755
27.2 创建WPF应用程序 756
27.2.1 创建WPF的过程 756
27.2.2 完整的WPF应用程序实例 759
27.2.3 创建WPF浏览器应用程序 761
27.3 简单WPF实例 763
27.3.1 用ListBox控件实现列表显示 763
27.3.2 用Hyperlink控件实现多页面切换 767
27.3.3 用DockPanel沿容器边缘定位 768
27.3.4 使用StackPanel叠放包含的控件 770
27.3.5 使用数据源集合实现多数据绑定 771
27.3.6 属性变更引起依赖数据绑定变化 774
27.3.7 使用Brush填充图形 778
27.3.8 使用Storyboard实现动画 783
27.3.9 使用Storyboard实现控件的翻转 785
27.4 本章总结 787
27.5 实战练习 787
第28章 WCF框架(教学视频:22分钟) 788
28.1 WCF基础 788
28.1.1 了解WCF架构 788
28.1.2 了解WCF模型 789
28.2 WCF服务和客户端实例 790
28.2.1 创建WCF服务承载项目 790
28.2.2 定义WCF服务协定 790
28.2.3 定义实现WCF服务接口的类 792
28.2.4 运行WCF服务的相关代码 793
28.2.5 创建WCF客户端程序 795
28.2.6 配置WCF客户端的配置 795
28.2.7 WCF客户端对服务端的调用 797
28.3 主要的WCF技术 799
28.3.1 使用会话在客户端与服务间交互 799
28.3.2 WCF事务管理模型 800
28.4 本章总结 801
28.5 实战练习 802
第29章 Windows WF框架(教学视频:40分钟) 803
29.1 C#的工作流开发框架 803
29.1.1 了解WF框架 803
29.1.2 WF框架中的重要元素 804
29.2 开发WF工作流应用程序 805
29.2.1 第一个WF应用程序 805
29.2.2 WF工作流的基本元素:WF活动 810
29.2.3 自定义的代码活动 815
29.2.4 WF提供的服务 818
29.3 WF创建工作流实例 819
29.3.1 在工作流中使用集合 819
29.3.2 猜价格游戏 823
29.4 本章总结 828
29.5 实战练习 828
第30章 语言集成查询LINQ(教学视频:25分钟) 829
30.1 LINQ概述 829
30.1.1 了解LINQ查询 829
30.1.2 简单LINQ查询实例 830
30.2 LINQ语言基础 830
30.2.1 最重要的LINQ查询表达式 831
30.2.2 LINQ查询语法和方法语法实例 833
30.2.3 用LINQ合并数据 835
30.2.4 用LINQ转换数据 837
30.3 LINQ查询数据源 838
30.3.1 用LINQ To SQL查询数据库中的数据 838
30.3.2 用LINQ To DataSet查询缓存在DataSet中的数据 842
30.3.3 用LINQ To XML查询XML中的数据 843
30.3.4 用LINQ To Objects查询可枚举的集合 844
30.4 本章总结 846
30.5 实战练习 846
第8篇 综合案例 848
第31章 用MVC开发音乐商店网站 848
31.1 开发站点前的配置 848
31.1.1 预览音乐商店网站 848
31.1.2 系统架构总览 851
31.1.3 系统数据库设计 852
31.1.4 系统文件目录结构 854
31.1.5 创建母版页和CSS文件 856
31.1.6 使用Entity Framework创建实体模型 858
31.2 音乐专辑列表实现 860
31.2.1 首页控制器实现 860
31.2.2 创建首页视图 861
31.2.3 浏览音乐流派 862
31.2.4 浏览音乐明细信息 865
31.3 管理音乐列表 866
31.3.1 基于角色的身份验证 867
31.3.2 编辑音乐信息 870
31.3.3 基于模型的数据验证 875
31.4 实现和管理购物车 876
31.4.1 添加到购物车功能 876
31.4.2 从购物车中移除功能 879
31.4.3 提交购物车 880
31.5 关键技术讲解 885
31.6 本章总结 885
31.7 实战练习 885
第32章 电子购物商城 886
32.1 系统总体设计 886
32.1.1 系统功能描述 886
32.1.2 WebShopping应用程序组成 888
32.1.3 保存数据需要哪些表 890
32.1.4 设计数据库表之间关系设计 893
32.2 系统通用类和模块设计 894
32.2.1 编写系统常量和枚举代码 894
32.2.2 编写系统常用操作的代码 895
32.2.3 设计显示标题的用户控件 896
32.2.4 设计分页用户控件 897
32.2.5 创建级联样式表web.css文件 902
32.2.6 设计主题文件 902
32.2.7 在Web.config中设置数据库连接字符串 903
32.2.8 创建数据库对象模型 904
32.3 电子购物商城首页 907
32.3.1 设计首页界面 907
32.3.2 设计全站搜索的用户控件 911
32.3.3 设计登录网站的用户控件 912
32.3.4 设计显示新闻的用户控件 914
32.3.5 设计显示公告的用户控件 916
32.4 用户注册和登录 917
32.4.1 用户必须先注册 918
32.4.2 显示提交的用户信息 922
32.4.3 处理用户登录 925
32.4.4 退出系统时要做的操作 928
32.5 浏览商品、购物车和订单 928
32.5.1 查看商品信息 929
32.5.2 对商品进行评论 932
32.5.3 购物车功能 936
32.5.4 将商品加入购物车 937
32.5.5 查看购物车内容 940
32.5.6 生成订单编号的代码 944
32.5.7 生成购物订单 945
32.5.8 发布留言 950
32.6 商品搜索 952
32.6.1 按商品名称搜索 953
32.6.2 更复杂的高级搜索 956
32.7 用户信息中心 960
32.7.1 管理用户的首页 960
32.7.2 根据角色动态加载操作菜单 962
32.7.3 查看个人信息 965
32.7.4 修改个人信息 967
32.7.5 修改密码 971
32.7.6 管理我的订单 974
32.8 商品及其分类管理 978
32.8.1 查看已有商品分类列表 978
32.8.2 动态加载商品分类层次结构的代码 983
32.8.3 添加新的商品分类 984
32.8.4 修改已有商品分类 987
32.8.5 查看已有商品列表 990
32.8.6 动态加载商品分类层次树的代码 997
32.8.7 添加新的商品 999
32.8.8 修改已有商品 1003
32.8.9 商品图片管理 1007
32.8.10 显示商品图片 1012
32.8.1 1商品评论列表 1013
32.9 系统信息中心 1018
32.9.1 查看已有新闻列表 1018
32.9.2 发布新的新闻 1023
32.9.3 修改己发布新闻 1025
32.9.4 发布公告 1029
32.9.5 管理用户留言 1032
32.10 系统用户和角色管理 1035
32.10.1 查看已有角色列表 1036
32.10.2 添加新的角色 1040
32.10.3 修改已有角色 1042
32.10.4 管理注册用户 1045
32.10.5 添加管理员 1049
32.11 本章总结 1053
32.12 实战练习 1053