当前位置:首页 > 工业技术
CLR via C#  第4版
CLR via C#  第4版

CLR via C# 第4版PDF电子书下载

工业技术

  • 电子书积分:20 积分如何计算积分?
  • 作 者:(美)李希特著
  • 出 版 社:北京:清华大学出版社
  • 出版年份:2015
  • ISBN:9787302380979
  • 页数:730 页
图书介绍:本书针对VS 2012和.NET Framework 4.5,深入、全面探讨了微软的公共语言运行时,并结合实例介绍了如何利用它们进行设计、开发和调试。全书5部分29章。第Ⅰ部分介绍CLR基础,第Ⅱ部分解释如何设计类型,第Ⅲ部分介绍基本类型,第Ⅳ部分以实用特性为主题,第Ⅴ部分花大量篇幅重点介绍线程处理。通过本书的阅读,读者可以掌握CLR和.NET Framework的精髓,轻松、高效地创建高性能应用程序。
《CLR via C# 第4版》目录
标签:

第Ⅰ部分 CLR基础 3

第1章 CLR的执行模型 3

1.1 将源代码编译成托管模块 3

1.2 将托管模块合并成程序集 6

1.3 加载公共语言运行时 7

1.4 执行程序集的代码 10

1.4.1 IL和验证 15

1.4.2 不安全的代码 16

1.5 本机代码生成器:NGen.exe 17

1.6 Framework类库 20

1.7 通用类型系统 22

1.8 公共语言规范 24

1.9 与非托管代码的互操作性 28

第2章 生成、打包、部署和管理应用程序及类型 29

2.1 .NET Framework部署目标 29

2.2 将类型生成到模块中 31

2.3 元数据概述 33

2.4 将模块合并成程序集 39

2.4.1 使用Visual Studio IDE将程序集添加到项目中 44

2.4.2 使用程序集链接器 45

2.4.3 为程序集添加资源文件 46

2.5 程序集版本资源信息 47

2.6 语言文化 51

2.7 简单应用程序部署(私有部署的程序集) 52

2.8 简单管理控制(配置) 53

第3章 共享程序集和强命名程序集 57

3.1 两种程序集,两种部署 58

3.2 为程序集分配强名称 59

3.3 全局程序集缓存 63

3.4 在生成的程序集中引用强命名程序集 65

3.5 强命名程序集能防篡改 66

3.6 延迟签名 67

3.7 私有部署强命名程序集 69

3.8 “运行时”如何解析类型引用 70

3.9 高级管理控制(配置) 73

第Ⅱ部分 设计类型 81

第4章 类型基础 81

4.1 所有类型都从System.Object派生 81

4.2 类型转换 83

4.3 命名空间和程序集 86

4.4 运行时的相互关系 90

第5章 基元类型、引用类型 和值类型 99

5.1 编程语言的基元类型 99

5.2 引用类型和值类型 106

5.3 值类型的装箱和拆箱 111

5.3.1 使用接口更改已装箱值类型中的字段(以及为什么不应该这样做) 121

5.3.2 对象相等性和同一性 123

5.4 对象哈希码 126

5.5 dynamic基元类型 127

第6章 类型和成员基础 135

6.1 类型的各种成员 135

6.2 类型的可见性 138

6.3 成员的可访问性 139

6.4 静态类 141

6.5 分部类、结构和接口 142

6.6 组件、多态和版本控制 143

6.6.1 CLR如何调用虚方法、属性和事件 145

6.6.2 合理使用类型的可见性和成员的可访问性 148

6.6.3 对类型进行版本控制时的虚方法的处理 150

第7章 常量和字段 155

7.1 常量 155

7.2 字段 156

第8章 方法 161

8.1 实例构造器和类(引用类型) 161

8.2 实例构造器和结构(值类型) 164

8.3 类型构造器 167

8.4 操作符重载方法 170

8.5 转换操作符方法 173

8.6 扩展方法 176

8.6.1 规则和原则 178

8.6.2 用扩展方法扩展各种类型 179

8.6.3 ExtensionAttribute类 181

8.7 分部方法 181

第9章 参数 185

