C#捷径教程

分類: 图书,计算机/网络,程序设计,C C++ C# VC VC++,
作者: (美)纳什著,刘新军译
出 版 社: 人民邮电出版社
出版时间: 2009-2-1字数: 770000版次: 1页数: 444印刷时间: 2009/02/01开本: 大16开印次: 1纸张: 胶版纸I S B N : 9787115192585包装: 平装编辑推荐
好评如潮的C#实战图书,汲取.NET技术精髓的捷径,专章讲述习惯用法与设计模式。
如果你已经有一定C#或者其他语言的编程经验,就完全不用去读那些肤浅的入门书或者冗长繁复的大部头。本书将为你提供一条快速掌握C#的捷径。
作者在不大的篇幅里容纳了丰富扎实的内容。不仅全面涵盖了C#的语言特性,包括3.0引入的lambda表达式、扩展方法和LINQ等,总结了正确使用C#的习惯用法和设计模式。而且深入探讨了CLR。书中大量富于启发性的实例和经验之谈。更能让你的软件开发水平得到质的飞跃。
内容简介
C# 3.0 提供了很多强大的特性,通过使用lambda 表达式、扩展方法和语言集成查询(LINQ),方便地引入了函数式编程,使C# 程序员如虎添翼。本书通过许多精彩的示例介绍了每个特性,深入浅出地讲解了C# 语言的核心概念,以及如何聪明地应用C# 的习惯用法和面向对象的设计模式来挖掘C# 和CLR 的能力。
本书适合有一定编程经验的程序员阅读。
作者简介
纳什,知名.NET技术专家。现于领先的无线设备提供商CSR公司担任主任工程师,负责蓝牙解决方案的开发。在转向.NET平台之前。他有丰富的COM/DCOM/ATL编程经验。
目录
第1章C#预览
1.1 C#和C++的区别
1.1.1 C#
1.1.2 C++
1.1.3 CLR垃圾回收
1.2 C#程序示例
1.3 C# 2.0扩展特性概述
1.4 C# 3.0新特性概览
1.5 小结
第2章C#和CLR
2.1 CLR中的JIT编译器
2.2 程序集及程序集加载器
2.2.1 最小化程序的工作集
2.2.2 给程序集命名
2.2.3 加载程序集
2.3 元数据
2.4 交叉语言的兼容性
2.5 小结
第3章C#语法概述
3.1 C#是一门强类型的语言
3.2 表达式
3.3 语句和表达式
3.4 类型和变量
3.4.1 值类型
3.4.2 引用类型
3.4.3 默认变量初始化
3.4.4 隐式类型化局部变量
3.4.5 类型转换
3.4.6 as和is操作符
3.4.7 泛型
3.5 命名空间
3.5.1 定义命名空间
3.5.2 使用命名空间
3.6 控制流
3.6.1 if-else、while、do-while和for
3.6.2 switch
3.6.3 foreach
3.6.4 break、continue、goto、return和throw
3.7 小结
第4章类、结构和对象
4.1 类定义
4.1.1 字段
4.1.2 构造函数
4.1.3 方法
4.1.4 属性
4.1.5 封装
4.1.6 可访问性
4.1.7 接口
4.1.8 继承
4.1.9 密封类
4.1.10 抽象类
4.1.11 嵌套类
4.1.12 索引器
4.1.13 分部类
4.1.14 分部方法
4.1.15 静态类
4.1.16 保留的成员名字
4.2 值类型定义
4.2.1 构造函数
4.2.2 this的含义
4.2.3 终结器
4.2.4 接口
4.3 匿名类型
4.4 对象初始化器
4.5 装箱和拆箱
4.5.1 什么时候发生装箱
4.5.2 效率和混淆
4.6 System.Object
4.6.1 等同性及其意义
4.6.2 IComparable接口
4.7 创建对象
4.7.1 new关键字
4.7.2 字段初始化
4.7.3 静态(类)构造函数
4.7.4 实例构造函数和创建顺序
4.8 销毁对象
4.8.1 终结器
4.8.2 确定性的析构
4.8.3 异常处理
4.9 可清除对象
4.9.1 IDisposable接口
4.9.2 using关键字
4.10 方法参数类型
4.10.1 值参数
4.10.2 ref参数
4.10.3 out参数
4.10.4 参数数组
4.11 方法重载
4.12 继承和虚方法
4.12.1 虚方法和抽象方法
4.12.2 override和new方法
4.12.3 密封方法
4.12.4 关于C#虚方法再啰嗦几句
4.13 继承,包含和委托
4.13.1 接口继承和类继承的选择
4.13.2 委托和组合与继承
4.14 小结
第5章接口和契约
5.1接口定义类型
5.2定义接口
5.2.1接口中可以有什么
5.2.2接口继承与成员隐藏
5.3实现接口
5.3.1隐式接口实现
5.3.2显式接口实现
5.3.3派生类中覆盖接口实现
5.3.4小心值类型实现接口的副作用
5.4接口成员匹配规则
5.5值类型的显示接口实现
5.6版本考虑
5.7契约
5.7.1类实现契约
5.7.2接口契约
5.8在接口和类之间选择
5.9小结
第6章重载操作符
6.1只因为:可以并不意味着应该
6.2重载操作符的类型和格式
6.3操作符不应该改变其操作数
6.4参数顺序有影响么
6.5重载加法运算符
6.6可重载的操作符
6.6.1比较操作符
6.6.2转换操作符
6.6.3布尔操作符
6.7小结
第7章异常处理和异常安全
7.1CLR如何对待异常
7.2C#里的异常处理机制
7.2.1抛出异常
7.2.2.NET 2.0开始的未处理异常的变化
7.2.3try语句语法预览
7.2.4 重新抛出异常和转译异常
7.2.5finally代码块抛出的异常
7.2.6终结器抛出的异常
7.2.7静态构造函数抛出的异常
7.3谁应该处理异常
7.4避免使用异常来控制流程
7.5取得异常中立
7.5.1异常中立代码的基本结构
7.5.2受限执行区域
7.5.3临界终结器和SafeHandle
7.6创建定制的异常类
7.7使用分配的资源和异常
7.8提供回滚行为
7.9小结
第8章使用字符串
8.1字符串概述
8.2字符串字面量
8.3格式指定和全球化
8.3.1Object.ToString、IFormattable和CultureInfo
8.3.2创建和注册自定义CultureInfo类型
8.3.3格式化字符串
8.3.4Console.WriteLine和String. Format
8.3.5自定义类型的字符串格式化举例
8.3.6ICustomFormatter
8.3.7字符串比较
8.4处理来自外部的字符串
8.5StringBuilder
8.6使用正则表达式搜索字符串
8.6.1使用正则表达式搜索
8.6.2搜索和分组
8.6.3使用正则表达式替换文本
8.6.4正则表达式创建选项
8.7小结
第9章数组、容器类型和迭代器
9.1数组介绍
9.1.1隐式类型化数组
9.1.2类型的转换和协方差
9.1.3排序和搜索
9.1.4同步
9.1.5向量与数组
9.2多维矩形数组
9.3多维锯齿数组
9.4容器类型
9.4.1比较ICollectionT和ICollection
9.4.2容器同步
9.4.3列表
9.4.4字典
9.4.5集合
9.4.6System.Collections.ObjectModel
9.4.7效率
9.5IEnumerableT、IEnumeratorT、IEnumerable和IEnumerator
9.6迭代器
9.7容器初始化器
9.8小结
第10章委托,匿名方法和事件
10.1委托概览
10.2委托的创建和使用
10.2.1单委托
10.2.2委托链
10.2.3迭代委托链
10.2.4非绑定(公开实例)的委托
10.3事件
10.4匿名方法
10.4.1注意捕获变量的使用
10.4.2匿名方法作为委托参数绑定器
10.5Strategy模式
10.6小结
第11章泛型
11.1泛型和C++模板之间的区别
11.2泛型的效率和类型安全
11.3泛型的类型定义和构造类型
11.3.1泛型类和结构
11.3.2泛型接口
11.3.3泛型方法
11.3.4泛型委托
11.3.5泛型转换
11.3.6默认值表达式
11.3.7Nullable类型
11.3.8构造类型访问权限控制
11.3.9泛型和继承
11.4约束
11.5泛型系统容器
11.6泛型系统接口
11.7精选的问题和解决方案
11.7.1泛型类型中的转化和操作符
11.7.2动态地创建构造类型
11.8小结
第12章C#中的线程
12.1C#和.NET中的线程
12.1.1开始线程编程
12.1.2IOU模式和异步方法调用
12.1.3线程状态
12.1.4终止线程
12.1.5停止和唤醒休眠线程
12.1.6等待线程退出
12.1.7 前台和后台线程
12.1.8线程本地存储
12.1.9非托管线程和COM套件如何适应
12.2线程间同步工作
12.2.1用Interlocked类实现轻量级的同步
12.2.2Monitor类
12.2.3锁对象
12.2.4信号量
12.2.5事件
12.2.6Win32的同步对象和WaitHandle
12.3使用线程池
12.3.1异步方法调用
12.3.2定时器
12.4小结
第13章C#规范形式探索
13.1引用类型的规范形式
13.1.1类默认是密封的
13.1.2使用非虚拟接口模式
13.1.3对象是否可克隆
13.1.4对象是否可清除
13.1.5对象需要终结器吗
13.1.6对象相等意味着什么
13.1.7如果重写了Equals方法,那么也应该重写GetHashCode方法
13.1.8对象支持排序吗
13.1.9对象需要形式化显示吗
13.1.10对象可以被转换吗
13.1.11在所有情况下都保证类型安全
13.1.12使用非可变的引用类型
13.2值类型的规范形式
13.2.1为了获得更好的性能而重写Equals方法
13.2.2值类型需要支持接口吗
13.2.3将接口成员和派生方法实现为类型安全的形式
13.3小结
13.3.1引用类型的检查单
13.3.2值类型的检查单
第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.5自定义迭代器
14.6访问者模式
14.7小结
第15章lambda表达式
15.1lambda表达式介绍
15.1.1lambda表达式
15.1.2lambda语句
15.2表达式树
15.2.1对表达式的操作
15.2.2函数的数据表现
15.3lambda表达式的有益应用
15.3.1迭代器和生成器重访问
15.3.2闭包(变量捕获)和缓存
15.3.3currying
15.3.4匿名递归
15.4小结
第16章LINQ:语言集成查询
16.1连接数据的桥梁
16.1.1查询表达式
16.1.2再谈扩展方法和lambda表达式
16.2标准查询操作符
16.3C#查询关键字
16.3.1from子句和范围变量
16.3.2join子句
16.3.3where子句和过滤器
16.3.4orderby子句
16.3.5select子句和投影
16.3.6let子句
16.3.7group子句
16.3.8into子句和持续性
16.4偷懒的好处
16.4.1C#迭代器鼓励懒惰
16.4.2不能偷懒
16.4.3立即执行查询
16.4.4再谈表达式树
16.5函数式编程中的技术
16.5.1自定义标准查询操作符和延迟求值
16.5.2替换foreach语句
16.6小结
书摘插图
第1章C#预览
1.4 C#3.0新特性概览
C#3.0包括一些很好的新特性。大部分新特性是支持语言集成查询(Language Integrated Query,LINQ)的基石。然而,即使在LINQ的范围外单独使用,它们也非常有用。其中的太部分特性使程序员使用函数式编程技术更容易。
通过使用新的关键字var,C#现在支持隐式的类型化局部变量。需要注意的是,这些变量不是无类型的,它们的类型是编译时推断出的。这点在第3章作介绍。
你是否曾想创建一个简单类型来保存有关数据,但又烦恼于需要创建整个新类?在很多情况下,新支持的匿名类型帮你减轻了这个负担。使用匿名类型可以在一个复合语句中定义并实例化一个类型。匿名类型将在第4章进行介绍。
自动实现的属性(auto-implementedproperty)是另一个有用的新特性,它为我们省去了打字的麻烦,减少了引入bug的可能性。多少次你曾为保存一点数据而声明一个类,然后疲于为这些数据创建属性访问函数?毕竟,这样做符合良好封装的实践。谢天谢地,自动实现的属性极大地减少了定义属性的输入量。第4章将介绍自动实现属性的技术细节。
……
