C#经典实例 第4版pdf下载

这是一本全面的C#编程参考书,用150多个范例详细探讨了C#开发中的诸多问题。所有范例中的代码均经过验证,可以直接在应用程序中重用。第4版重新编写了许多解决方案,以充分利用C#新的创新,例如新的表达式级别功能、成员声明功能和语句级别功能。本书还在范例中纳入了动态编程...

这是一本全面的C#编程参考书,用150多个范例详细探讨了C#开发中的诸多问题。所有范例中的代码均经过验证,可以直接在应用程序中重用。

第4版重新编写了许多解决方案,以充分利用C#新的创新,例如新的表达式级别功能、成员声明功能和语句级别功能。本书还在范例中纳入了动态编程和异步编程的新应用,帮助读者了解如何应用这些语言特性。

本书涵盖以下主题:

类和泛型

集合、枚举器和迭代器

数据类型

LINQ和lambda表达式

异常处理

反射和动态编程

正则表达式

文件系统交互

网络和Web

XML的使用

线程、同步和并发

C#经典实例 第4版 内容简介

本书共分为13章,每一章侧重于特定主题的C#解决方案。具体内容包括:类和泛型,集合、枚举器和迭代器,数据类型,语言集成查询和lambda表达式,调试和异常处理,反射和动态编程,正则表达式,文件系统I/O,网络和Web,XML,安全,线程、同步和并发,工具箱。本书使用大量范例,帮助开发人员快速理解并解决现实中的问题。

C#经典实例 第4版 目录

第1章 类和泛型

1.0 简介

1.1 创建联合类型的结构

1.2 使类型可排序

1.3 使类型可查找

1.4 从一个方法返回多个数据项

1.5 解析命令行参数

1.6 在运行时初始化常量字段

1.7 构建可克隆的类

1.8 确保对象的处置

1.9 确定何时何处使用泛型

1.10 理解泛型类型

1.11 反转有序列表中的内容

1.12 约束类型参数

1.13 将泛型变量初始化为默认值

1.14 向生成的实体中添加钩子

1.15 控制如何触发多播委托中的一个委托

1.16 在C#中使用闭包

1.17 使用函数对象在列表中执行多种操作

1.18 控制结构类型字段初始化

1.19 以更简洁的方式检查null值

第2章 集合、枚举器和迭代器

2.0 简介

2.1 寻找List<T>中的重复数据项

2.2 保持List<T>有序

2.3 对Dictionary的键和/或值排序

2.4 创建具有最小值和最大值边界的Dictionary

2.5 在应用程序会话间持久化一个集合

2.6 测试Array或List<T>中的每个元素

2.7 创建自定义枚举器

2.8 处理finally语句块和迭代器

2.9 在类中实现嵌套的foreach功能

2.10 使用线程安全的字典进行并发访问,不手动加锁

第3章 数据类型

3.0 简介

3.1 把二进制数据编码为base64格式

3.2 解码base64编码的二进制数据

3.3 把作为byte[]返回的字符串转换为字符串

3.4 把字符串传递给只接受byte[]的方法

3.5 确定一个字符串是否为有效的数字

3.6 舍入浮点值

3.7 选择一种舍入算法

3.8 安全地执行窄化数据转换

3.9 测试有效的枚举值

3.10 在位掩码中使用枚举成员

3.11 确定是否设置了一个或多个枚举标志

第4章 语言集成查询和lambda表达式

4.0 简介

4.1 查询消息队列

4.2 对数据使用集合语义

4.3 利用LINQ to SQL重用参数化查询

4.4 以文化敏感的方式对结果排序

4.5 添加用于LINQ的函数式扩展

4.6 跨数据库执行查询和联接

4.7 利用LINQ查询配置文件

4.8 从数据库直接创建XML文件

4.9 有选择地输出查询结果

4.10 将LINQ用于不支持IEnumerable<T>的集合

4.11 执行高级接口查找

4.12 使用lambda表达式

4.13 在lambda表达式中使用不同的参数修饰符

4.14 用并行来加速LINQ操作

第5章 调试和异常处理

5.0 简介

5.1 知道何时捕获并重新引发异常

5.2 处理通过反射调用的方法引发的异常

5.3 创建新的异常类型

5.4 在首次异常上中断

5.5 处理从异步委托中引发的异常

5.6 利用Exception.Data为异常提供所需的额外信息

5.7 在WinForms应用程序中处理未经处理的异常

5.8 在WPF应用程序中处理未经处理的异常

5.9 确定一个进程是否停止了响应

