第1章 C#基础 1
1.1 C#的家族史 2
1.1.1 现代编程时代的开始 2
1.1.2 OOP和C++的诞生 3
1.1.3 因特网和Java的兴起 3
1.1.4 C#的诞生 4
1.2 C#与.NET框架的关系 5
1.2.1 什么是 .NET框架 5
1.2.2 公共语言运行环境的工作原理 6
1.2.3 受控与非受控代码 6
1.2.4 公共语言规范 6
1.3 面向对象编程 7
1.3.1 封装 8
1.3.2 多态性 8
1.3.3 继承 9
1.4.1 使用命令行编译器 csc.exe 10
1.4 第一个简单的示例程序 10
1.4.2 使用Visual C++集成开发环境 11
1.4.3 逐行解释第一个示例程序 14
1.5 处理语法错误 16
1.6 小变化 17
1.7 第二个简单的示例程序 18
1.8 另一个数据类型 20
1.9 两个控制语句 22
1.9.1 if 语句 23
1.9.2 for 循环 24
1.10 使用代码块 26
1.11 分号和定位 27
1.12 缩排习惯 27
1.13 C#关键字 29
1.14 标识符 30
1.16 自我测试 31
1.15 C#类库 31
第2章 数据类型和运算符 33
2.1 数据类型重要的原因 34
2.2 C#的数值类型 34
2.3 整数类型 35
2.4 浮点类型 37
2.5 小数类型 37
2.7 布尔类型 39
2.6 字符 39
2.8 输出选项 41
2.9 常量 44
2.9.1 十六进制(hexadecimal)常量 45
2.9.2 字符转义序列 45
2.9.3 字符串常量 46
2.10 详细了解变量 48
2.10.1 变量初始化 48
2.11 变量的作用域和生存周期 49
2.10.2 动态初始化 49
2.12 运算符 52
2.13 算术运算符 52
2.14 关系运算符和逻辑运算符 54
2.15 赋值运算符 59
2.15.1 复合赋值 60
2.15.2 赋值中的类型转换 61
2.16 强制类型转换 62
2.17 运算符的优先级 64
2.18 表达式 64
2.19 表达式中的类型转换 64
2.20 空格和小括号 67
2.21 小测验 69
第3章 程序控制语句 71
3.1 从键盘输入字符 72
3.2 if语句 73
3.2.1 嵌套的if 74
3.2.2 if-else-if阶梯式结构 75
3.3 switch语句 76
3.4 for循环 83
3.4.1 for循环的一些变化 85
3.4.2 空白部分 85
3.4.3 没有循环体的循环 87
3.4.4 在for循环内部声明循环控制变量 88
3.5 while循环 89
3.6 do-while循环 90
3.7 使用break语句退出循环 94
3.8 使用continue 96
3.9 goto语句 97
3.10 嵌套循环 102
3.11 小测验 103
第4章 类、对象及方法简介 105
4.1.1 类的一般形式 106
4.1 类的基础 106
4.1.2 定义类 107
4.2 对象是怎样被创建的 111
4.3 引用变量与赋值 111
4.4 方法 112
4.4.1 给Vehicle类添加方法 113
4.4.2 从方法返回 115
4.4.3 返回值 116
4.4.4 使用参数 118
4.4.5 给Vehicle类加入带参数的方法 119
4.5 构造函数 126
4.5.1 带参数的构造函数 127
4.5.2 给Vehicle类添加构造函数 128
4.6 再次研究new运算符 129
4.7 垃圾回收和析构函数 130
4.8 this关键字 133
4.9 小测验 135
第5章 更多的数据类型和运算符 136
5.1 数组 137
5.2 多维数组 142
5.2.1 二维数组 143
5.2.2 三维或更高维数组 144
5.2.3 初始化多维数组 144
5.3 不规则数组 145
5.4 数组引用变量赋值 147
5.5 使用长度属性 148
5.6 foreach循环 154
5.7 字符串 156
5.7.1 构建字符串 157
5.7.2 字符串操作 157
5.7.3 字符串数组 159
5.7.4 字符串是不可变的 160
5.8 位运算符 161
5.8.1 位运算符AND、OR、XOR和NOT 162
5.8.2 移位运算符 166
5.8.3 位运算符的混合赋值 167
5.9 运算符“?” 170
5.10 小测验 172
第6章 深入探讨方法和类 173
6.1 控制类成员的访问 174
6.2 向方法传递对象 180
6.3 使用ref和out参数 183
6.3.1 使用ref 183
6.3.2 使用out 185
6.4 使用可变数量的参数 187
6.5 返回对象 190
6.6 方法重载 192
6.7 重载构造函数 197
6.8.2 向Main( )传递参数 203
6.8 Main( )方法 203
6.8.1 从Main( )返回值 203
6.9 递归 205
6.10 理解static 207
6.11 小测验 212
第7章 运算符重载、索引和属性 214
7.1 运算符重载 215
7.1.1 运算符方法的一般形式 215
7.1.2 重载二元运算符 216
7.1.3 重载一元运算符 218
7.1.4 增加灵活性 221
7.1.5 重载关系运算符 225
7.1.6 运算符重载的技巧和限制 227
7.2 索引 228
7.3 属性 234
7.4 小测验 246
第8章 继承 247
8.1 继承基础 248
8.2 使用保护性访问 253
8.3 构造函数和继承性 254
8.4 继承和名字隐藏 260
8.5 创建多级层次 266
8.6 何时调用构造函数 269
8.7 基类引用及派生对象 270
8.8 虚拟方法和重载 274
8.8.1 为什么重载方法 276
8.8.2 应用虚拟方法 277
8.9 使用抽象类 280
8.10 使用封装防止继承 284
8.11 对象类 285
8.12 小测验 288
第9章 接口,结构和枚举 289
9.1 接口 290
9.2 使用接口引用 294
9.3 接口属性 301
9.4 接口索引 302
9.5 接口可以被继承 304
9.6 显式实现 306
9.7 结构 308
9.8 枚举 310
9.8.1 枚举初始化 311
9.8.2 指定枚举的基本类型 312
9.9 小测验 312
第10章 异常处理 314
10.1 System.Exception类 315
10.2 异常处理基础 315
10.2.1 使用try和catch 316
10.2.2 一个异常处理的简单例子 316
10.2.3 第二个异常例子 317
10.3 异常未被捕获的后果 319
10.4 异常处理使你从容处理错误 320
10.5 使用多重catch语句 321
10.6 捕获所有异常 322
10.7 try块可以被嵌套 323
10.8 抛出异常 324
10.9 使用finally 326
10.10 仔细研究异常 328
10.11 派生异常类 330
10.12 捕获派生类异常 332
10.13 使用checked和unchecked 336
10.14 小测验 339
第11章 I/O操作 340
11.1 C#的I/O系统是建立在流基础之上的 341
11.1.1 字节流和字符流 341
11.1.2 预定义流 341
11.2.1 流类 342
11.2 流类(Stream Classes) 342
11.2.3 字符流包装类 343
11.2.2 字节流类 343
11.2.4 二进制流 344
11.3 控制台I/O 345
11.3.1 读控制台输入 345
11.3.2 写控制台输出 346
11.4 文件流与面向字节的文件I/O 347
11.4.1 打开和关闭文件 347
11.4.2 从FileStream读字节 349
11.4.3 写文件 350
11.5 基于字符的文件I/O 352
11.5.1 使用StreamWriter 352
11.5.2 使用StreamReader 354
11.6 重定向标准流 356
11.7 读写二进制数据 359
11.7.2 BinaryReader 360
11.7.1 BinaryWriter 360
11.7.3 二进制数据的I/O示例 361
11.8 随机访问文件 363
11.9 把数字串转化为它们内部表达式 365
11.10 小测验 374
第12章 代理、事件、名字空间和高级话题 375
12.1 代理 376
12.1.1 多播 379
12.1.2 为什么要使用代理 381
12.2 事件 382
12.3 名字空间 386
12.3.1 声明名字空间 386
12.3.2 using 388
12.3.3 using的第二种形式 390
12.3.4 名字空间是可添加的 391
12.3.5 名字空间是可嵌套的 393
12.3.6 缺省名字空间 394
12.4 转换运算符 396
12.5 预处理 401
12.6 #define 401
12.6.1 #if和#endif 401
12.6.2 #else和#elif 403
12.7 #undef 405
12.8 #error 405
12.9 #warning 405
12.10 #line 406
12.11 属性 406
12.11.1 Conditional属性 407
12.11.2 Obsolete属性 408
12.12 unsafe代码 409
12.12.1 简单看一下指针 409
12.12.3 使用fixed 411
12.12.2 使用unsafe 411
12.13 运行期类型判别 413
12.13.1 使用is测试类型 413
12.13.2 使用as 414
12.13.3 使用typeof 414
12.14 其他关键字 415
12.14.1 内部访问修改符 415
12.14.2 sizeof 415
12.14.3 lock 415
12.14.4 readonly 416
12.14.5 stackalloc 416
12.14.6 using声明 417
12.14.7 const和volatile 417
12.15 下一步学习什么 417
12.16 小测验 418
附录A 小测验答案 419