第1章 C#和.NET简介 1
1.1 计算机语言 1
1.2 为什么是C#.NET 2
1.3 C#.NET的发展史 3
1.3.1 .NET是什么 4
1.3.2 .NET核心功能 4
1.3.3 .NET的发布 4
1.4 如何学好编程 5
1.5 .NET Framework简介 6
1.5.1 公共类型系统CTS 6
1.5.2 公共语言规范CLS 7
1.5.3 公共语言运行时CLR 8
1.5.4 基类库BCL 9
1.6 集成开发环境IDE 9
1.6.1 集成开发环境界面 9
1.6.2 用IDE创建Windows应用程序 10
1.6.3 IDE的视图和管理器 11
1.7 创建C#控制台程序的操作步骤 13
1.7.1 从最简单的程序入手 13
1.7.2 系统的“智能敏感”提示 15
1.7.3 控制台应用程序创建的文件 16
1.7.4 程序的Debug和Release版本 16
1.8 .NET程序集 16
本章小结 17
第2章 程序结构、变量、类型、运算符 19
2.1 程序结构 19
2.1.1 用类比理解程序结构 20
2.1.2 命名空间 21
2.1.3 引用using 23
2.1.4 格式化输出 24
2.2 变量、常量和字量 26
2.2.1 变量的声明 26
2.2.2 变量的命名 27
2.2.3 变量的种类和赋值 27
2.2.4 常量和字量 29
2.3 类型 32
2.3.1 类型的分类 32
2.3.2 简单类型(系统定义的值类型) 36
2.3.3 枚举类型(自定义的值类型) 39
2.3.4 结构类型(自定义的值类型) 39
2.3.5 字符串(系统定义的引用类型) 41
2.3.6 数组(自定义的引用类型) 43
2.3.7 object类型(系统定义的引用类型) 44
2.3.8 变量类型之间的转换 45
2.4 运算符 47
2.4.1 算术运算符和自增自减运算符 47
2.4.2 位运算符 48
2.4.3 逻辑运算符 50
2.4.4 关系运算符 51
2.4.5 条件运算符 52
2.4.6 赋值运算符 52
2.4.7 特殊运算符 53
2.5 运算符的优先级和结合性 55
2.5.1 运算符的优先级 55
2.5.2 运算符的结合性 56
2.6 编程练习 57
第3章 表达式、语句、程序调试 59
3.1 表达式 59
3.1.1 表达式的求值和放置 59
3.1.2 表达式的类别 60
3.1.3 算术表达式 61
3.1.4 关系表达式 61
3.1.5 逻辑表达式 62
3.1.6 布尔表达式 62
3.2 C#语句 63
3.2.1 C#语句与自然语言的语句 64
3.2.2 C#语句与C语句 64
3.2.3 C#语句的分类 64
3.3 选择语句 67
3.3.1 if语句 67
3.3.2 switch语句 68
3.4 迭代语句 70
3.4.1 while语句 70
3.4.2 do语句 70
3.4.3 for语句 71
3.4.4 foreach语句 72
3.5 跳转语句 73
3.5.1 break语句 73
3.5.2 continue语句 73
3.5.3 return语句 74
3.6 程序调试 74
3.6.1 程序错误分类 74
3.6.2 发现语法错误 75
3.6.3 逻辑错误与程序调试 75
3.7 编程练习 76
第4章 类与对象 84
4.1 什么是类和对象 84
4.1.1 类的声明 86
4.1.2 类的用途 88
4.1.3 面向对象的思想方法 90
4.2 数据成员 92
4.3 函数成员 93
4.3.1 方法 93
4.3.2 属性 99
4.3.3 索引器 104
4.3.4 运算符重载 106
4.3.5 构造函数 108
4.3.6 析构函数 110
4.4 编程练习 111
第5章 继承、多态与接口 116
5.1 继承 116
5.1.1 什么是继承 116
5.1.2 继承的特点 117
5.1.3 与继承有关的修饰符 118
5.1.4 继承的规则 119
5.2 多态 120
5.2.1 编译时的多态性 121
5.2.2 运行时的多态性 121
5.2.3 通过抽象类实现多态性 124
5.3 接口 125
5.3.1 什么是C#接口 126
5.3.2 通过接口实现多态性 126
5.3.3 抽象类和接口的相同点和不同点 128
5.3.4 接口的特点 129
5.4 编程练习 129
第6章 组件与控件 137
6.1 组件 137
6.1.1 什么是组件 137
6.1.2 创建.NET基本组件 138
6.1.3 引用.NET基本组件 139
6.1.4 为什么要用组件 140
6.2 组件模型 141
6.2.1 组件模型的发展现状 141
6.2.2 .NET组件模型的特点 142
6.2.3 .NET组件的创建 144
6.2.4 .NET组件的引用 145
6.2.5 IComponent接口 148
6.3 控件 148
6.3.1 Windows Form窗体 149
6.3.2 公共控件 152
6.3.3 容器控件 160
6.3.4 菜单和工具栏控件 160
6.4 对话框 162
6.4.1 标准对话框 162
6.4.2 用户自定义对话框 164
6.4.3 模式和非模式对话框 165
6.5 用户定制控件 166
6.5.1 从标准控件继承 166
6.5.2 从UserControl类继承 167
6.5.3 从Control类继承 169
6.6 控件的属性和方法 169
6.6.1 Control控件的属性 169
6.6.2 Control控件的方法 170
6.7 接口与组件的关系 170
6.7.1 接口描述了组件对外提供的服务 170
6.7.2 接口设计 171
6.8 编程练习 172
第7章 委托与事件 174
7.1 委托 174
7.1.1 领导的委托 174
7.1.2 多个方法赋给同一个委托 176
7.2 事件 176
7.2.1 事件的概念 176
7.2.2 C#事件 176
7.2.3 Button控件的Click事件 180
7.2.4 事件的发布者与订阅者 181
7.3 控件的事件 182
7.3.1 窗体控件的事件 182
7.3.2 Control类的事件 183
7.3.3 鼠标事件处理 184
7.3.4 键盘事件处理 185
7.4 匿名方法 187
7.5 编程练习 188
第8章 图形与图像 193
8.1 GDI+介绍 193
8.1.1 坐标系 194
8.1.2 像素 194
8.1.3 图象 194
8.1.4 颜色 194
8.2 常用绘图类型和对象 194
8.2.1 Color结构 195
8.2.2 图形数据结构 196
8.2.3 Graphics类型和对象 196
8.2.4 Pen类型和对象 197
8.2.5 Brush类型和对象 199
8.3 矢量图形 202
8.3.1 基本矢量图形的绘制 202
8.3.2 字符串的绘制 203
8.3.3 交互式绘图 204
8.4 图像 205
8.4.1 图像文件 205
8.4.2 图像处理 206
8.5 编程练习 208
第9章 异常处理 215
9.1 运行错误与异常 215
9.1.1 最坏的情况 215
9.1.2 异常类 215
9.2 异常处理语句 217
9.2.1 抛出异常 217
9.2.2 try-catch-finally模块 218
9.2.3 try-catch模块 219
9.2.4 try-finally模块 219
9.2.5 try-finally的简化形式 220
9.3 编程练习 221
第10章 流、文件、目录和对象序列化 223
10.1 流 223
10.1.1 与流相关的类 223
10.1.2 流的属性和方法 225
10.2 文件 227
10.2.1 读写文本文件 227
10.2.2 读写二进制文件 229
10.2.3 File类 232
10.2.4 FileInfo类 233
10.3 目录 235
10.3.1 DirectoryInfo类 235
10.3.2 Directory类 236
10.4 对象序列化与特性 237
10.4.1 持久存储 237
10.4.2 特性(Attributes) 243
10.5 编程练习 246
第11章 ADO.NET 249
11.1 ADO.NET数据对象模型 249
11.2 数据提供者 250
11.2.1 数据提供者的一些核心类和对象 251
11.2.2 连接式编程 252
11.2.3 操作SQL Server数据源 255
11.3 数据集DataSet 259
11.3.1 数据表DataTable 259
11.3.2 DataSet的特点 262
11.4 非连接式和数据适配器 262
11.4.1 非连接式编程 263
11.4.2 数据适配器的更新属性 265
11.4.3 两种数据连接模式的比较 266
11.5 编程练习 268
第12章 泛型 269
12.1 为什么要用泛型 269
12.1.1 从交换两个参数谈起 269
12.1.2 泛型的优点 270
12.2 泛型方法 271
12.2.1 泛型方法的定义 271
12.2.2 default运算符与泛型变量初始化 272
12.2.3 泛型方法的调用 272
12.2.4 限制 273
12.3 泛型类 273
12.3.1 自定义泛型类 273
12.3.2 泛型参数的约束 275
12.3.3 泛型类的继承 277
12.3.4 泛型类设计原则 278
12.4 泛型接口 278
12.5 泛型委托 279
12.6 编程练习 280
第13章 集合 283
13.1 集合的分类 283
13.1.1 数据结构 283
13.1.2 线性和非线性结构 284
13.1.3 数据结构与类型的关系 285
13.1.4 按数据结构划分集合 285
13.2 顺序存储的线性集合 286
13.2.1 顺序表List〈T〉 286
13.2.2 排序表SortedList 291
13.2.3 非泛型顺序表ArrayList 294
13.2.4 队列Queue〈T〉 294
13.2.5 栈Stack〈T〉 295
13.3 链式存储的线性集合 296
13.3.1 单链表 296
13.3.2 双向链表LinkedList〈T〉 297
13.4 索引存储 300
13.4.1 索引表的用途 301
13.4.2 索引表的存储 301
13.5 散列存储 302
13.5.1 散列存储的思想方法 302
13.5.2 哈希表HashTable 303
13.5.3 字典Dictionary〈TKey,TValue〉 304
13.5.4 哈希集HashSet〈T〉 305
13.6 与集合有关的接口 306
13.6.1 枚举接口 306
13.6.2 集合接口 308
13.6.3 列表接口 309
13.7 编程练习 309
第14章 语言集成查询LINQ 313
14.1 LINQ的用途与种类 313
14.1.1 LINQ的用途 313
14.1.2 LINQ的种类 313
14.2 C#3.0的语言功能 314
14.2.1 隐式类型局部变量 314
14.2.2 匿名类型 315
14.2.3 扩展方法 316
14.2.4 λ表达式 317
14.3 LINQ查询语法 320
14.3.1 方法语法 320
14.3.2 查询表达式 323
14.4 LINQ to Objects 326
14.4.1 投影 327
14.4.2 排序 330
14.4.3 过滤 331
14.4.4 分组 333
14.4.5 元素运算符 334
14.4.6 标量运算符 335
14.4.7 量词运算符 336
14.4.8 延迟执行与转换运算符 336
14.4.9 集合运算符 338
14.5 LINQ to SQL 339
14.5.1 LINQ to SQL实体类 339
14.5.2 查询与更新 340
14.5.3 连接查询 342
14.6 编程练习 345
参考文献 346
附录A 编程练习代码和讨论 347
附录B SQL Server 2008数据库系统介绍 397
附录C 延伸读物 410