图书介绍

深入理解C# 原书第2版PDF|Epub|txt|kindle电子书版本网盘下载

深入理解C# 原书第2版
  • (英)斯基特著 著
  • 出版社: 北京:人民邮电出版社
  • ISBN:9787115269249
  • 出版时间:2012
  • 标注页数:446页
  • 文件大小:137MB
  • 文件页数:469页
  • 主题词:C语言-程序设计

PDF下载


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

下载说明

深入理解C# 原书第2版PDF格式电子书版下载

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

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

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

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

图书目录

第一部分 基础知识2

第1章C#开发的进化史2

1.1从简单的数据类型开始3

1.1.1 C# 1中定义的产品类型3

1.1.2 C# 2中的强类型集合4

1.1.3 C# 3中自动实现的属性5

1.1.4 C#4中的命名实参6

1.2排序和过滤7

1.2.1按名称对产品进行排序7

1.2.2查询集合10

1.3处理未知数据11

1.3.1表示未知的价格12

1.3.2可选参数和默认值12

1.4 LINQ简介13

1.4.1查询表达式和进程内查询13

1.4.2查询XML14

1.4.3 LINQ to SQL15

1.5 COM和动态类型16

1.5.1简化COM互操作16

1.5.2与动态语言互操作17

1.6剖析.NET平台18

1.6.1 C#语言18

1.6.2运行时19

1.6.3框架库19

1.7怎样写出超炫的代码19

1.7.1采用代码段形式的全能代码20

1.7.2教学代码不是产品代码21

1.7.3你的新朋友:语言规范21

1.8小结21

第2章C# 1所搭建的核心基础23

2.1委托23

2.1.1简单委托的构成24

2.1.2合并和删除委托28

2.1.3对事件的简单讨论29

2.1.4委托小结30

2.2类型系统的特征31

2.2.1 C#在类型系统世界中的位置31

2.2.2 C# 1的类型系统在什么时候不够用34

2.2.3类型系统特征总结36

2.3值类型和引用类型36

2.3.1现实世界中的值和引用36

2.3.2值类型和引用类型基础知识37

2.3.3走出误区38

2.3.4装箱和拆箱40

2.3.5值类型和引用类型小结41

2.4 C# 1之外:构建于坚实基础之上的新特性41

2.4.1与委托有关的特性41

2.4.2与类型系统有关的特性43

2.4.3与值类型有关的特性45

2.5小结46

第二部分C# 2:解决C# 1的问题48

第3章 用泛型实现参数化类型48

3.1为什么需要泛型49

3.2日常使用的简单泛型50

3.2.1通过例子来学习:泛型字典50

3.2.2泛型类型和类型参数52

3.2.3泛型方法和判读泛型声明55

3.3深化与提高58

3.3.1类型约束58

3.3.2泛型方法类型实参的类型推断62

3.3.3实现泛型63

3.4高级泛型68

3.4.1静态字段和静态构造函数69

3.4.2 JIT编译器如何处理泛型70

3.4.3泛型迭代72

3.4.4反射和泛型74

3.5泛型在C#和其他语言中的限制78

3.5.1泛型可变性的缺乏78

3.5.2缺乏操作符约束或者“数值”约束82

3.5.3缺乏泛型属性、索引器和其他成员类型83

3.5.4同C++++模板的对比84

3.5.5和Java泛型的对比85

3.6小结86

第4章 可空类型88

4.1没有值时怎么办88

4.1.1为什么值类型的变量不能是null89

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

4.2 System.Nullable<T>和System.Nullable91

4.2.1 Nullable<T>简介91

4.2.2 Nullable<T>装箱和拆箱94

4.2.3 Nullable<T>实例的相等性95

4.2.4来自非泛型Nullable类的支持96

4.3 C# 2为可空类型提供的语法糖96

4.3.1?修饰符97

4.3.2使用null进行赋值和比较98

4.3.3可空转换和操作符99

4.3.4可空逻辑102

4.3.5对可空类型使用as操作符103

4.3.6空合并操作符104

4.4可空类型的新奇用法106

4.4.1尝试一个不使用输出参数的操作107

4.4.2空合并操作符让比较不再痛苦108

4.5小结111

第5章 进入快速通道的委托112

5.1向笨拙的委托语法说拜拜113

5.2方法组转换114

5.3协变性和逆变性115

5.3.1委托参数的逆变性116

5.3.2委托返回类型的协变性117

5.3.3不兼容的风险118

5.4使用匿名方法的内联委托操作119

5.4.1从简单的开始:处理一个参数119

5.4.2匿名方法的返回值121

5.4.3忽略委托参数123

5.5在匿名方法中捕捉变量124