9.1 可选参数和命名参数 185

9.1.1 规则和原则 186

9.1.2 DefaultParameterValueAttribute和OptionalAttribute 188

9.2 隐式类型的局部变量 188

9.3 以传引用的方式向方法传递参数 190

9.4 向方法传递可变数量的参数 195

9.5 参数和返回类型的设计规范 197

9.6 常量性 198

第10章 属性 201

10.1 无参属性 201

10.1.1 自动实现的属性 204

10.1.2 合理定义属性 205

10.1.3 对象和集合初始化器 208

10.1.4 匿名类型 209

10.1.5 System.Tuple类型 212

10.2 有参属性 214

10.3 调用属性访问器方法时的性能 218

10.4 属性访问器的可访问性 219

10.5 泛型属性访问器方法 219

第11章 事件 221

11.1 设计要公开事件的类型 222

11.1.1 第一步:定义类型来容纳所有需要发送给事件通知接收者的附加信息 222

11.1.2 第二步:定义事件成员 223

11.1.3 第三步:定义负责引发事件的方法来通知事件的登记对象 224

11.1.4 第四步:定义方法将输入转化为期望事件 226

11.2 编译器如何实现事件 226

11.3 设计侦听事件的类型 228

11.4 显式实现事件 230

第12章 泛型 233

12.1 FCL中的泛型 237

12.2 泛型基础结构 238

12.2.1 开放类型和封闭类型 239

12.2.2 泛型类型和继承 240

12.2.3 泛型类型同一性 242

12.2.4 代码爆炸 243

12.3 泛型接口 243

12.4 泛型委托 244

12.5 委托和接口的逆变和协变泛型类型实参 245

12.6 泛型方法 247

12.7 泛型和其他成员 249

12.8 可验证性和约束 250

12.8.1 主要约束 252

12.8.2 次要约束 253

12.8.3 构造器约束 254

12.8.4 其他可验证性问题 254

第13章 接口 259

13.1 类和接口继承 259

13.2 定义接口 260

13.3 继承接口 261

13.4 关于调用接口方法的更多探讨 263

13.5 隐式和显式接口方法实现(幕后发生的事情) 264

13.6 泛型接口 266

13.7 泛型和接口约束 268

13.8 实现多个具有相同方法名和签名的接口 269

13.9 用显式接口方法实现来增强编译时类型安全性 270

13.1 0谨慎使用显式接口方法实现 271

13.1 1设计:基类还是接口 274

第Ⅲ部分 基本类型 279

第14章 字符、字符串和文本处理 279

14.1 字符 279

14.2 System.String类型 282

14.2.1 构造字符串 282

14.2.2 字符串是不可变的 284

14.2.3 比较字符串 285

14.2.4 字符串留用 290

14.2.5 字符串池 293

14.2.6 检查字符串中的字符和文本元素 293

14.2.7 其他字符串操作 295

14.3 高效率构造字符串 296

14.3.1 构造StringBuilder对象 296

14.3.2 StringBuilder的成员 297

14.4 获取对象的字符串表示:ToString 299

14.4.1 指定具体的格式和语言文化 299

14.4.2 将多个对象格式化成一个字符串 303

14.4.3 提供定制格式化器 304

14.5 解析字符串来获取对象:Parse 306

14.6 编码:字符和字节的相互转换 308

14.6.1 字符和字节流的编码和解码 313

14.6.2 Base-64字符串编码和解码 314

14.7 安全字符串 315

第15章 枚举类型和位标志 319

15.1 枚举类型 319

15.2 位标志 324

15.3 向枚举类型添加方法 328

第16章 数组 329

16.1 初始化数组元素 331

16.2 数组转型 333

16.3 所有数组都隐式派生自System.Array 335

16.4 所有数组都隐式实现IEnumerable,ICollection和IList 336

16.5 数组的传递和返回 337

16.6 创建下限非零的数组 338

16.7 数组的内部工作原理 339

16.8 不安全的数组访问和固定大小的数组 342

第17章 委托 345

17.1 初识委托 345

17.2 用委托回调静态方法 347

