[书籍推荐]C# In Depth-深入理解C#

简介:

昨天在查看邮箱的时候看到china-pub发给我的新书推荐邮件,浏览了一下,看到了这本书,不过这本书的中文版还未上市预计在5月上市(英文版的已经在2008年4月21日上市了,在本文的最后已经附了下载链接英文好的可以下载了看下),现在在china-pub已经提供了ebook的现在浏览了(可以点此查看),我看了下,讲解的很好,不像其他的书像教科书一样先讲一大堆的概念然后再用大堆大堆的“案例”来轰炸,从C#1讲到目前的3,如果想深入学习下C#的可以到时买本回去看下。

附目录:

第一部分 基础知识 
第1章 C#开发的进化史 2 
1.1 实战演变:变化的代码 3 
1.1.1 定义产品类型 3 
1.1.2 按名称对产品进行排序 7 
1.1.3 查询集合 9 
1.1.4 表示未知的价格 11 
1.1.5 LINQ和查询表达式 12 
1.2 C#(及相关技术)简史 16 
1.2.1 C#问世前的世界 16 
1.2.2 C#和.NET降生 17 
1.2.3 .NET 1.1的小幅更新和第一次重要跨越:.NET 2.0 18 
1.2.4 “下一代”产品 19 
1.2.5 历史回顾和争夺开发者之战 20 
1.3 .NET平台 22 
1.3.1 区分语言、运行时和库 22 
1.3.2 解开版本号的谜团 23 
1.4 采用代码段形式的全能代码 25 
1.4.1 代码段及其扩展形式 25 
1.4.2 Snippy介绍 27

