图书介绍

深入解析C#PDF|Epub|txt|kindle电子书版本网盘下载

深入解析C#
  • (美)JONSKEET著 著
  • 出版社: 北京:人民邮电出版社
  • ISBN:9787115226488
  • 出版时间:2010
  • 标注页数:334页
  • 文件大小:77MB
  • 文件页数:353页
  • 主题词:C语言-程序设计

PDF下载


点此进入-本书在线PDF格式电子书下载【推荐-云解压-方便快捷】直接下载PDF格式图书。移动端-PC端通用
种子下载[BT下载速度快]温馨提示:(请使用BT下载软件FDM进行下载)软件下载地址页直链下载[便捷但速度慢]  [在线试读本书]   [在线获取解压码]

下载说明

深入解析C#PDF格式电子书版下载

下载的文件为RAR压缩包。需要使用解压软件进行解压得到PDF格式图书。

建议使用BT下载工具Free Download Manager进行下载,简称FDM(免费,没有广告,支持多平台)。本站资源全部打包为BT种子。所以需要使用专业的BT下载软件进行下载。如BitComet qBittorrent uTorrent等BT下载工具。迅雷目前由于本站不是热门资源。不推荐使用!后期资源热门了。安装了迅雷也可以迅雷进行下载!

(文件页数 要大于 标注页数,上中下等多册电子书除外)

注意:本站所有压缩包均有解压码: 点击下载压缩包解压工具

图书目录

第一部分 基础知识2

第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.018

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 为什么值类型的变量不能是null102

4.1.2 在C#1中表示空值的模式102

4.2 System.Nullable〈T〉和System.Nullable104

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 警告pragma179

7.5.2 校验和pragma180

7.6 非安全代码中的固定大小的缓冲区180

7.7 把内部成员暴露给选定的程序集182

7.7.1 在简单情况下的友元程序集182

7.7.2 为什么使用InternalsVisibleTo184

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 Object249

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章 超越集合的LINQ284

12.1 LINQ to SQL285

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 包装IQueryable301

12.3 LINQ to DataSet302

12.3.1 处理非类型化数据集302

12.3.2 处理类型化数据集303

12.4 LINQ to XML306

12.4.1 XElement和XAttribute306

12.4.2 把示例缺陷数据转换为XML307

12.4.3 在LINQtoXML中进行查询309

12.4.4 LINQ to XML小结311

12.5 超越NET 3.5的LINQ311

12.5.1 第三方LINQ312

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

热门推荐