17.3 用委托回调实例方法 349

17.4 委托揭秘 349

17.5 用委托回调多个方法(委托链) 353

17.5.1 C#对委托链的支持 356

17.5.2 取得对委托链调用的更多控制 357

17.6 委托定义不要太多(泛型委托) 359

17.7 C#为委托提供的简化语法 360

17.7.1 简化语法1:不需要构造委托对象 360

17.7.2 简化语法2:不需要定义回调方法(lambda表达式) 361

17.7.3 简化语法3:局部变量不需要手动包装到类中即可传给回调方法 364

17.8 委托和反射 367

第18章 定制特性 371

18.1 使用定制特性 371

18.2 定义自己的特性类 374

18.3 特性构造器和字段/属性数据类型 377

18.4 检测定制特性 378

18.5 两个特性实例的相互匹配 382

18.6 检测定制特性时不创建从Attribute派生的对象 384

18.7 条件特性类 387

第19章 可空值类型 389

19.1 C#对可空值类型的支持 391

19.2 C#的空接合操作符 393

19.3 CLR对可空值类型的特殊支持 394

19.3.1 可空值类型的装箱 394

19.3.2 可空值类型的拆箱 395

19.3.3 通过可空值类型调用GetType 395

19.3.4 通过可空值类型调用接口方法 395

第Ⅳ部分 核心机制 399

第20章 异常和状态管理 399

20.1 定义“异常” 399

20.2 异常处理机制 401

20.2.1 try块 402

20.2.2 catch块 402

20.2.3 finally块 404

20.3 System.Exception类 407

20.4 FCL定义的异常类 410

20.5 抛出异常 412

20.6 定义自己的异常类 413

20.7 用可靠性换取开发效率 415

20.8 设计规范和最佳实践 422

20.8.1 善用finally块 423

20.8.2 不要什么都捕捉 424

20.8.3 得体地从异常中恢复 425

20.8.4 发生不可恢复的异常时回滚部分完成的操作——维持状态 426

20.8.5 隐藏实现细节来维系协定 427

20.9 未处理的异常 429

20.10 对异常进行调试 433

20.11 异常处理的性能问题 435

20.12 约束执行区域(CER) 438

20.13 代码协定 441

第21章 托管堆和垃圾回收 447

21.1 托管堆基础 447

21.1.1 从托管堆分配资源 448

21.1.2 垃圾回收算法 449

21.1.3 垃圾回收和调试 451

21.2 代:提升性能 454

21.2.1 垃圾回收触发条件 458

21.2.2 大对象 459

21.2.3 垃圾回收模式 459

21.2.4 强制垃圾回收 462

21.2.5 监视应用程序的内存使用 463

21.3 使用需要特殊清理的类型 464

21.3.1 使用包装了本机资源的类型 470

21.3.2 一个有趣的依赖性问题 474

21.3.3 GC为本机资源提供的其他功能 475

21.3.4 终结的内部工作原理 479

21.3.5 手动监视和控制对象的生存期 481

第22章 CLR寄宿和AppDomain 489

22.1 CLR寄宿 489

22.2 AppDomain 491

跨越AppDomain边界访问对象 494

22.3 卸载AppDomain 504

22.4 监视AppDomain 505

22.5 AppDomain FirstChance异常通知 507

22.6 宿主如何使用AppDomain 507

22.6.1 可执行应用程序 507

22.6.2 Microsoft Silverlight富Internet应用程序 508

22.6.3 MicrosoftASP.NET和XML Web服务应用程序 508

22.6.4 Microsoft SQL Server 509

22.6.5 更多的用法只局限于想象力 509

22.7 高级宿主控制 509

22.7.1 使用托管代码管理CLR 509

22.7.2 写健壮的宿主应用程序 510

22.7.3 宿主如何拿回它的线程 511

第23章 程序集加载和反射 515

23.1 程序集加载 516

23.2 使用反射构建动态可扩展应用程序 520

23.3 反射的性能 521

23.3.1 发现程序集中定义的类型 522

23.3.2 类型对象的准确含义 522

23.3.3 构建Exception派生类型的层次结构 524