.1.5 小结 28 
第2章 C# 1所搭建的核心基础 29 
2.1 委托 30 
2.1.1 简单委托的构成 30 
2.1.2 合并和删除委托 35 
2.1.3 对事件的简单讨论 36 
2.1.4 委托小结 37 
2.2 类型系统的特征 38 
2.2.1 C#在类型系统世界中的位置 38 
2.2.2 C# 1的类型系统在什么时候不够用 40 
2.2.3 C# 1的类型系统在什么时候会碍事 43 
2.2.4 类型系统特征总结 43 
2.3 值类型和引用类型 44 
2.3.1 现实世界中的值和引用 44 
2.3.2 值类型和引用类型基础知识 45 
2.3.3 走出误区 46 
2.3.4 装箱和拆箱 47 
2.3.5 值类型和引用类型小结 48 
2.4 C# 2和3:构建于坚实基础之上的新特性 49 
2.4.1 与委托有关的特性 49 
2.4.2 与类型系统有关的特性 51 
2.4.3 与值类型有关的特性 52 
2.5 小结 53 
第二部分 C# 2:解决C# 1的问题 
第3章 用泛型实现参数化类型 56 
3.1 为什么需要泛型 56 
3.2 日常使用的简单泛型 58 
3.2.1 通过例子来学习:泛型字典 58 
3.2.2 泛型类型和类型参数 60 
3.2.3 泛型方法和判读泛型声明 63 
3.3 深化与提高 66 
3.3.1 类型约束 66 
3.3.2 泛型方法类型实参的类型推断 70 
3.3.3 实现泛型 71 
3.4 高级泛型 75 
3.4.1 静态字段和静态构造函数 76 
3.4.2 JIT编译器如何处理泛型 77 
3.4.3 泛型迭代 79 
3.4.4 反射和泛型 82 
3.5 .NET 2.0中的泛型集合类 85 
3.5.1 List[T] 85 
3.5.2 Dictionary[TKey,TValue] 88 
3.5.3 Queue[T]和Stack[T] 89 
3.5.4 SortedList[TKey,TValue]和SortedDictionary[TKey,TValue] 90 
3.5.5 LinkedList[T] 90 
3.6 泛型在C#和其他语言中的限制 91 
3.6.1 协变性和逆变性的缺乏 91 
3.6.2 缺乏操作符约束或者“数值”约束 95 
3.6.3 缺乏泛型属性、索引器和其他成员类型 96 
3.6.4 同C++模板的对比 97 
3.6.5 和Java泛型的对比 98 
3.7 小结 99 
第4章 可空类型 101 
4.1 没有值时怎么办 101 
4.1.1 为什么值类型的变量不能是 
null 102 
4.1.2 在C# 1中表示空值的模式 102 
4.2 System.Nullable[T]和System.Nullable 104 
4.2.1 Nullable[T]简介 104 
4.2.2 装箱和拆箱 106 
4.2.3 Nullable[T]实例的相等性 107 
4.2.4 来自非泛型Nullable类的支持 108 
4.3 C# 2为可空类型提供的语法糖 109 
4.3.1 ?修饰符 109 
4.3.2 使用null进行赋值和比较 110 
4.3.3 可空转换和操作符 112 
4.3.4 可空逻辑 115 
4.3.5 空接合操作符 116 
4.4 可空类型的新奇用法 118 
4.4.1 尝试一个不使用输出参数的操作 119 
4.4.2 空接合操作符让比较不再痛苦 121 
4.5 小结 123 
第5章 进入快速通道的委托 124 
5.1 向笨拙的委托语法说拜拜 125 
5.2 方法组转换 126 
5.3 协变性和逆变性 127 
5.4 使用匿名方法的内联委托操作 130 
5.4.1 从简单的开始:处理一个参数 131 
5.4.2 匿名方法的返回值 133 
5.4.3 忽略委托参数 134 
5.5 在匿名方法中捕捉变量 136 
5.5.1 定义闭包和不同的变量类型 136 
5.5.2 测试被捕获的变量的行为 137 
5.5.3 捕获变量到底有什么用处 138 
5.5.4 捕获变量的延长生存期 139 
5.5.5 局部变量实例化 140 
5.5.6 共享和非共享的变量混合使用 142 
5.5.7 捕获变量的使用规则和小结 143 
5.6 小结 144 
第6章 实现迭代器的捷径 146 
6.1 C# 1:手写迭代器的痛苦 147 
6.2 C# 2:利用yield语句简化迭代器 149 
6.2.1 迭代器块和yield return简介 150 
6.2.2 观察迭代器的工作流程 151 
6.2.3 进一步了解迭代器执行流程 153 
6.2.4 具体实现中的奇特之处 156 
6.3 真实的例子:迭代范围值 157 
6.3.1 迭代时刻表中的日期 157 
6.3.2 定义Range类的作用域 158 
6.3.3 使用迭代器块的实现代码 159 
6.4 使用CCR实现伪同步代码 162 
6.5 小结 164 
第7章 结束C# 2的讲解:最后的一些特性 166 
7.1 分部类型 167 
7.1.1 在多个文件中创建一个类型 167 
7.1.2 分部类型的使用 169 
7.1.3 C# 3独有的分部方法 170 
7.2 静态类型 172 
7.3 独立的取值方法/赋值方法属性访问器 174 
7.4 命名空间别名 175 
7.4.1 限定的命名空间别名 176 
7.4.2 全局命名空间别名 177 
7.4.3 外部别名 178 
7.5 Pragma指令 179 
7.5.1 警告pragma 179 
7.5.2 校验和pragma 180 
7.6 非安全代码中的固定大小的缓冲区 180 
7.7 把内部成员暴露给选定的程序集 182 
7.7.1 在简单情况下的友元程序集 182 
7.7.2 为什么使用InternalsVisibleTo 184 
7.7.3 InternalsVisibleTo和签名程序集 184 
7.8 小结 185 
第三部分 C# 3——革新写代码的方式 
第8章 用智能的编译器来防错 188 
8.1 自动实现的属性 189 
8.2 隐式类型的局部变量 191 
8.2.1 用var声明局部变量 191 
8.2.2 隐式类型的限制 192 
8.2.3 隐式类型的优缺点 193 
8.2.4 建议 194 
8.3 简化的初始化 194 
8.3.1 定义示例类型 195 
8.3.2 设置简单属性 196 
8.3.3 为嵌入对象设置属性 197 
8.3.4 集合初始化列表 198 
8.3.5 初始化特性的应用 200 
8.4 隐式类型的数组 201 
8.5 匿名类型 202 
8.5.1 第一次邂逅匿名类型 202 
8.5.2 匿名类型的成员 204 
8.5.3 投影初始化列表 205 
8.5.4 重点何在 206 
8.6 小结 207 
第9章 Lambda表达式和表达式树 208 
9.1 作为委托的Lambda表达式 209 
9.1.1 准备工作:Func[...]委托类型简介 209 
9.1.2 第一次转换成Lambda表达式 210 
9.1.3 用一个简单表达式作为主体 211 
9.1.4 隐式类型的参数列表 211 
9.1.5 单一参数的快捷语法 212 
9.2 使用List[T]和事件的简单例子 213 
9.2.1 对列表进行筛选、排序并设置其他操作 213 
9.2.2 在事件处理程序中进行记录 214 
9.3 表达式树 216 
9.3.1 在程序中构建表达式树 216 
9.3.2 将表达式树编译成委托 217 
9.3.3 将C# Lambda表达式转换成表达式树 218 
9.3.4 位于LINQ核心的表达式树 221 
9.4 类型推断和重载决策发生的改变 222 
9.4.1 改变的起因:精简泛型方法调用 222 
9.4.2 推断匿名函数的返回类型 223 
9.4.3 分两个阶段进行的类型推断 225 
9.4.4 选择正确的被重载的方法 227 
9.4.5 类型推断和重载决策 229 
9.5 小结 229 
第10章 扩展方法 231 
10.1 未引入扩展方法之前的状态 231 
10.2 扩展方法的语法 233 
10.2.1 声明扩展方法 234 
10.2.2 调用扩展方法 235 
10.2.3 扩展方法是怎样被发现的 236 
10.2.4 在空引用上调用方法 237 
10.3 .NET 3.5中的扩展方法 238 
10.3.1 从Enumerable开始起步 238 
10.3.2 用Where筛选并将方法调用链接到一起 240 
10.3.3 用Select方法和匿名类型进行投影 241 
10.3.4 用OrderBy方法进行排序 242 
10.3.5 涉及链接的实际例子 243 
10.4 使用思路和原则 244 
10.4.1 “扩展世界”和使接口更丰富 245 
10.4.2 流畅接口 245 
10.4.3 理智使用扩展方法 247 
10.5 小结 248 
第11章 查询表达式和LINQ to Object 249 
11.1 LINQ介绍 250 
11.1.1 这个名称中有什么 250 
11.1.2 LINQ中的基础概念 251 
11.1.3 定义示例数据模型 254 
11.2 简单的开始:选择元素 256 
11.2.1 以数据源作为开始,以选择作为结束 256 
11.2.2 作为查询表达式基础的编译 
器转换 257 
11.2.3 范围变量和重要的投影 259 
11.2.4 Cast、OfType和显式类型的范围变量 261 
11.3 对序列进行过滤和排序 262 
11.3.1 使用where子句进行过滤 263 
11.3.2 退化的查询表达式 264 
11.3.3 使用orderby子句进行排序 264 
11.4 let子句和透明标识符 266 
11.4.1 用let来进行中间计算 266 
11.4.2 透明标识符 267 
11.5 联接 268 
11.5.1 使用join子句的内联接 269 
11.5.2 使用join...into子句进行分组联接 272 
11.5.3 使用多个from子句进行交叉联接 274 
11.6 分组和延续 277 
11.6.1 使用group...by子句进行分组 277 
11.6.2 查询延续 280 
11.7 小结 283 
第12章 超越集合的LINQ 284 
12.1 LINQ to SQL 285 
12.1.1 创建缺陷数据库和实体 285 
12.1.2 用示例数据填充数据库 287 
12.1.3 用查询表达式访问数据库 288 
12.1.4 更新数据库 293 
12.1.5 LINQ to SQL小结 294 
12.2 用IQueryable和IQueryProvider进行转换 294 
12.2.1 IQueryable[T]和相关接口的介绍 295 
12.2.2 模拟接口实现来记录调用 296 
12.2.3 把表达式粘合在一起:Queryable的扩展方法 298 
12.2.4 模拟实际运行的查询提供器 300 
12.2.5 包装IQueryable 301 
12.3 LINQ to DataSet 302 
12.3.1 处理非类型化数据集 302 
12.3.2 处理类型化数据集 303 
12.4 LINQ to XML 306 
12.4.1 XElement和XAttribute 306 
12.4.2 把示例缺陷数据转换为XML 307 
12.4.3 在LINQ to XML中进行查询 309 
12.4.4 LINQ to XML小结 311 
12.5 超越.NET 3.5的LINQ 311 
12.5.1 第三方LINQ 312 
12.5.2 未来的微软LINQ技术 315 
12.6 小结 317 
第13章 新时代的优雅代码 319 
13.1 语言特性 320 
13.1.1 更重视函数化 320 
13.1.2 静态、动态、隐式、显式或混合 321 
13.2 把委托作为实现继承的新方式 321 
13.3 易读的结果高于实现 322 
13.4 并行宇宙中的生活 323 
13.5 再见 324 
附录A LINQ标准查询操作符 325