5.5.1定义闭包和不同的变量类型124

5.5.2测试被捕获的变量的行为126

5.5.3捕获变量到底有什么用处127

5.5.4捕获变量的延长生存期127

5.5.5局部变量实例化128

5.5.6共享和非共享的变量混合使用130

5.5.7捕获变量的使用规则和小结132

5.6小结133

第6章 实现迭代器的捷径134

6.1 C# 1:手写迭代器的痛苦135

6.2 C# 2:利用yield语句简化迭代器137

6.2.1迭代器块和yield return简介137

6.2.2观察迭代器的工作流程139

6.2.3进一步了解迭代器执行流程141

6.2.4具体实现中的奇特之处144

6.3真实的例子:迭代范围值145

6.3.1迭代时刻表中的日期145

6.3.2迭代文件中的行146

6.3.3使用迭代器块和谓词对项进行延迟筛选148

6.4使用CCR实现伪同步代码150

6.5小结152

第7章 结束C# 2的讲解:最后的一些特性153

7.1分部类型154

7.1.1在多个文件中创建一个类型154

7.1.2分部类型的使用156

7.1.3 C# 3独有的分部方法157

7.2静态类型159

7.3独立的取值方法/赋值方法属性访问器161

7.4命名空间别名162

7.4.1限定的命名空间别名163

7.4.2全局命名空间别名164

7.4.3外部别名164

7.5 Pragma指令166

7.5.1警告pragma166

7.5.2校验和pragma167

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

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

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

7.7.2为什么使用InternalsVisibleTo170

7.7.3InternalsVisibleTo和签名程序集170

7.8小结171

第三部分C# 3:革新写代码的方式174

第8章 用智能的编译器来防错174

8.1自动实现的属性175

8.2隐式类型的局部变量176

8.2.1用var声明局部变量177

8.2.2隐式类型的限制178

8.2.3隐式类型的优缺点179

8.2.4建议180

8.3简化的初始化180

8.3.1定义示例类型181

8.3.2设置简单属性182

8.3.3为嵌入对象设置属性183

8.3.4集合初始化列表184

8.3.5初始化特性的应用186

8.4隐式类型的数组187

8.5匿名类型188

8.5.1第一次邂逅匿名类型188

8.5.2匿名类型的成员190

8.5.3投影初始化列表191

8.5.4重点何在192

8.6小结193

第9章Lambda表达式和表达式树194

9.1作为委托的Lambda表达式195

9.1.1准备工作:Func<…>委托类型简介195

9.1.2第一次转换成Lambda表达式196

9.1.3用单一表达式作为主体197

9.1.4隐式类型的参数列表197

9.1.5单一参数的快捷语法198

9.2使用List<T>和事件的简单例子199

9.2.1对列表进行筛选、排序并设置其他操作199

9.2.2在事件处理程序中进行记录201

9.3表达式树202

9.3.1在程序中构建表达式树202

9.3.2将表达式树编译成委托204

9.3.3将C# Lambda表达式转换成表达式树205

9.3.4位于LINQ核心的表达式树208

9.3.5 LINQ之外的表达式树209

9.4类型推断和重载决策发生的改变211

9.4.1改变的起因:精简泛型方法调用211

9.4.2推断匿名函数的返回类型212

9.4.3分两个阶段进行的类型推断213

9.4.4选择正确的被重载的方法217

9.4.5类型推断和重载决策218

9.5小结219

第10章 扩展方法220

10.1未引入扩展方法之前的状态221

10.2扩展方法的语法223

10.2.1声明扩展方法223

10.2.2调用扩展方法224

10.2.3扩展方法是怎样被发现的225

10.2.4在空引用上调用方法226

10.3 .NET 3.5中的扩展方法227

10.3.1从Enumerable开始起步228

10.3.2用Where筛选并将方法调用链接到一起229

10.3.3插曲:似曾相识的Where方法231

10.3.4用Select方法和匿名类型进行投影232

10.3.5用OrderBy方法进行排序232

10.3.6涉及链接的实际例子234

10.4使用思路和原则235

10.4.1“扩展世界”和使接口更丰富235

10.4.2流畅接口236

10.4.3理智使用扩展方法237

10.5小结238

第11章 查询表达式和LINQ to Objects240

11.1 LINQ介绍241

11.1.1 LINQ中的基础概念241

11.1.2定义示例数据模型245

11.2简单的开始:选择元素246

11.2.1以数据源作为开始,以选择作为结束246

11.2.2作为查询表达式基础的编译器转换247

11.2.3范围变量和重要的投影249

11.2.4 Cast、 OfType和显式类型的范围变量251

11.3对序列进行过滤和排序252