23.3.4 构造类型的实例 525

23.4 设计支持加载项的应用程序 527

23.5 使用反射发现类型的成员 529

23.5.1 发现类型的成员 530

23.5.2 调用类型的成员 533

23.5.3 使用绑定句柄减少进程的内存消耗 537

第24章 运行时序列化 541

24.1 序列化/反序列化快速入门 542

24.2 使类型可序列化 546

24.3 控制序列化和反序列化 548

24.4 格式化器如何序列化类型实例 551

24.5 控制序列化/反序列化的数据 552

24.6 流上下文 558

24.7 类型序列化为不同类型以及对象反序列化为不同对象 559

24.8 序列化代理 562

24.9 反序列化对象时重写程序集/类型 566

第25章 与WinRT组件互操作 569

25.1 CLR投射与WinRT组件类型系统规则 571

25.2 框架投射 575

25.2.1 从.NET代码中调用异步WinRT API 575

25.2.2 WInRT流和.NET流之间的互操作 579

25.2.3 在CLR和WinRT之间传输数据块 580

25.3 用C#定义WinRT组件 583

第Ⅴ部分 线程处理 591

第26章 线程基础 591

26.1 Windows为什么要支持线程 591

26.2 线程开销 592

26.3 停止疯狂 595

26.4 CPU发展趋势 597

26.5 CLR线程和Windows线程 598

26.6 使用专用线程执行异步的计算限制操作 599

26.7 使用线程的理由 601

26.8 线程调度和优先级 603

26.9 前台线程和后台线程 608

26.10 继续学习 609

第27章 计算限制的异步操作 611

27.1 CLR线程池基础 612

27.2 执行简单的计算限制操作 612

27.3 执行上下文 614

27.4 协作式取消和超时 615

27.5 任务 619

27.5.1 等待任务完成并获取结果 620

27.5.2 取消任务 622

27.5.3 任务完成时自动启动新任务 623

27.5.4 任务可以启动子任务 625

27.5.5 任务内部揭秘 625

27.5.6 任务工厂 627

27.5.7 任务调度器 628

27.6 Parallel的静态For,ForEach和Invoke方法 630

27.7 并行语言集成查询(PLINQ) 634

27.8 执行定时计算限制操作 636

27.9 线程池如何管理线程 639

27.9.1 设置线程池限制 639

27.9.2 如何管理工作者线程 640

第28章 I/O限制的异步操作 643

28.1 Windows如何执行I/O操作 643

28.2 C#的异步函数 647

28.3 编译器如何将异步函数转换成状态机 649

28.4 异步函数扩展性 653

28.5 异步函数和事件处理程序 655

28.6 FCL的异步函数 656

28.7 异步函数和异常处理 658

28.8 异步函数的其他功能 658

28.9 应用程序及其线程处理模型 661

28.10 以异步方式实现服务器 663

28.11 取消I/O操作 664

28.12 有的I/O操作必须同步进行 665

28.13 I/O请求优先级 666

第29章 基元线程同步构造 669

29.1 类库和线程安全 671

29.2 基元用户模式和内核模式构造 672

29.3 用户模式构造 673

29.3.1 易变构造 674

29.3.2 互锁构造 678

29.3.3 实现简单的自旋锁 682

29.3.4 Interlocked Anything模式 685

29.4 内核模式构造 687

29.4.1 Event构造 691

29.4.2 Semaphore构造 693

29.4.3 Mutex构造 694

第30章 混合线程同步构造 697

30.1 一个简单的混合锁 697

30.2 自旋、线程所有权和递归 699

30.3 FCL中的混合构造 701

30.3.1 ManualResetEventSlim类和SemaphoreSlim类 701

30.3.2 Monitor类和同步块 701

30.3.3 ReaderWriterLockSlim类 706

30.3.4 OneManyLock类 709

30.3.5 CountdownEvent类 711

30.3.6 Barrier类 711

30.3.7 线程同步构造小结 712

30.4 著名的双检锁技术 713

30.5 条件变量模式 717

30.6 异步的同步构造 719

30.7 并发集合类 723

译者后记 727

返回顶部