C#图解教程

第1章 C#和.NET框架
1.1 在.NET之前
1.1.1 20世纪90年代后期的Windows编程
1.1.2 下一代平台的目标
1.2 进入Microsoft.NET
1.2.1 .NET框架的组成
1.2.2 大大改进的编程环境
1.3 编译成CIL
1.4 编译成本机代码并执行
1.5 CLR
1.6 CLI
1.7 缩写回顾
第2章 C#编程概述
2.1 一个简单的C#程序
2.2 标识符和关键字
2.2.1 命名约定
2.2.2 关键字
2.3 Main:程序的起始点
2.4 空白
2.5 语句
2.5.1 简单语句
2.5.2 块
2.6 从程序中输出文本
2.6.1 Write
2.6.2 WriteLine
2.6.3 格式字符串
2.6.4 多重标记和值
2.7 注释
2.7.1 关于注释的补充
2.7.2 文档注释
2.7.3 注释类型总结
第3章 类型、存储和变量
3.1 C#程序是一组类型声明
3.2 类型是一种模板
3.3 实例化类型
3.4 数据成员和函数成员
3.5 预定义类型
3.6 用户定义类型
3.7 栈和堆
3.7.1 栈
3.7.2 堆
3.8 值类型和引用类型
3.8.1 存储引用类型对象的成员
3.8.2 C#类型的分类
3.9 变量
3.9.1 变量声明
3.9.2 多重变量声明
3.9.3 使用变量的值
第4章 类:基础
4.1 类的概述
4.2 程序和类:一个快速的示例
4.3 声明类
4.4 类成员
4.4.1 字段
4.4.2 显式和隐式字段初始化
4.4.3 声明多个字段
4.4.4 方法
4.5 创建变量和类的实例
4.6 为数据分配内存
4.7 实例成员
4.8 访问修饰符
4.9 从类的内部访问成员
4.10 从类的外部访问成员
4.11 综合应用
第5章 方法
5.1 方法的结构
5.2 本地变量
5.2.1 类型推断和var关键字
5.2.2 嵌套块中的本地变量
5.3 本地常量
5.4 方法调用
5.5 返回值
5.6 参数
5.6.1 形参
5.6.2 实参
5.6.3 带输入参数的方法示例
5.7 值参数
5.8 引用参数
5.9 输出参数
5.10 参数数组
5.10.1 方法调用
5.10.2 数组作实参
5.11 参数类型总结
5.12 栈帧
5.13 递归
5.14 方法重载
第6章 类进阶
6.1 类成员
6.2 实例类成员
6.3 静态字段
6.4 从类的外部访问静态成员
6.4.1 静态字段示例
6.4.2 静态成员的生存期
6.5 静态函数成员
6.6 其他静态类成员类型
6.7 成员常量
6.8 属性
6.8.1 属性声明和访问器
6.8.2 属性示例
6.8.3 使用属性
6.8.4 属性和关联字段
6.8.5 执行其他计算
6.8.6 只读和只写属性
6.8.7 计算只读属性示例
6.8.8 属性和数据库示例
6.8.9 自动实现属性
6.8.10 静态属性
6.9 实例构造函数
6.9.1 带参数的构造函数
6.9.2 默认构造函数
6.10 静态构造函数
6.10.1 静态构造函数示例
6.10.2 构造函数的可访问性
6.11 对象初始化列表
6.12 析构函数
6.12.1 调用析构函数
6.12.2 标准清理模式
6.13 比较构造函数和析构函数
6.14 readonly修饰符
6.15 this关键字
6.16 索引
6.16.1 什么是索引
6.16.2 索引和属性
6.16.3 声明索引
6.16.4 set访问器
6.16.5 get访问器
6.16.6 关于索引的补充
6.16.7 为Employee示例声明索引
6.16.8 另一个索引示例
6.16.9 索引重载
6.17 访问器的访问修饰符
6.18 分部类和分部类型
第7章 类和继承
7.1 类继承
7.2 访问继承的成员
7.3 隐藏基类的成员
7.4 基类访问
7.5 使用基类的引用
7.5.1 虚方法和覆写方法
7.5.2 覆写标记为override的方法
7.6 构造函数的执行
7.6.1 构造函数初始化语句
7.6.2 类访问修饰符
7.7 程序集间的继承
7.8 成员访问修饰符
7.8.1 访问成员的区域
7.8.2 公有成员的可访问性
7.8.3 私有成员的可访问性
7.8.4 受保护成员的可访问性
7.8.5 内部成员的可访问性
7.8.6 受保护内部成员的可访问性
7.8.7 成员访问修饰符的总结
7.9 抽象成员
7.10 抽象类
7.11 密封类
7.12 静态类
7.13 扩展方法
7.14 外部方法
第8章 表达式和运算符
8.1 表达式
8.2 字面量
8.2.1 整数字面量
8.2.2 实数字面量
8.2.3 字符字面量
8.2.4 字符串字面量
8.3 求值顺序
8.3.1 优先级
8.3.2 结合性
8.4 简单算术运算符
8.5 求余运算符
8.6 关系比较运算符和相等比较运算符
8.7 递增运算符和递减运算符
8.8 条件逻辑运算符
8.9 逻辑运算符
8.10 移位运算符
8.11 赋值运算符
8.12 条件运算符
8.13 一元算术运算符
8.14 用户定义类型转换
8.15 运算符重载
8.15.1 运算符重载的限制
8.15.2 运算符重载的示例
8.16 typeof运算符
第9章 语句
9.1 什么是语句
9.2 表达式语句
9.3 控制流语句
9.4 if语句
9.5 if…else语句
9.6 switch语句
9.6.1 分支示例
9.6.2 switch语句的补充
9.6.3 分支标签
9.7 while循环
9.8 do循环
9.9 for循环
9.9.1 for语句中变量的有效范围
9.9.2 初始化语句和迭代表达式中的多表达式
9.10 跳转语句
9.10.1 break语句
9.10.2 continue语句
9.11 标签语句
9.11.1 标签
9.11.2 标签语句的范围
9.12 goto语句
9.13 using语句
9.13.1 资源的包装使用
9.13.2 using语句的示例
9.13.3 多个资源和嵌套
9.13.4 using语句的另一种形式
9.14 其他语句
第10章 命名空间和程序集
10.1 引用其他程序集
10.2 命名空间
10.2.1 命名空间名称
10.2.2 命名空间的补充
10.2.3 命名空间跨文件伸展
10.2.4 嵌套命名空间
10.3 using指令
10.3.1 using命名空间指令
10.3.2 using别名指令
10.4 程序集的结构
10.5 程序集标识符
10.6 强命名程序集
10.7 程序集的私有方式部署
10.8 共享程序集和GAC
10.8.1 把程序集安装到GAC
10.8.2 GAC内的并肩执行
10.9 配置文件
10.10 延迟签名
第11章 异常
11.1 什么是异常
11.2 try语句
11.3 异常类
11.4 catch子句
11.4.1 使用特定catch子句的示例
11.4.2 catch子句段
11.5 finally块
11.6 为异常寻找处理代码
11.7 更进一步搜索
11.7.1 一般法则
11.7.2 搜索调用栈的示例
11.8 抛出异常
11.9 不带异常对象的抛出
第12章 结构
12.1 什么是结构
12.2 结构是值类型
12.3 对结构赋值
12.4 构造函数和析构函数
12.4.1 实例构造函数
12.4.2 静态构造函数
12.4.3 构造函数和析构函数的总结
12.5 字段初始化是不允许的
12.6 结构是密封的
12.7 装箱和取消装箱
12.8 结构作为返回类型和参数
12.9 关于结构的附加信息
第13章 枚举
13.1 枚举
13.1.1 设置底层类型和显式值
13.1.2 隐式成员编号
13.2 位标志
13.2.1 Flags特性
13.2.2 使用位标志的示例
13.3 关于枚举的补充
第14章 数组
14.1 数组
14.1.1 定义
14.1.2 重要细节
14.2 数组的类型
14.3 数组是对象
14.4 一维数组和矩形数组
14.5 实例化一维数组或矩形数组
14.6 访问数组元素
14.7 初始化数组
14.7.1 显式初始化一维数组
14.7.2 显式初始化矩形数组
14.7.3 初始化矩形数组的语法点
14.7.4 快捷语法
14.7.5 隐式类型数组
14.7.6 综合内容
14.8 交错数组
14.8.1 声明交错数组
14.8.2 快捷实例化
14.8.3 实例化交错数组
14.8.4 交错数组中的子数组
14.9 比较矩形数组和交错数组
14.10 foreach语句
14.10.1 迭代变量是只读的
14.10.2 foreach语句和多维数组
14.11 数组协变
14.12 数组继承的有用成员
14.13 比较数组类型
第15章 委托
15.1 什么是委托
15.2 声明委托类型
15.3 创建委托对象
15.4 赋值委托
15.5 组合委托
15.6 为委托增加方法
15.7 从委托移除方法
15.8 调用委托
15.9 委托的示例
15.10 调用带返回值的委托
15.11 调用带引用参数的委托
15.12 匿名方法
15.12.1 使用匿名方法
15.12.2 匿名方法的语法
15.12.3 变量和参数的作用域
15.13 Lambda表达式
第16章 事件
16.1 事件和委托相似
16.2 源代码组件概览
16.3 声明事件
16.3.1 事件是成员
16.3.2 委托类型和EventHandler
16.4 触发事件
16.5 订阅事件
16.6 标准事件的用法
16.6.1 使用EventArgs类
16.6.2 通过扩展EventArgs来传递数据
16.6.3 使用自定义委托
16.7 MyTimerClass代码
16.8 事件访问器
第17章 接口
17.1 什么是接口
17.2 声明接口
17.3 实现接口
17.4 接口是引用类型
17.5 接口和as运算符
17.6 实现多个接口
17.7 实现具有重复成员的接口
17.8 多个接口的引用
17.9 派生成员作为实现
17.10 显式接口成员实现
17.11 接口可以继承接口
第18章 转换
18.1 什么是转换
18.2 隐式转换
18.3 显式转换和强制转换
18.4 转换的类型
18.5 数字的转换
18.5.1 隐式数字转换
18.5.2 溢出检测上下文
18.5.3 显式数字转换
18.6 引用转换
18.6.1 隐式引用转换
18.6.2 显式引用转换
18.6.3 有效显式引用转换
18.7 装箱转换
18.8 拆箱转换
18.9 用户自定义转换
18.9.1 用户自定义转换的约束
18.9.2 用户自定义转换的示例
18.9.3 计算用户自定义转换
18.9.4 多步用户自定义转换的示例
18.10 is运算符
18.11 as运算符
第19章 泛型
19.1 什么是泛型
19.2 C#中的泛型
19.3 泛型类
19.4 声明泛型类
19.5 创建构造类型
19.6 创建变量和实例
19.6.1 使用泛型的栈的示例
19.6.2 比较泛型和非泛型栈
19.7 类型参数的约束
19.7.1 Where子句
19.7.2 约束类型和次序
19.8 泛型结构
19.9 泛型接口
19.9.1 使用泛型接口的示例
19.9.2 泛型接口的实现必须唯一
19.10 泛型委托
19.11 泛型方法
19.11.1 声明泛型方法
19.11.2 调用泛型方法
19.11.3 泛型方法的示例
19.12 扩展方法和泛型类
第20章 枚举数和迭代器
20.1 枚举数和可枚举类型
20.1.1 使用foreach语句
20.1.2 枚举数类型
20.2 使用IEnumerator接口
20.3 IEnumerable接口
20.4 不实现接口的枚举数
20.5 泛型枚举接口
20.6 IEnumeratorT接口
20.7 IEnumerableT接口
20.8 迭代器
20.8.1 迭代器块
20.8.2 使用迭代器来创建枚举数
20.8.3 使用迭代器来创建可枚举类型
20.9 常见迭代器模式
20.10 产生可枚举类型和枚举数
20.11 产生多个可枚举类型
20.12 产生多个枚举数
20.13 迭代器实质
第21章 介绍LINQ
21.1 什么是LINQ
21.2 LINQ提供程序
21.3 查询语法和方法语法
21.4 查询变量
21.5 查询表达式的结构
21.5.1 from子句
21.5.2 join子句
21.5.3 什么是联结
21.5.4 查询主体中的from…let…where片段
21.5.5 orderby子句
21.5.6 select…group子句
21.5.7 查询中的匿名类型
21.5.8 group子句
21.5.9 查询延续
21.6 标准查询运算符
21.6.1 查询表达式和标准查询运算符
21.6.2 标准查询运算符的签名
21.6.3 委托作为参数
21.6.4 LINQ预定义的委托类型
21.6.5 使用委托参数的示例
21.6.6 使用Lambda表达式参数的示例
21.7 LINQtoXML
21.7.1 标记语言
21.7.2 XML基础
21.7.3 XML类
21.7.4 使用XML树的值
21.7.5 使用XML属性
21.7.6 节点的其他类型
21.7.7 使用LINQtoXML的LINQ查询
第22章 异步编程简介
22.1 进程、线程以及异步编程
22.1.1 多线程处理带来的问题
22.1.2 多线程处理的复杂度
22.2 异步编程模式
22.3 BeginInvoke和EndInvoke
22.3.1 等待——直到结束模式
22.3.2 AsyncResult类
22.3.3 轮询模式
22.3.4 回调模式
22.4 计时器
第23章 预处理指令
23.1 什么是预处理指令
23.2 基本规则
23.3 #define和#undef指令
23.4 条件编译
23.5 条件编译结构
23.6 诊断指令
23.7 行号指令
23.8 区域指令
23.9 #pragmawarning指令
第24章 反射和特性
24.1 元数据和反射
24.2 Type类
24.3 获取Type对象
24.4 什么是特性
24.5 应用特性
24.6 预定义的保留的特性
24.6.1 Obsolete特性
24.6.2 Conditional特性
24.6.3 预定义的特性
24.7 有关应用特性的更多内容
24.7.1 多个特性
24.7.2 其他类型的目标
24.7.3 全局特性
24.8 自定义特性
24.8.1 声明自定义特性
24.8.2 使用特性构造函数
24.8.3 指定构造函数
24.8.4 使用构造函数
24.8.5 构造函数中的位置参数和命名参数
24.8.6 限制特性的使用
24.8.7 自定义特性的最佳实践
24.9 访问特性
24.9.1 使用IsDefined方法
24.9.2 使用GetCustomAttribute方法
第25章 其他主题
25.1 概述
25.2 字符串
25.2.1 使用StringBuilder类
25.2.2 格式化数字字符串
25.3 把字符串解析为数据值
25.4 可空类型
25.4.1 创建可空类型
25.4.2 为可空类型赋值
25.4.3 使用可空用户自定义类型
25.5 Main方法
25.6 文档注释
25.6.1 插入文档注释
25.6.2 使用其他XML标签
25.7 嵌套类型
25.7.1 嵌套类的示例
25.7.2 可见性和嵌套类型
1.1 在.NET之前
1.1.1 20世纪90年代后期的Windows编程
1.1.2 下一代平台的目标
1.2 进入Microsoft.NET
1.2.1 .NET框架的组成
1.2.2 大大改进的编程环境
1.3 编译成CIL
1.4 编译成本机代码并执行
1.5 CLR
1.6 CLI
1.7 缩写回顾
第2章 C#编程概述
2.1 一个简单的C#程序
2.2 标识符和关键字
2.2.1 命名约定
2.2.2 关键字
2.3 Main:程序的起始点
2.4 空白
2.5 语句
2.5.1 简单语句
2.5.2 块
2.6 从程序中输出文本
2.6.1 Write
2.6.2 WriteLine
2.6.3 格式字符串
2.6.4 多重标记和值
2.7 注释
2.7.1 关于注释的补充
2.7.2 文档注释
2.7.3 注释类型总结
第3章 类型、存储和变量
3.1 C#程序是一组类型声明
3.2 类型是一种模板
3.3 实例化类型
3.4 数据成员和函数成员
3.5 预定义类型
3.6 用户定义类型
3.7 栈和堆
3.7.1 栈
3.7.2 堆
3.8 值类型和引用类型
3.8.1 存储引用类型对象的成员
3.8.2 C#类型的分类
3.9 变量
3.9.1 变量声明
3.9.2 多重变量声明
3.9.3 使用变量的值
第4章 类:基础
4.1 类的概述
4.2 程序和类:一个快速的示例
4.3 声明类
4.4 类成员
4.4.1 字段
4.4.2 显式和隐式字段初始化
4.4.3 声明多个字段
4.4.4 方法
4.5 创建变量和类的实例
4.6 为数据分配内存
4.7 实例成员
4.8 访问修饰符
4.9 从类的内部访问成员
4.10 从类的外部访问成员
4.11 综合应用
第5章 方法
5.1 方法的结构
5.2 本地变量
5.2.1 类型推断和var关键字
5.2.2 嵌套块中的本地变量
5.3 本地常量
5.4 方法调用
5.5 返回值
5.6 参数
5.6.1 形参
5.6.2 实参
5.6.3 带输入参数的方法示例
5.7 值参数
5.8 引用参数
5.9 输出参数
5.10 参数数组
5.10.1 方法调用
5.10.2 数组作实参
5.11 参数类型总结
5.12 栈帧
5.13 递归
5.14 方法重载
第6章 类进阶
6.1 类成员
6.2 实例类成员
6.3 静态字段
6.4 从类的外部访问静态成员
6.4.1 静态字段示例
6.4.2 静态成员的生存期
6.5 静态函数成员
6.6 其他静态类成员类型
6.7 成员常量
6.8 属性
6.8.1 属性声明和访问器
6.8.2 属性示例
6.8.3 使用属性
6.8.4 属性和关联字段
6.8.5 执行其他计算
6.8.6 只读和只写属性
6.8.7 计算只读属性示例
6.8.8 属性和数据库示例
6.8.9 自动实现属性
6.8.10 静态属性
6.9 实例构造函数
6.9.1 带参数的构造函数
6.9.2 默认构造函数
6.10 静态构造函数
6.10.1 静态构造函数示例
6.10.2 构造函数的可访问性
6.11 对象初始化列表
6.12 析构函数
6.12.1 调用析构函数
6.12.2 标准清理模式
6.13 比较构造函数和析构函数
6.14 readonly修饰符
6.15 this关键字
6.16 索引
6.16.1 什么是索引
6.16.2 索引和属性
6.16.3 声明索引
6.16.4 set访问器
6.16.5 get访问器
6.16.6 关于索引的补充
6.16.7 为Employee示例声明索引
6.16.8 另一个索引示例
6.16.9 索引重载
6.17 访问器的访问修饰符
6.18 分部类和分部类型
第7章 类和继承
7.1 类继承
7.2 访问继承的成员
7.3 隐藏基类的成员
7.4 基类访问
7.5 使用基类的引用
7.5.1 虚方法和覆写方法
7.5.2 覆写标记为override的方法
7.6 构造函数的执行
7.6.1 构造函数初始化语句
7.6.2 类访问修饰符
7.7 程序集间的继承
7.8 成员访问修饰符
7.8.1 访问成员的区域
7.8.2 公有成员的可访问性
7.8.3 私有成员的可访问性
7.8.4 受保护成员的可访问性
7.8.5 内部成员的可访问性
7.8.6 受保护内部成员的可访问性
7.8.7 成员访问修饰符的总结
7.9 抽象成员
7.10 抽象类
7.11 密封类
7.12 静态类
7.13 扩展方法
7.14 外部方法
第8章 表达式和运算符
8.1 表达式
8.2 字面量
8.2.1 整数字面量
8.2.2 实数字面量
8.2.3 字符字面量
8.2.4 字符串字面量
8.3 求值顺序
8.3.1 优先级
8.3.2 结合性
8.4 简单算术运算符
8.5 求余运算符
8.6 关系比较运算符和相等比较运算符
8.7 递增运算符和递减运算符
8.8 条件逻辑运算符
8.9 逻辑运算符
8.10 移位运算符
8.11 赋值运算符
8.12 条件运算符
8.13 一元算术运算符
8.14 用户定义类型转换
8.15 运算符重载
8.15.1 运算符重载的限制
8.15.2 运算符重载的示例
8.16 typeof运算符
第9章 语句
9.1 什么是语句
9.2 表达式语句
9.3 控制流语句
9.4 if语句
9.5 if…else语句
9.6 switch语句
9.6.1 分支示例
9.6.2 switch语句的补充
9.6.3 分支标签
9.7 while循环
9.8 do循环
9.9 for循环
9.9.1 for语句中变量的有效范围
9.9.2 初始化语句和迭代表达式中的多表达式
9.10 跳转语句
9.10.1 break语句
9.10.2 continue语句
9.11 标签语句
9.11.1 标签
9.11.2 标签语句的范围
9.12 goto语句
9.13 using语句
9.13.1 资源的包装使用
9.13.2 using语句的示例
9.13.3 多个资源和嵌套
9.13.4 using语句的另一种形式
9.14 其他语句
第10章 命名空间和程序集
10.1 引用其他程序集
10.2 命名空间
10.2.1 命名空间名称
10.2.2 命名空间的补充
10.2.3 命名空间跨文件伸展
10.2.4 嵌套命名空间
10.3 using指令
10.3.1 using命名空间指令
10.3.2 using别名指令
10.4 程序集的结构
10.5 程序集标识符
10.6 强命名程序集
10.7 程序集的私有方式部署
10.8 共享程序集和GAC
10.8.1 把程序集安装到GAC
10.8.2 GAC内的并肩执行
10.9 配置文件
10.10 延迟签名
第11章 异常
11.1 什么是异常
11.2 try语句
11.3 异常类
11.4 catch子句
11.4.1 使用特定catch子句的示例
11.4.2 catch子句段
11.5 finally块
11.6 为异常寻找处理代码
11.7 更进一步搜索
11.7.1 一般法则
11.7.2 搜索调用栈的示例
11.8 抛出异常
11.9 不带异常对象的抛出
第12章 结构
12.1 什么是结构
12.2 结构是值类型
12.3 对结构赋值
12.4 构造函数和析构函数
12.4.1 实例构造函数
12.4.2 静态构造函数
12.4.3 构造函数和析构函数的总结
12.5 字段初始化是不允许的
12.6 结构是密封的
12.7 装箱和取消装箱
12.8 结构作为返回类型和参数
12.9 关于结构的附加信息
第13章 枚举
13.1 枚举
13.1.1 设置底层类型和显式值
13.1.2 隐式成员编号
13.2 位标志
13.2.1 Flags特性
13.2.2 使用位标志的示例
13.3 关于枚举的补充
第14章 数组
14.1 数组
14.1.1 定义
14.1.2 重要细节
14.2 数组的类型
14.3 数组是对象
14.4 一维数组和矩形数组
14.5 实例化一维数组或矩形数组
14.6 访问数组元素
14.7 初始化数组
14.7.1 显式初始化一维数组
14.7.2 显式初始化矩形数组
14.7.3 初始化矩形数组的语法点
14.7.4 快捷语法
14.7.5 隐式类型数组
14.7.6 综合内容
14.8 交错数组
14.8.1 声明交错数组
14.8.2 快捷实例化
14.8.3 实例化交错数组
14.8.4 交错数组中的子数组
14.9 比较矩形数组和交错数组
14.10 foreach语句
14.10.1 迭代变量是只读的
14.10.2 foreach语句和多维数组
14.11 数组协变
14.12 数组继承的有用成员
14.13 比较数组类型
第15章 委托
15.1 什么是委托
15.2 声明委托类型
15.3 创建委托对象
15.4 赋值委托
15.5 组合委托
15.6 为委托增加方法
15.7 从委托移除方法
15.8 调用委托
15.9 委托的示例
15.10 调用带返回值的委托
15.11 调用带引用参数的委托
15.12 匿名方法
15.12.1 使用匿名方法
15.12.2 匿名方法的语法
15.12.3 变量和参数的作用域
15.13 Lambda表达式
第16章 事件
16.1 事件和委托相似
16.2 源代码组件概览
16.3 声明事件
16.3.1 事件是成员
16.3.2 委托类型和EventHandler
16.4 触发事件
16.5 订阅事件
16.6 标准事件的用法
16.6.1 使用EventArgs类
16.6.2 通过扩展EventArgs来传递数据
16.6.3 使用自定义委托
16.7 MyTimerClass代码
16.8 事件访问器
第17章 接口
17.1 什么是接口
17.2 声明接口
17.3 实现接口
17.4 接口是引用类型
17.5 接口和as运算符
17.6 实现多个接口
17.7 实现具有重复成员的接口
17.8 多个接口的引用
17.9 派生成员作为实现
17.10 显式接口成员实现
17.11 接口可以继承接口
第18章 转换
18.1 什么是转换
18.2 隐式转换
18.3 显式转换和强制转换
18.4 转换的类型
18.5 数字的转换
18.5.1 隐式数字转换
18.5.2 溢出检测上下文
18.5.3 显式数字转换
18.6 引用转换
18.6.1 隐式引用转换
18.6.2 显式引用转换
18.6.3 有效显式引用转换
18.7 装箱转换
18.8 拆箱转换
18.9 用户自定义转换
18.9.1 用户自定义转换的约束
18.9.2 用户自定义转换的示例
18.9.3 计算用户自定义转换
18.9.4 多步用户自定义转换的示例
18.10 is运算符
18.11 as运算符
第19章 泛型
19.1 什么是泛型
19.2 C#中的泛型
19.3 泛型类
19.4 声明泛型类
19.5 创建构造类型
19.6 创建变量和实例
19.6.1 使用泛型的栈的示例
19.6.2 比较泛型和非泛型栈
19.7 类型参数的约束
19.7.1 Where子句
19.7.2 约束类型和次序
19.8 泛型结构
19.9 泛型接口
19.9.1 使用泛型接口的示例
19.9.2 泛型接口的实现必须唯一
19.10 泛型委托
19.11 泛型方法
19.11.1 声明泛型方法
19.11.2 调用泛型方法
19.11.3 泛型方法的示例
19.12 扩展方法和泛型类
第20章 枚举数和迭代器
20.1 枚举数和可枚举类型
20.1.1 使用foreach语句
20.1.2 枚举数类型
20.2 使用IEnumerator接口
20.3 IEnumerable接口
20.4 不实现接口的枚举数
20.5 泛型枚举接口
20.6 IEnumeratorT接口
20.7 IEnumerableT接口
20.8 迭代器
20.8.1 迭代器块
20.8.2 使用迭代器来创建枚举数
20.8.3 使用迭代器来创建可枚举类型
20.9 常见迭代器模式
20.10 产生可枚举类型和枚举数
20.11 产生多个可枚举类型
20.12 产生多个枚举数
20.13 迭代器实质
第21章 介绍LINQ
21.1 什么是LINQ
21.2 LINQ提供程序
21.3 查询语法和方法语法
21.4 查询变量
21.5 查询表达式的结构
21.5.1 from子句
21.5.2 join子句
21.5.3 什么是联结
21.5.4 查询主体中的from…let…where片段
21.5.5 orderby子句
21.5.6 select…group子句
21.5.7 查询中的匿名类型
21.5.8 group子句
21.5.9 查询延续
21.6 标准查询运算符
21.6.1 查询表达式和标准查询运算符
21.6.2 标准查询运算符的签名
21.6.3 委托作为参数
21.6.4 LINQ预定义的委托类型
21.6.5 使用委托参数的示例
21.6.6 使用Lambda表达式参数的示例
21.7 LINQtoXML
21.7.1 标记语言
21.7.2 XML基础
21.7.3 XML类
21.7.4 使用XML树的值
21.7.5 使用XML属性
21.7.6 节点的其他类型
21.7.7 使用LINQtoXML的LINQ查询
第22章 异步编程简介
22.1 进程、线程以及异步编程
22.1.1 多线程处理带来的问题
22.1.2 多线程处理的复杂度
22.2 异步编程模式
22.3 BeginInvoke和EndInvoke
22.3.1 等待——直到结束模式
22.3.2 AsyncResult类
22.3.3 轮询模式
22.3.4 回调模式
22.4 计时器
第23章 预处理指令
23.1 什么是预处理指令
23.2 基本规则
23.3 #define和#undef指令
23.4 条件编译
23.5 条件编译结构
23.6 诊断指令
23.7 行号指令
23.8 区域指令
23.9 #pragmawarning指令
第24章 反射和特性
24.1 元数据和反射
24.2 Type类
24.3 获取Type对象
24.4 什么是特性
24.5 应用特性
24.6 预定义的保留的特性
24.6.1 Obsolete特性
24.6.2 Conditional特性
24.6.3 预定义的特性
24.7 有关应用特性的更多内容
24.7.1 多个特性
24.7.2 其他类型的目标
24.7.3 全局特性
24.8 自定义特性
24.8.1 声明自定义特性
24.8.2 使用特性构造函数
24.8.3 指定构造函数
24.8.4 使用构造函数
24.8.5 构造函数中的位置参数和命名参数
24.8.6 限制特性的使用
24.8.7 自定义特性的最佳实践
24.9 访问特性
24.9.1 使用IsDefined方法
24.9.2 使用GetCustomAttribute方法
第25章 其他主题
25.1 概述
25.2 字符串
25.2.1 使用StringBuilder类
25.2.2 格式化数字字符串
25.3 把字符串解析为数据值
25.4 可空类型
25.4.1 创建可空类型
25.4.2 为可空类型赋值
25.4.3 使用可空用户自定义类型
25.5 Main方法
25.6 文档注释
25.6.1 插入文档注释
25.6.2 使用其他XML标签
25.7 嵌套类型
25.7.1 嵌套类的示例
25.7.2 可见性和嵌套类型
Daniel Solis 资深软件工程师和技术顾问。有20余年开发经验,曾为微软和IBM等大公司提供技术咨询。他拥有加州大学计算机科学硕士、生物学和英文学士学位。同时,他也是一位杰出的导师。在美国和欧洲从事编程语言、Windows程序设计和Unix底层技术相关的教学培训工作多年。
本书是一本广受赞誉的C# 教程。它以图文并茂的形式,用朴实简洁的文字,并辅之以大量表格和代码示例,精炼而全面地阐述了最新版C# 语言的各种特性,使读者能够快速理解、学习和使用C#。同时, 本书还讲解了C#与VB 、C++ 等主流语言的不同点和相似之处。
本书是一本经典的C# 入门书,不仅适合没有任何编程语言基础的初级读者,而且还是有VB 、C++ 等语言基础的C# 初学者的最佳选择。
本书是一本经典的C# 入门书,不仅适合没有任何编程语言基础的初级读者,而且还是有VB 、C++ 等语言基础的C# 初学者的最佳选择。
比价列表
暂无价格数据。
公众号、微信群

微信公众号

实时获取购书优惠