第1章 计算机和计算机编程:基本概念
1.1 C#是一种面向对象编程语言
1.2 硬件
1.2.1 主存储器的实质
1.2.2 数字系统
1.2.3 字节
1.2.4 文件
1.3 软件
1.3.1 执行C#程序的大致过程
1.3.2 操作系统
1.3.3 编程语言和编译器
1.3.4 .NET简介
1.3.5 在.NET中编译C#源代码
1.4 小结
1.5 复习题
第2章 你的第一个C#程序
2.1 软件开发
2.2 软件开发过程
2.3 算法和伪码
2.4 3个不同的错误类型
2.5 面向对象编程:初次体验
2.5.1 面向过程编程及其先天缺陷
2.5.2 面向对象编程及其优点
2.6 软件重用
2.7 .NET中代码重用的基本单元:集合
2.7.1 从开发者角度看集合
2.7.2 从用户角度看集合
2.8 .NET框架类库
2.9 C#的历史和设计目标
2.10 C#背景
2.11 C#的设计目标
2.12 能用C#编写什么样的程序
2.13 创建C#程序的原理
2.14 开始编程之前
2.15 选择文本编辑器
2.16 编写一个简单C#程序的7步
2.16.1 打开和使用命令控制台(第1步)
2.16.2 输入和保存C#源代码(第2步)
2.16.3 将源代码转换成一个PE(.exe)文件(第3步)
2.16.4 编译和查找错误(第4步)
2.16.5 运行程序(第5步)
2.16.6 验证输入(第6步)
2.16.7 庆祝的时刻(第7步)
2.17 源代码简短分析
2.18 语法错误与编译器的注释
2.19 小结
2.20 复习题
2.21 编程练习
第3章 C#导游:第一部分
3.1 简介
3.2 抽象和封装
3.2.1 抽象(Abstraction)
3.2.2 封装(Encapsulation)
3.2.3 学习面向对象编程的一个说明
3.3 一个交互式的Hello World!程序
3.3.1 编写Hello.cs
3.3.2 Hello.cs程序的基本元素
3.3.3 几个基本知识
3.4 小结
3.5 复习题
3.6 编程练习
第4章 C#导游:第二部分
4.1 简介
4.2 SimpleCalculator.cs程序所需元素
4.2.1 SimpleCalculator.cs程序清单
4.2.2 对SimpleCalculator.cs程序的详细分析
4.3 用方法简化你的代码
4.4 方法就是构造块:用关键字private封装你的Helper方法
4.5 小结
4.6 复习题
4.7 编程练习
第5章 你的第一个面向对象C#程序
5.1 简介
5.2 词汇结构
5.2.1 标识符和CaPitaLIcaTioN样式
5.2.2 字面值
5.2.3 注释和代码诠释
5.2.4 分隔符
5.2.5 操作符
5.2.6 关键字
5.3 对电梯模拟的一些思考
5.4 概念、目标和电梯模拟程序方案:为评价电梯系统搜集有用统计数据
5.5 面向对象程序的一个实例
5.5.1 程序SimpleElevatorSimulation.cs清单
5.5.2 程序的整体结构
5.5.3 对SimpleElevatorSimulation.cs程序的深入分析
5.5.4 类关系和统一模型语言(UML)
5.6 小结
5.7 复习题
5.8 编程练习
第6章 类型第一部分:简单类型
6.1 简介
6.2 概览C#中的类型
6.2.1 什么是类型
6.2.2 C#:一个强类型化语言
6.2.3 类型的优点
6.2.4 C#类型
6.3 简单类型
6.3.1 概观简单类型
6.3.2 整数类型
6.4 Blipos时钟
6.4.1 浮点类型
6.4.2 decimal类型
6.4.3 浮点、decimal和整数值的兼容性
6.4.4 显式类型转换
6.4.5 常量:字面值的符号名字
6.4.6 格式化数字值
6.4.7 bool类型:初步接触
6.5 小结
6.6 复习题
6.7 编程练习
第7章 类型第二部分:操作符、枚举器和字符串
7.1 简介
7.2 算术操作符及数字表达式
7.3 结合性
7.4 括号和优先级
7.5 模操作符(%)
7.6 一元操作符
7.6.1 一元加和一元减
7.6.2 自增和自减操作符
7.7 判断表达式的类型
7.8 在一个表达式中组合不同的类型
7.9 访问组件的元数据:简介
7.10 枚举常量
7.11 枚举器操作符
7.12 转换
7.13 System.Enum方法
7.14 字符和文本
7.15 char类型
7.16 string类型
7.16.1 string字面值和string对象
7.16.2 逐字字符
7.16.3 使用字符串
7.16.4 在字符串中嵌入格式化数字
7.16.5 使用字符串
7.17 小结
7.18 复习题
7.19 编程练习
第8章 流程控制第一部分:分支语句及相关概念
8.1 流程控制简介
8.2 if分支语句
8.2.1 简单if语句
8.2.2 复合语句
8.2.3 可选else子句
8.3 比较操作符和布尔表达式
8.4 嵌套if语句
8.5 多分支if-else语句
8.6 逻辑操作符
8.6.1 逻辑与(AND)操作符:&&
8.6.2 逻辑或(OR)操作符:||
8.6.3 短路求值和位操作符&与|
8.6.4 位异或操作符:^
8.6.5 逻辑非(NOT)操作符:!
8.7 变量的作用域
8.8 goto语句
8.9 switch语句
8.9.1 switch语句规则1
8.9.2 switch语句规则2
8.9.3 switch语句规则3
8.9.4 switch语句规则4
8.9.5 使用switch语句
8.10 条件操作符
8.11 小结
8.12 复习题
8.13 编程练习
第9章 流程控制第二部分:迭代语句
9.1 遍历、分析和生成数据序列
9.2 while循环语句
9.3 do-while循环语句
9.4 for循环语句
9.5 跳转语句break和continue
9.5.1 break语句
9.5.2 continue语句
9.6 结构化编程和结构化的结构
9.7 组合赋值操作符
9.8 嵌套迭代语句
9.9 编程练习
9.10 小结
9.11 复习题
9.12 编程练习
第10章 数组第一部分:数组基本知识
10.1 数组的声明和定义
10.2 访问单个数组元素
10.3 数组索引越界
10.4 调整基于0的数组索引
10.5 初始化数组
10.6 用foreach语句遍历整个数组
10.7 System.Array是一个引用类型
10.8 数组和相等性
10.9 数组和方法
10.9.1 数组元素作为方法中的参数
10.9.2 数组引用作为方法参数
10.9.3 克隆数组对象
10.10 执行数组值相等性比较的方法
10.11 命令行参数
10.12 使用数组作为方法的返回值
10.13 引用对象的数组元素
10.14 数组作为类中的实例变量
10.15 小结
10.16 复习题
10.17 编程练习
第11章 数组第二部分:多维数组——数组检索与排序
11.1 多维数组
11.1.1 二维数组
11.1.2 锯齿数组
11.2 多于二维的数组
11.3 System.Array的内置方法
11.4 特殊数组技术
11.5 检索
11.5.1 顺序检索(Sequential Search)
11.5.2 二分检索(Binary Search)
11.5.3 用System.Array的IndexOf方法检索
11.6 小结
11.7 复习题
11.8 编程练习
第12章 类解剖第一部分:静态类成员和方法的使用
12.1 类解剖:概览
12.2 数据成员(data member)
12.2.1 实例变量(instance variable)
12.2.2 静态变量(static variable)
12.2.3 常量成员(constant member)
12.2.4 只读成员(readonly member)
12.2.5 声明数据成员:概览
12.3 函数成员
12.3.1 方法
12.3.2 静态方法(static methods)
12.4 小结
12.5 复习题
12.6 编程练习
第13章 类解剖第二部分: 对象创建和垃圾回收
13.1 实例构造函数
13.1.1 为什么需要实例构造函数
13.1.2 使用实例构造函数
13.1.3 重载实例构造函数
13.1.4 构造函数初始化器
13.1.5 私有实例构造函数
13.2 静态构造函数
13.3 只读成员(readonly member)
13.4 垃圾回收:自动动态内存管理
13.4.1 对象如何被废弃
13.4.2 垃圾回收器的任务
13.4.3 释放非内存有限资源
13.5 小结
13.6 复习题
13.7 编程练习
第14章 类解剖第三部分: 编写直观代码
14.1 属性
14.1.1 属性与存取器和变异器方法
14.1.2 使用属性提高效率
14.1.3 用属性实现延迟初始化和惰性更新
14.2 索引器:像数组一样使用对象
14.2.1 从索引器所寄居的对象中调用索引器
14.2.2 索引器重载:同一类中的多索引器
14.2.3 避免滥用索引器
14.3 操作符重载
14.4 用户自定义隐式和显式转换
14.4.1 需要用户自定义转换的两种情形
14.4.2 使用非用户自定义转换技术
14.4.3 用户自定义转换语法
14.4.4 综合运用用户自定义和隐式转换
14.5 嵌套类型
14.5.1 嵌套类的优点
14.5.2 简单嵌套类示例
14.6 小结
14.7 复习题
14.8 编程练习
第15章 名字空间、编译单元和集合
15.1 自定义名字空间
15.2 全局匿名名字空间
15.3 名字空间和编译单元
15.4 嵌套名字空间
15.5 名字空间语法
15.6 using指示符的更多知识
15.7 编译单元、名字空间及集合
15.7.1 将几个编译单元编译成一个集合
15.7.2 重用集合中的名字空间
15.7.3 将名字空间分布到几个集合中
15.8 应用Ildasm探索集合
15.9 小结
15.10 复习题
15.11 编程练习
第16章 继承第一部分:基本概念
16.1 继承的必需性
16.2 继承基础知识
16.3 访问修饰符及继承
16.3.1 访问修饰符protected
16.3.2 访问私有基类成员
16.3.3 internal protected访问修饰符
16.3.4 C#的访问修饰符:概览
16.4 派生类构造函数
16.5 索引器也能被继承和覆盖
16.6 在基类中调用覆盖函数
16.7 通过继承重用.NET框架类库
16.8 多级派生类
16.9 方法覆盖及重载原理不同
16.10 小结
16.11 复习题
16.12 编程练习
第17章 继承第二部分:抽象函数、多态及接口
17.1 抽象方法、属性、索引器及类
17.2 多态(polymorphism)
17.2.1 后代类的对象具有多个类型
17.2.2 动态捆绑虚方法和(get,set)存取器
17.2.3 实例学习:使用多态创建简单绘图程序
17.3 丢失和重新获取类型信息
17.3.1 is操作符
17.3.2 对象类型转换
17.3.3 as操作符
17.4 最终的基类:System.Object
17.5 隐藏方法
17.6 用new和override关键字控制版本
17.7 多重继承
17.8 接口
17.8.1 定义接口
17.8.2 实现接口
17.8.3 应用接口的一般编程
17.8.4 构建接口层次
17.8.5 接口转换
17.8.6 覆盖虚接口
17.8.7 显式实现接口函数
17.9 小结
17.10 复习题
17.11 编程练习
第18章 结构
18.1 定义结构
18.2 装箱和拆箱
18.3 用与不用new关键字创建结构
18.4 值类型和引用类型
18.5 小结
18.6 复习题
18.7 编程练习
第19章 异常处理
19.1 异常处理概览
19.2 没有try-catch-finally的情形
19.3 try和catch块
19.4 捕获函数调用链上端的异常对象
19.5 多重catch块
19.6 finally块
19.7 嵌套try块
19.8 用throw显式抛出异常
19.9 编写自定义异常
19.10 小结
19.11 复习题
19.12 编程练习
第20章 代表和事件
20.1 代表
20.1.1 代表数组及方法调用中作为参数的代表
20.1.2 组播代表
20.2 事件
20.3 小结
20.4 复习题
20.5 编程练习
第21章 预处理、XML文档及特性
21.1 预处理程序指令
21.1.1 用#define、#if和#endif排除和包含代码
21.1.2 #undef:取消定义标识符
21.1.3 #elif和#else
21.1.4 #error和#warning
21.1.5 #region和#endregion
21.1.6 #line
21.2 XML说明文档
21.3 特性
21.4 小结
21.5 复习题
21.6 编程练习
第22章 文件I/O基础
22.1 对文件的需要
22.2 流基础和文件I/O
22.3 文件I/O类概览
22.4 FileInfo类
22.5 用StreamReader和StreamWriter 进行文本文件输入和输出
22.6 用FileStream类进行二进制输入和输出
22.7 小结
22.8 复习题
22.9 编程练习
第23章 递归基础知识
23.1 不同方法的待决方法实例
23.2 同一个方法的待决方法实例
23.3 应用递归计算n的阶乘
23.4 递归和迭代
23.5 使用递归进行二分检索
23.6 小结
23.7 复习题
23.8 编程练习
附录A 复习题和编程练习答案