11.3.1使用where子句进行过滤253

11.3.2退化的查询表达式253

11.3.3使用orderby子句进行排序254

11.4 let子句和透明标识符256

11.4.1用let来进行中间计算256

11.4.2透明标识符257

11.5联接258

11.5.1使用join子句的内联接258

11.5.2使用join… into子句进行分组联接262

11.5.3使用多个from子句进行交叉联接和合并序列264

11.6分组和延续267

11.6.1使用group … by子句进行分组267

11.6.2查询延续270

11.7在查询表达式和点标记之间作出选择272

11.7.1需要使用点标记的操作273

11.7.2选择点标记273

11.7.3选择查询表达式274

11.8小结275

第12章 超越集合的LINQ276

12.1使用LINQ to SQL查询数据库277

12.1.1数据库和模型277

12.1.2用查询表达式访问数据库279

12.1.3包含联接的查询281

12.2用IQueryable和IQueryProvider进行转换283

12.2.1IQueryable<T>和相关接口的介绍283

12.2.2模拟接口实现来记录调用285

12.2.3把表达式粘合在一起:Queryable的扩展方法287

12.2.4模拟实际运行的查询提供器289

12.2.5包装IQueryable290

12.3 LINQ友好的API和LINQ to XML290

12.3.1 LINQ to XML中的核心类型290

12.3.2声明式构造292

12.3.3查询单个节点294

12.3.4合并查询操作符296

12.3.5与LINQ和谐共处297

12.4用并行LINQ代替LINQ to Objects297

12.4.1在单线程中绘制曼德博罗特集297

12.4.2 ParallelEnumerable、Parallel-Query和AsParallel299

12.4.3调整并行查询300

12.5使用LINQ to Rx反转查询模型301

12.5.1IObservable<T>和 IObserver<T>302

12.5.2简单地开始303

12.5.3查询可观察对象304

12.5.4意义何在306

12.6扩展LINQ to Objects306

12.6.1设计和实现指南307

12.6.2示例扩展:选择随机元素308

12.7小结309

第四部分C# 4:良好的交互性312

第13章 简化代码的微小修改312

13.1可选参数和命名实参312

13.1.1可选参数313

13.1.2命名实参317

13.1.3两者相结合321

13.2改善COM互操作性324

13.2.1在C# 4之前操纵Word是十分恐怖的325

13.2.2可选参数和命名实参的复仇325

13.2.3按值传递ref参数326

13.2.4调用命名索引器327

13.2.5链接主互操作程序集328

13.3接口和委托的泛型可变性330

13.3.1可变性的种类:协变性和逆变性331

13.3.2在接口中使用可变性332

13.3.3在委托中使用可变性334

13.3.4复杂情况335

13.3.5限制和说明336

13.4对锁和字段风格的事件的微小改变339

13.4.1健壮的锁339

13.4.2字段风格的事件340

13.5小结341

第14章 静态语言中的动态绑定342

14.1何谓,何时,为何,如何343

14.1.1何谓动态类型343

14.1.2动态类型什么时候有用,为什么344

14.1.3 C# 4如何提供动态类型345

14.2关于动态的快速指南345

14.3动态类型示例348

14.3.1 COM和Office348

14.3.2动态语言350

14.3.3纯托管代码中的动态类型353

14.4幕后原理358

14.4.1 DLR简介358

14.4.2 DLR核心概念360

14.4.3 C#编译器如何处理动态362

14.4.4更加智能的C#编译器365

14.4.5动态代码的约束368

14.5实现动态行为370

14.5.1使用Expandoobject370

14.5.2使用DynamicObject374

14.5.3实现IDynamicMetaobject-Provider380

14.6小结383

第15章 使用契约让代码更加清晰385

15.1未引入代码契约之前的状态386

15.2代码契约387

15.2.1前置条件388

15.2.2后置条件389

15.2.3固定条件390

15.2.4断言和假设392

15.2.5旧式契约393

15.3使用ccrewrite和ccrefgen重写二进制394

15.3.1简单重写394

15.3.2契约继承395

15.3.3契约引用程序集398

15.3.4失败行为399

15.4静态检查401

15.4.1开始静态检查401

15.4.2隐式职责403

15.4.3有选择性的检查406

15.5使用ccdocgen将契约文档化408

15.6契约实战410

15.6.1契约中有什么410

15.6.2如何开始411

15.6.3无处不在的选项412

15.7小结414

第16章 何去何从415

16.1 C#——传统与现代的结合415

16.2计算机科学和.NET416

16.3计算机世界417

16.4再会417

附录A LINQ标准查询操作符419

附录B .NET中的泛型集合430

附录C版本总结440

热门推荐