5.10 在应用程序中使用事件日志

5.11 监视事件日志中的特定条目

5.12 实现一个简单的性能计数器

5.13 为类创建自定义的调试显示

5.14 跟踪异常从何而来

5.15 在异步情境下处理异常

5.16 有选择地处理异常

第6章 反射和动态编程

6.0 简介

6.1 列出引用的程序集

6.2 确定程序集中的类型特征

6.3 确定继承特征

6.4 使用反射调用成员

6.5 访问局部变量信息

6.6 创建一个泛型类型

6.7 使用dynamic与使用object

6.8 动态构建对象

6.9 使对象可扩展

第7章 正则表达式

7.0 简介

7.1 从MatchCollection中提取组

7.2 验证正则表达式的语法

7.3 增强基本的字符串替换函数

7.4 实现一个更好的分词器

7.5 返回匹配所在的整行内容

7.6 找到特定次数的匹配

7.7 使用常见模式

第8章 文件系统I/O

8.0 简介

8.1 使用通配符查找目录和文件

8.2 获取目录树

8.3 解析路径

8.4 启动并与控制台工具交互

8.5 锁定文件的一部分

8.6 等待文件系统中的动作发生

8.7 比较两个可执行模块的版本信息

8.8 查询系统上所有驱动器的信息

8.9 压缩和解压缩文件

第9章 网络和Web

9.0 简介

9.1 处理Web服务器错误

9.2 与Web服务器通信

9.3 通过代理服务器

9.4 从一个URL获取HTML

9.5 使用Web浏览器控件

9.6 以编程方式预构建一个ASP.NET网站

9.7 为Web应用对数据进行转义和取消转义

9.8 检查Web服务器的自定义错误页

9.9 编写一个TCP服务器

9.10 编写一个TCP客户端

9.11 模拟表单执行

9.12 通过HTTP传输数据

9.13 使用命名管道进行通信

9.14 以编程方式发送ping

9.15 使用SMTP服务发送SMTP邮件

9.16 使用套接字扫描机器的端口

9.17 使用当前的互联网连接设置

9.18 使用FTP传输文件

第10章 XML

10.0 简介

10.1 以文档顺序读取和访问XML数据

10.2 查询XML文档的内容

10.3 验证XML

10.4 检测对XML文档的修改

10.5 处理XML字符串中的无效字符

10.6 转换XML

10.7 验证修改过的XML文档而无需重新加载

10.8 扩展转换

10.9 从现有XML文件批量获取架构

10.10 将参数传递给转换

第11章 安全

11.0 简介

11.1 加密和解密字符串

11.2 加密和解密文件

11.3 清理密码算法信息

11.4 避免字符串在传输或静止时被篡改

11.5 保证安全断言的安全

11.6 验证是否已授予程序集特定权限

11.7 最小化程序集的攻击面

11.8 获得安全和/或审计信息

11.9 授权或撤销对文件或注册表项的访问

11.10 使用安全字符串保护字符串数据

11.11 保护流数据

11.12 加密web.confing信息

11.13 获得一个更安全的文件句柄

11.14 保存密码

第12章 线程、同步和并发

12.0 简介

12.1 创建每线程静态字段

12.2 对类成员提供线程安全的访问

12.3 避免沉默的线程终止

12.4 在异步委托完成时获得通知

12.5 私有化存储线程特定的数据

12.6 使用信号量允许资源的多重访问

12.7 使用互斥量同步多个进程

12.8 使用事件协调线程

12.9 在多线程间执行原子操作

12.10 优化以读为主的访问

12.11 使数据库请求更具扩展性

12.12 以一定顺序运行任务

第13章 工具箱

13.0 简介

13.1 处理操作系统关机、电源管理或用户会话变化

13.2 控制系统服务

13.3 列出加载一个程序集的进程

13.4 使用本地工作站上的消息队列

13.5 捕获标准输出流的输出

13.6 捕获一个进程的标准输出

13.7 在它自己的AppDomain中运行代码

13.8 确定当前操作系统的操作系统和Service Pack版本

关于作者

C#经典实例 第4版 精彩文摘

本章的范例涵盖了C# 语言的基础,主题包括类和结构,如何使用它们,它们有哪些不同,何时使用类以及何时使用结构。在此基础上,我们将构建具有各种固有功能(如可排序、可搜索、可处理和可克隆)的类。此外,我们将深入讨论联合类型、字段初始化、lambda、局部方法、单路和多路广播委托、闭包、函数对象等主题。本章也包含了解析命令行参数的范例,这是开发人员一直喜爱的主题。

