
作者:希亚德
出版社:中国电力出版社
出版日期:2007
ISBN:9787508351520
电子书格式:pdf/epub/txt
内容简介
本书是《C#经典实例》的最新版,针对C#2.0和.NET 2.0做了全面修订。对于C#程序员经常遇到的300多个最常见和不那么常见的任务,本书涵盖了解决这些问题所需的全部技巧。从使用正则表达式到处理泛型类型,再到如何让代码在其自己的应用域中运行,通过本书的介绍,你会更深入地了解 C#语言,在基于.NET 2.0的Windows应用和ASP.NET Web应用新领域中更加游刃有余。
本书共20章,主要包括以下内容:泛型类型、集合和迭代器、异常处理和诊断、事件、委托以及匿名方法、数值、枚举、类、结构和部分类、串、正则表达式和XML。
本书中的每个技巧都做了精心组织,以便你快速了解问题,学会如何加以解决,并了解到可能存在的问题或限制。对于刚接触c#的程序员来说,本书绝对是你起步并不断提高技艺的得力工具。如果你已经是一个有经验的程序员,会发现利用本书能很方便地查看语法和常见用例;随着企业的发展,你还会遇到更棘手的问题,本书将是解决这些问题的一个绝好资源。不论是谁,可能只需这里的一个技巧就能让你轻松地脱身,而不必整日整夜地呆在计算机旁苦思冥想。
本书特色
| 本书是畅销书《C#经典实例》的最新版,针对C# 2.0和.NET 2.0做了全面修订。对于C#程序员经常遇到的300多个最常见和不那么常见的任务,本书涌盖了解决这些问题所需的全部技巧。从使用正则表达式到处理泛型类型,再到如何让代码在其自己的应用域中运行,通过本书的介绍,你会更深入地了解C#语言,在基于.NET 2.0的Windows应用和ASP.NET Web应用新领域中更加游刃有余。. |
| 第二版的主要特点包括: |
| ·编写了新的章节来讨论泛型、迭代器、部分类型以及Web,并补充了90多个新技巧,包括“使用匿名方法”、“迭代器实现为重载操作符”和“加密web.config信息”等等。 |
| ·提供了反映C#2.0和.NET 2.0变化的一些新技巧,如“将Stack和Queue替换为相应的泛型类型”和“控制服务”。.. |
| ·为每个解决方案捉供了可下载的代码,包括完备的测试用例,以便编译和测试这些示例,还可以复制粘贴对你有用的代码行,来创建你自己的解决方案。 |
| 本书共20章,主要包括以下内容: |
| ·泛型类型、集合和迭代器 |
| ·异常处理和诊断、事件、委托以及匿名方法 |
| ·数值、枚举、类、结构和部分类 |
| ·串、正则表达式和XML |
| 与O’Reilly Cookbook系列的其他书一样,这里的每个技巧都做了精心组织,以便你快速了解问题,学会如何加以解决,并了解到可能存在的问题或限制。对于刚接触C#的程序员来说,本书绝对是你起步并不断提高技艺的得力工具。如果你已经是一个有经验的程序员,会发现利用本书能很方便地查看语法和常见用例;随着企业的发展,你还会遇到更棘手的问题,本书将是解决这些问题的一个绝好资源。不论是谁,可能只需这里的一个技巧就能让你轻松地脱身,而不必整日整夜地呆在计算机旁苦思冥想。… |
目录
| 前言 |
| 第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将枚举值显示为一个串 |
| 1.17将纯文本转换为一个等价的枚举值 |
| 1.18测试一个合法的枚举僖 |
| 1.19测试是否为合法的标志枚举 |
| 1.20在位掩码中使用枚举成员 |
| 1.21确定是否设置了一个或多个枚举标志 |
| 1.23确定一个Decimal或Double的整数部分 |
| 第2章串和字符 |
| 2.0引言 |
| 2.1确定一个char包含何种字符 |
| 2.2确定一个字符是否在指定范围内 |
| 2.3匕较两个字符时控制大小写敏感性 |
| 2.4找出字符在串中的所有出现 |
| 2.5找出一个串在另一个串中的所有出现的位置 |
| 2.6实现一个简单的词法分析器解构一个串 |
| 2.7男较两个串时控制大小写敏感性 |
| 2.8将一个串与第二个串的开头或结尾进行比较 |
| 2.9在串中插入文本 |
| 2.10删除或替换串中的字符 |
| 2.11将二进制数据编码为Base64 |
| 2.12对Base64编码的二进制数据解码 |
| 2.13将作为Byte[]返回的一个串转换回String |
| 2.14将一个String传递给只接受byte[]的方法 |
| 2.15将串转换为其他类型 |
| 2.16格式化串中的数据 |
| 2.17创建一个定界串 |
| 2.18从定界串抽取项 |
| 2.19设置StringBuilder所能包含的最大字符数 |
| 2.20迭代处理串中的各个字符 |
| 2.21改善串比较性能 |
| 2.22改善StringBuilder的性能 |
| 2.23去掉串开头和/或结尾的字符 |
| 2.24测试一个串是否为Null或空串 |
| 2.25追加一行 |
| 2.26大块数据的编码 |
| 第3章类和结构 |
| 3.0引言 |
| 3.1创建联合类型的结构 |
| 3.2允许一个类型将自身表示为String |
| 3.3将一个对象的串表示转换为实际对象 |
| 3.4利用抽象基类实现多态 |
| 3.5使类型可排序 |
| 3.6使类型可搜索 |
| 3.7间接重载+=.-=./=和最=操作符 |
| 3.8间接重载&&.II,和?:操作符 |
| 3.9打开或关闭位 |
| 3.10建立无错表达式 |
| 3.11最小化(减少)布尔逻辑 |
| 3.12以独立于语言的方式实现简单类型间的转换 |
| 3.13确定何时使用强制转换操作符.as操作符或is操作符 |
| 3.14用as操作符强制转换 |
| 3.15用is操作符确定一个变量的类型 |
| 3.16用接口实现多态 |
| 3.17在多个对象类型上调用相同的方法 |
| 3.18使用接口增加通知回调 |
| 3.19使用多个入口点实现应用版本化 |
| 3.20避免创建仅部分初始化的对象 |
| 3.21从一个方法返回多项 |
| 3.22解析命令行参数 |
| 3.23改进类以与COM互操作 |
| 3.24在运行时初始化一个常量字段 |
| 3.25编写与所有托管语言兼容的代码 |
| 3.26构建可复制类 |
| 3.27确保对象撤销 |
| 3.28通过托管代码释放COM对象 |
| 3.29创建对象缓存 |
| 3.30回滚对象修改 |
| 3.31非托管资源的撤销 |
| 3.32确定装箱和拆箱发生在何处 |
| 第4章泛型 |
| 4.0引言 |
| 4.1决定何时及何处使用泛型 |
| 4.2了解泛型类型 |
| 4.3得到泛型类型的类型 |
| 4.4将ArrayList替换为其相应的泛型类型 |
| 4.5将Stack和Queue替换为相应的泛型类型 |
| 4.6实现一个链表 |
| 4.7创建可以初始化为Null的值类型 |
| 4.8逆转有序表的内容 |
| 4.9建立泛型只读集合 |
| 4.10将Hashtable替换为其相应的泛型类型 |
| 4.11对泛型Dictionary类型使用foreach |
| 4.12约束类型参数 |
| 4.13将泛型变量初始化为其默认值 |
| 第5章集合 |
| 5.0引言 |
| 5.1交换数组中的两个元素 |
| 5.2快速逆置数组 |
| 5.3逆置二维数组 |
| 5.4逆置多重数组 |
| 5.5编写一个更灵活的StackTrace类 |
| 5.6确定一项出现在List |
| 5.7获取一个特定项在List |
| 5.8从数组插入和删除项 |
| 5.9保持List |
| 5.10对字典的键和/或值排序 |
| 5.11创建一个有最大值和最小值边界的字典 |
| 5.12将数组数据显示为定界串 |
| 5.13在数组中存储列表的快照 |
| 5.14在应用会话之间持久存储集合 |
| 5.15测试Array或List |
| 5.16在Array或List |
| 5.17创建一个只读Array或List |
| 第6章迭代器和部分类型 |
| 6.0引言 |
| 6.1在类中实现嵌套foreach功能 |
| 6.2创建定制枚举器 |
| 6.3在泛型类型上创建一个迭代器 |
| 6.4在非泛型类型上创建一个迭代器 |
| 6.5创建接受参数的迭代器 |
| 6.6在一个类型上增加多个迭代器 |
| 6.7将迭代器实现为重载操作符 |
| 6.8迫使迭代器停止迭代 |
| 6.9处理Finally块和迭代器 |
| 6.10组织接口实现 |
| 6.11生成不再在主代码路径中的代码 |
| 第7章异常处理 |
| 7.0引言 |
| 7.1验证关键参数 |
| 7.2了解何时捕获和重新抛出异常 |
| 7.3明确异常及其用法 |
| 7.4单独地处理派生异常 |
| 7.5使用Finally块时确保异常,不丢失 |
| 7.6处理通过反射调用的方法所抛出的异常 |
| 7.7调试加载程序集时的问题 |
| 7.8托管异常和HRESULT之间的映射 |
| 7.9处理用户自定义的HRESULT |
| 7.10避免未处理的异常 |
| 7.11获得异常信息 |
| 7.12快速找出问题根源 |
| 7.13创建一个新的异常类型 |
| 7.14得到栈轨迹 |
| 7.15异常初次出现时中断 |
| 7.16避免恶毒的TypeInitializationException |
| 7.17处理从异步委托抛出的异常 |
| 7.18通过Exception.Data为异常提供所需的额外信息 |
| 7.19使用可视化工具以一种新方式查看异常 |
| 7.20在WinForms应用中处理未处理的异常 |
| 第8章诊断 |
| 8.0引言 |
| 8.1在生产代码中控制跟踪输出 |
| 8.2对调试/跟踪输出提供细粒度控制 |
| 8.3创建你自己的定制开关类 |
| 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.16确定当前AppDomain设置信息 |
| 8.17通过编程提高进程的优先级 |
| 8.18查看运行时环境,确定能做何处理 |
| 第9章委托.事件和匿名方法 |
| 9.0引言 |
| 9.1控制组播委托中是否触发和何时触发一个委托 |
| 9.2从组播委托中的各个委托得到返回值 |
| 9.3单独地处理组播委托中各委托的异常 |
| 9.4将同步委托调用转换为异步委托调用 |
| 9.5包装密封类来增加事件 |
| 9.6向事件来回传递特殊化参数 |
| 9.7一种高级接口搜索机制 |
| 9.8一个高级成员搜索机制 |
| 9.9观察对一个Hashtable的增加和修改 |
| 9.10使用Windows键盘钩 |
| 9.11跟踪和响应鼠标 |
| 9.12使用匿名方法 |
| 9.13简洁地建立事件处理器 |
| 9.14在匿名方法中使用不同参数修饰符 |
| 9.15使用C#中的闭包 |
| 9.16使用算子在一个列表上执行多个操作 |
| 第10章正则表达式 |
| 10.0引言 |
| 10.1枚举列出匹配 |
| 10.2从MatchCollection抽取组 |
| 10.3验证正则表达式的语法 |
| 10.4快速地找出串中最后一个匹配 |
| 10.5替换串中的字符或单词 |
| 10.6增强基本的串替换功能 |
| 10.7实现一个更好的词法分析器 |
| 10.8编译正则表达式 |
| 10.9统计文本行 |
| 10.10返回找到匹配的整行 |
| 10.11找到一个匹配的特定出现 |
| 10.12使用公共模式 |
| 10.13为正则表达式增加文档注释 |
| 10.14使用内置正则表达式解析ASP.NET页面 |
| 第11章数据结构和算法.. |
| 11.0引言 |
| 11.1为一个数据类型创建散列码 |
| 11.2创建优先队列 |
| 11.3创建双向队列 |
| 11.4确定字符或串在哪里不平衡 |
| 11.5创建一对多映射(MultiMap) |
| 11.6创建二叉树 |
| 11.7创建n叉树 |
| 11.8创建一个Set对象 |
| 第12章文件系统I/O |
| 12.0引言 |
| 12.1创建.复制.移动或删除文件 |
| 12.2管理文件属性 |
| 12.3重命名文件 |
| 12.4确定一个文件是否存在 |
| 12.5选择一个打开文件或流的方法来完成读和/或写 |
| 12.6随机地访问部分文件 |
| 12.7输出一个平台独立的EOL字符 |
| 12.8创建和读写文件 |
| 12.9确定一个目录是否存在 |
| 12.10创建.移动或删除一个目录 |
| 12.11管理目录属性 |
| 12.12重命名目录 |
| 12.13使用通配符搜索目录或文件 |
| 12.14得到目录树 |
| 12.15解析路径 |
| 12.16解析环境变量中的路径 |
| 12.17验证路径 |
| 12.18在应用中使用临时文件 |
| 12.19只用文件句柄打开文件流 |
| 12.20一次写多个输出文件 |
| 12.21启动控制台工具并与之交互 |
| 12.22锁定文件中的部分 |
| 12.23监视文件系统中对一个或多个或目录的特定修改 |
| 12.24等待文件系统中发生某个动作 |
| 12.25比较两个可执行模块的版本信息 |
| 12.26查询一个系统上所有驱动器的信息 |
| 12.27加密/解密一个现有的文件 |
| 12.28压缩和解压文件 |
| 第13章反射 |
| 13.0引言 |
| 13.1列出所引用的程序集 |
| 13.2列出导出的类型, |
| 13.3查找被覆盖的方法 |
| 13.4查找一个程序集中的成员 |
| 13.5查找一个接口中的成员 |
| 13.6确定和得到一个程序集中的嵌套类型 |
| 13.7显示一个类型的继承层次体系 |
| 13.8查找一个类型的子类 |
| 13.9查找一个程序集中的所有可串行化类型 |
| 13.10得到成员时过滤输出 |
| 13.11动态地调用成员 |
| 13.12为模糊器提供指导 |
| 13.13确定一个类型或方法是否为泛型 |
| 13.14通过编程读取清单资源 |
| 13.15访问局部变量信息 |
| 13.16创建泛型类型 |
| 第14章Web |
| 14.0引言 |
| 14.1将IP地址转换为主机名 |
| 14.2将主机名转换为IP地址 |
| 14.3解析URI |
| 14.4构成和验证绝对URI |
| 14.5处理Web服务器错误 |
| 14.6与Web服务器通信 |
| 14.7通过代理 |
| 14.8从URL得到HTML |
| 14.9使用新的Web浏览器控件 |
| 14.10缓存数据库表 |
| 14.11缓存有多个依赖关系的数据 |
| 14.12通过编程预构建一个ASP.NETWeb网站 |
| 14.13Web转义数据和取消转义 |
| 14.14使用UriBuilder类 |
| 14.15检查和修改Web应用配置 |
| 14.16处理HTML |
| 14.17处理HTTP时使用缓存结果来得到更高的性能 |
| 14.18检查一个Web服务器的定制错误页面 |
| 14.19确定IIS上ASP.NET的应用映射 |
| 第15章XML |
| 15.0引言 |
| 15.1按文档顺序读取和访问XML数据 |
| 15.2读取Web上的XML |
| 15.3查询一个XML文档的内容 |
| 15.4验证XML |
| 15.5通过编程创建XML文档 |
| 15.6检测对XML文档的修改 |
| 15.7处理XML串中的非法字符 |
| 15.8转换XML |
| 15.9分解XML文档 |
| 15.10整理XML文档 |
| 15.11验证有修改的XML文档而无需重加载 |
| 15.12扩展XSLT转换 |
| 15.13从现有的XML文件批量地得到模式 |
| 15.14向XSLT转换传递参数 |
| 第16章网络 |
| 16.0引言 |
| 16.1编写TCP服务器 |
| 16.2编写TCP客户 |
| 16.3模拟表单执行 |
| 16.4从服务器下载数据 |
| 16.5使用命名管道来通信 |
| 16.6通过编程完成ping操作 |
| 16.7使用SMTP服务发送SMTP邮件 |
| 16.8检查网络互连性 |
| 16.9使用Socket扫描机器上的端口 |
| 16.10使用当前Internet连接设置 |
| 16.11使用FTP下载文件 |
| 第17章安全 |
| 17.0引言 |
| 17.1控制对本地程序集中类型的访问 |
| 17.2加密/解密串 |
| 17.3加密和解密文件 |
| 17.4清除加密信息 |
| 17.5验证串在传输过程中未遭到破坏 |
| 17.6包装串的散列以便于使用 |
| 17.7一个更好的随机数生成器 |
| 17.8安全地存储数据 |
| 17.9使安全断言安全 |
| 17.10防止对程序集的恶意修改 |
| 17.11验证程序集已经被授予特定权限 |
| 17.12尽量减小程序集的攻击面 |
| 17.13获得安全/审计信息 |
| 17.14授予/撤销对文件或注册表键的访问权限 |
| 17.15用安全串保护串数据 |
| 17.16保护流数据 |
| 17.17加密web.config信息 |
| 17.18得到抛出一个SecurityException的完整原因 |
| 17.19得到安全的Unicode编码 |
| 17.20得到一个更安全的文件句柄 |
| 第18章线程与同步 |
| 18.0引言 |
| 18.1创建针对单个线程的静态宇段 |
| 18.2对类成员提供线程安全的访问 |
| 18.3防止线程悄无声息地终止 |
| 18.4轮询异步委托 |
| 18.5让异步委托超时 |
| 18.6得到异步委托完成的通知 |
| 18.7确定线程池请求是否排队 |
| 18.8配置定时器 |
| 18.9秘密地存储特定于线程的数据 |
| 18.10用信号量允许多个客户访问资源 |
| 18.11用Mutex同步多个进程 |
| 18.12使用事件来实现线程协作 |
| 18.13得到事件的命名权限 |
| 18.14线程间执行原子操作 |
| 第19章不安全的代码 |
| 19.0引言 |
| 19.1控制对传递给方法的指针的修改 |
| 19.2比较指针 |
| 19.3遍历数组 |
| 19.4管理指向固定数组的指针 |
| 19.5返回数组中一个特殊元素的指针 |
| 19.6创建并使用指针数组 |
| 19.7切换未知指针类型 |
| 19.8将串转换为char最 |
| 19.9声明有内嵌数组的固定大小的结构 |
| 第20章工具箱 |
| 20.0引言 |
| 20.1处理操作系统停止.电源管理或用户会话修改 |
| 20.2控制服务 |
| 20.3列出加载给定程序集的进程 |
| 20.4在本地工作站上使用消息队列 |
| 20.5查找当前Framework版本的路径 |
| 20.6确定全局程序集缓存(GAC)中所注册程序集的版本 |
| 20.7得到Windows目录 |
| 20.8捕获标准输出流的输出 |
| 20.9代码在其自己的应用域中运行 |
| 20.10确定操作系统和当前操作系统的SP版本… |










![心理学经典实验案例-[第二版]-技术教育社区](https://image12.bookschina.com/2014/20140308/B6274237.jpg)