下载地址:英文下载地址



本文转自kyo-yo博客园博客,原文链接:http://www.cnblogs.com/kyo-yo/archive/2010/05/15/CSharp-In-Depth.html,如需转载请自行联系原作者


目录
相关文章
|
设计模式 Java 程序员
深入学习 C 语言需要看什么书籍;小白学编程先学习 C 还是 C#;java 源代码学习顺序|极客观点
深入学习 C 语言需要看什么书籍;小白学编程先学习 C 还是 C#;java 源代码学习顺序|极客观点
102 0
|
算法 Java Linux
各种计算机语言的经典书籍(C/C++/Java/C#/VC/VB等)
1、Java Java编程语言(第三版)—Java四大名著—-James Gosling(Java之父) Java编程思想(第2版)—-Java四大名著—-Bruce Eckel Java编程思想(第3版)—-Java四大名著—————-Bruce Eckel JAVA...
2093 0
|
3天前
|
开发框架 前端开发 .NET
C#编程与Web开发
【4月更文挑战第21天】本文探讨了C#在Web开发中的应用,包括使用ASP.NET框架、MVC模式、Web API和Entity Framework。C#作为.NET框架的主要语言,结合这些工具,能创建动态、高效的Web应用。实际案例涉及企业级应用、电子商务和社交媒体平台。尽管面临竞争和挑战,但C#在Web开发领域的前景将持续拓展。
|
3天前
|
SQL 开发框架 安全
C#编程与多线程处理
【4月更文挑战第21天】探索C#多线程处理,提升程序性能与响应性。了解C#中的Thread、Task类及Async/Await关键字,掌握线程同步与安全,实践并发计算、网络服务及UI优化。跟随未来发展趋势,利用C#打造高效应用。
|
3天前
|
存储 安全 网络安全
C#编程的安全性与加密技术
【4月更文挑战第21天】C#在.NET框架支持下,以其面向对象和高级特性成为安全软件开发的利器。本文探讨C#在安全加密领域的应用,包括使用System.Security.Cryptography库实现加密算法,利用SSL/TLS保障网络传输安全,进行身份验证,并强调编写安全代码的重要性。实际案例涵盖在线支付、企业应用和文件加密,展示了C#在应对安全挑战的同时,不断拓展其在该领域的潜力和未来前景。
|
3天前
|
人工智能 C# 开发者
C#编程中的图形界面设计
【4月更文挑战第21天】本文探讨了C#在GUI设计中的应用,介绍了Windows Forms、WPF和UWP等常用框架,强调了简洁界面、响应式设计和数据绑定等最佳实践。通过实际案例,展示了C#在企业应用、游戏开发和移动应用中的GUI实现。随着技术发展,C#在GUI设计的未来将趋向于跨平台、更丰富的组件和AI集成,为开发者创造更多可能性。
|
3天前
|
存储 算法 C#
C#编程与数据结构的结合
【4月更文挑战第21天】本文探讨了C#如何结合数据结构以构建高效软件,强调数据结构在C#中的重要性。C#作为面向对象的编程语言,提供内置数据结构如List、Array和Dictionary,同时也支持自定义数据结构。文章列举了C#实现数组、链表、栈、队列等基础数据结构的示例,并讨论了它们在排序、图算法和数据库访问等场景的应用。掌握C#数据结构有助于编写高性能、可维护的代码。
|
3天前
|
开发框架 Linux C#
C#编程的跨平台应用
【4月更文挑战第21天】C#与.NET Core的结合使得跨平台应用开发变得高效便捷,提供统一编程模型和高性能。丰富的类库、活跃的社区支持及Visual Studio Code、Xamarin等工具强化了其优势。广泛应用在企业系统、云服务和游戏开发中,虽面临挑战,但随着技术进步,C#在跨平台开发领域的前景广阔。
|
3天前
|
人工智能 C# 云计算
C#编程的未来发展趋向
【4月更文挑战第21天】C#编程未来将深化跨平台支持,强化云计算与容器技术集成,如.NET Core、Docker。在AI和ML领域,C#将提供更丰富框架,与AI芯片集成。语言和工具将持续创新,优化异步编程,如Task、async和await,提升多核性能。开源生态的壮大将吸引更多开发者,共创更多机遇。
|
3天前
|
程序员 C#
C#编程中的面向对象编程思想
【4月更文挑战第21天】本文探讨了C#中的面向对象编程,包括类、对象、封装、继承和多态。类是对象的抽象,定义属性和行为;对象是类的实例。封装隐藏内部细节,只暴露必要接口。继承允许类复用和扩展属性与行为,而多态使不同类的对象能通过相同接口调用方法。C#通过访问修饰符实现封装,使用虚方法和抽象方法实现多态。理解并应用这些概念,能提升代码的清晰度和可扩展性,助你成为更好的C#程序员。