在开始展示这些范例之前,让我们回顾一下关于类、结构、泛型的面向对象能力的关键信息。类比结构灵活得多。结构可以跟类一样实现接口,但与类不同的是,它们不能继承自类或结构。这种限制使得你无法创建结构层次关系,而这用类可以做到。通过抽象基类实现的多态性也是在结构中无法使用的,因为除了装箱成Object、ValueType 和Enum,结构无法从另一个类派生。

结构与其他的值类型一样,都是从System.ValueType 隐式派生的。乍看之下,结构类似于类,但它们实际上有很大的差别。在设计应用程序时,知道何时使用结构优于使用类将对你有很大的帮助。不正确地使用结构可能会使代码性能低下、难以修改。

结构相对于引用类型有两个性能优势。首先,如果一个结构是在栈上分配的(即不包含在引用类型内),访问结构及其数据的速度要快于访问堆中引用类型的速度。

引用类型的对象必须要跟随它在堆上的引用以获取它们的数据。不过,这种性能优势相对于结构的第二个性能优势就相形见绌了:要清理在栈上为结构分配的内存,只需要在方法调用返回时修改栈指针所指向的地址即可。这个调用要远远快于垃圾回收器自动清理托管堆上分配的引用类型。然而垃圾回收器的成本是延后的,所以不会立刻被人注意到。

当以传值方式传入其他方法时,结构的性能就比不上类了。因为结构存在于栈上,当以传值方式传入一个方法时,结构及其数据必须复制到一个新的局部变量(方法用于接收结构的参数)中。这一复制过程相比将一个引用传入方法要花费更多的时间,除非结构的大小与机器的指针大小相同或更小一些;因此,在32 位的机器上,传入一个32 位大小的结构与传入一个引用(与指针大小相同)的成本是相同的。在类和结构之间选择时,要记得这一点。尽管创建、访问和销毁类对象可能需要更长时间,但并不能抵消将结构多次按值传入一个或多个方法产生的性能下降。保持较小的结构体可以减小按值传递时所产生的性能下降。

以下情况应使用类。

• 其同一性很重要。结构在按值传入方法时会被隐式复制。

• 有较大的内存占用。

• 其字段需要初始化。

• 需要从一个基类继承。

• 需要多态行为;也就是说,你需要实现一个抽象基类,并从此基类派生出多个相似的类。(注意,多态性也可以通过接口实现,但通常并不适合在一个值类型中实现接口。这是因为当结构转换为接口时,会因装箱操作而导致性能损失。)

以下情况应使用结构。

• 其行为方式类似于原语类型(int、long、byte 等)。

• 仅占用较小的内存。

• 调用一个需要将结构体以传值方式传入的P/Invoke 方法。平台调用(Platform Invoke, P/Invoke)允许托管代码调用DLL 内公开的非托管方法。许多时候,非托管DLL 内的方法都需要传入一个结构参数。使用结构是执行此操作的一种高效方法,并且在需要按值传入时是唯一的途径。

• 需要降低垃圾回收对应用程序性能的影响。

• 其字段只需要被初始化为默认值。对于数值类型,这个值为0;对于布尔类型,则为false;对于引用类型,则为null。注意在C# 6.0 中,结构可以拥有默认构造函数并将字段初始化为非默认值。

• 不需要继承一个基类(除了ValueType 之外,所有结构都继承它)。

• 不需要多态行为。

当把结构传递给需要一个对象参数的方法时,例如Framework 类库(FCL)中的任何非泛型集合类型,它们也可能会引起性能降低。把一个结构(对此问题而言其实是任何简单类型)传入一个需要对象参数的方法中将会导致结构被装箱。装箱(boxing)是指将一个值类型包装在一个对象中。这种操作比较耗时,并且可能导致性能降低。

最后,将泛型功能加入进来就能够编写类型安全且高效的基于集合和模式的代码了。泛型提供相当强大的编程能力,但是要求你正确使用它。如果你考虑把ArrayList、Queue、Stack 和Hashtable 对象转换成其对应的泛型对象,可以阅读一下1.9 节和1.10 节中的范例。你将看到这种转换并非总是很简单,有一些原因可能导致你根本不想执行这种转换。

本文来自夜遇投稿,不代表电子书资源网立场,如若转载,请联系原作者获取。

打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
() 0
上一篇 02-14
下一篇 02-14

相关推荐

评论列表

联系我们

在线咨询: QQ交谈

邮件:admin@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信