《框架设计CLR Via C# 第2版》PDF下载

  • 购买积分:16 如何计算积分?
  • 作  者:(美)Jeffrey Richter著
  • 出 版 社:北京:清华大学出版社
  • 出版年份:2006
  • ISBN:7302140162
  • 页数:542 页
图书介绍:本书分5部分,CLR基础;类型的使用;类型的设计;基础类型;CLR实用工具。

第Ⅰ部分 CLR基础 3

第1章 CLR的执行模型 3

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

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

1.3 加载公共语言运行库 7

1.4 执行程序集的代码 9

1.4.1 IL和验证 14

1.4.2 不安全的代码 15

1.5 本地代码生成器:NGen.exe 16

1.6 Framework类库入门 18

1.7 通用类型系统 20

1.8 公共语言规范(CLS) 22

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

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

2.1 .NET Framework部署目标 28

2.2 将类型集成到模块中 29

2.3 元数据概述 32

2.4 合并模块以构成一个程序集 38

2.4.1 使用Visual Studio IDE在项目中添加程序集 43

2.4.2 使用程序集链接器 44

2.4.3 在程序集中包含资源文件 45

2.5 程序集版本资源信息 46

2.6 语言文化 49

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

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

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

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

3.2 为程序集指派强名称 56

3.3 全局程序集缓存 61

3.4 在生成的程序集中引用一个强命名程序集 66

3.5 强命名程序集能防范篡改 67

3.6 延迟签名 68

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

3.8 运行库如何解析类型引用 71

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

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

第Ⅱ部分 类型的使用 81

第4章 类型基础 81

4.2 强制类型转换 83

4.3 命名空间和程序集 86

4.4 运行时的相互关系 90

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

5.1 编程语言的基元类型 98

5.2 引用类型和值类型 103

5.3 值类型的装箱和拆箱 108

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

5.5 对象相等性和身份标识 120

5.6 对象哈希码 123

第Ⅲ部分 类型的设计 127

第6章 类型和成员基础 127

6.1 类型成员的种类 127

6.2 类型的可见性 130

6.3 成员的可访问性 131

6.4 静态类 133

6.5 部分类、结构和接口 134

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

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

6.6.2 巧妙使用类型的可见性和成员的可访问性 140

6.6.3 类型版本控制过程中虚方法的处理 143

第7章 常量和字段 147

7.1 常量 147

7.2 字段 148

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

第8章 方法:构造器、操作符、转换操作符 和参数 151

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

8.3 类型构造器 156

8.4 操作符重载 161

8.5 转换操作符方法 164

8.6 通过引用向方法传递参数 167

8.7 向方法传递可变数量的参数 172

8.8 声明方法的参数类型 174

8.9 常量方法和参数 175

9.1 无参属性 176

第9章 属性 176

9.2 有参属性 180

9.3 调用属性访问器方法的性能 184

9.4 属性访问器的可访问性 185

9.5 泛型属性访问器方法 185

第10章 事件 186

10.1 设计一个对外提供事件的类型 187

10.1.1 第一步:定义一个类型用于存放所有需要发送给事件通知接收者的附加信息 187

10.1.2 第二步:定义事件成员 188

10.1.3 第三步:定义一个负责引发事件的方法来通知已订阅事件的对象事件已经发生 189

10.1.4 第四步:定义一个方法,将输入转化为期望事件 190

10.2 如何实现事件 190

10.3 设计一个监听事件的类型 192

10.4 事件与线程安全 193

10.5 显式控制事件的订阅与注销 194

10.6 设计一个定义多个事件的类型 196

第11章 字符、字符串和文本 201

11.1 字符 201

第Ⅳ部分 基本类型 201

11.2 System.String类型 204

11.2.1 构造字符串 204

11.2.2 字符串是不可变的 206

11.2.3 比较字符串 206

11.2.4 字符串留用 212

11.2.5 字符串池 214

11.2.6 检查字符串的字符和文本元素 214

11.2.7 其他字符串操作 216

11.3.1 构造一个StringBuilder对象 217

11.3 高效率地动态构造一个字符串 217

11.3.2 StringBuilder的成员 218

11.4 获取对象的字符串表示 220

11.4.1 特定的格式和语言 220

11.4.2 将多个对象格式化成单个字符串 224

11.4.3 提供定制格式化器 225

11.5 解析字符串来获取一个对象 227

11.6 编码:在字符和字节之间转换 229

11.6.1 字符和字节流的编码/解码 234

11.6.2 Base-64字符串编码和解码 235

11.7 安全字符串 236

第12章 枚举类型和位标志 239

12.1 枚举类型 239

12.2 位标志 244

第13章 数组 247

13.1 数组的类型转换 249

13.2 所有数组都隐式继承自System.Array 251

13.3 所有数组都隐式实现IEnumerable,ICollection和Ilist 252

13.5 创建下界非0的数组 253

13.4 数组的传递与返回 253

13.6 数组访问性能 254

13.7 非安全数组访问和固定长度数组 258

第14章 接口 261

14.1 类和接口的继承 261

14.2 定义接口 262

14.3 接口的继承 263

14.4 调用接口方法详解 265

14.5 接口方法的隐式和显式实现(幕后细节) 266

14.6 泛型接口 267

14.7 泛型接口和接口约束 269

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

14.9 用显式接口方法实现改进编译时类型安全 271

14.10 谨慎使用显式接口方法实现 272

14.11 设计:基类还是接口 275

第15章 委托 277

15.1 初识委托 277

15.2 使用委托来回调静态方法 279

15.3 使用委托回调实例方法 280

15.4 委托揭秘 281

15.5 使用委托回调多个方法(链式) 285

15.6 C#对委托链的支持 288

15.7 对委托链调用进行更多控制 289

15.8 C#为委托提供的语法便利 291

15.8.1 语法快捷方式1:不需要构造委托对象 291

15.8.2 语法快捷方式2:不需要定义回调方法 292

15.8.3 语法快捷方式3:不需要指定回调方法的参数 293

15.8.4 语法快捷方式4:不需要将局部变量人工封装到类中,即可将它们传给一个回调方法 294

15.9 委托和反射 296

第16章 泛型 300

16.1 FCL中的泛型 304

16.2 Wintellect的Power Collections库 305

16.3 泛型基础结构 306

16.3.1 开放和封闭式类型 307

16.3.2 泛型类型和继承 308

16.3.3 泛型类型同一性 310

16.4 泛型接口 311

16.3.4 代码爆炸 311

16.5 泛型委托 312

16.6 泛型方法 313

16.7 泛型和其他成员 315

16.8 可验证性和限制 315

16.8.1 主要约束 317

16.8.2 次要约束 318

16.8.3 构造器约束 319

16.8.4 其他可验证性问题 320

第17章 自定义属性 323

17.1 使用自定义属性 324

17.2 定义自己的属性 327

17.3 属性构造器和Field/Property数据类型 330

17.4 检测自定义属性的使用 331

17.5 两个属性实例的相互匹配 334

17.6 检测自定义属性的使用,同时不创建Attribute派生对象 337

17.7 条件属性类 339

第18章 可空值类型 341

18.1 C#对可空值类型的支持 342

18.2 C#的空接合操作符 344

18.3 CLR对可空值类型的特殊支持 344

18.3.1 对可空值类型进行装箱 344

18.3.2 对可空值类型进行拆箱 345

18.3.3 通过可空值类型来调用GetType 346

18.3.4 通过可空值类型调用接口方法 346

第Ⅴ部分 CLR实用特性 349

第19章 异常 349

19.1 异常处理的演变 350

19.2 异常处理机制 351

19.2.1 try块 352

19.2.2 catch块 352

19.2.3 finally块 354

19.3 符合公共语言规范(CLS)的异常与不符合CLS的异常 354

19.4 异常的准确定义 356

19.5 System.Exception类 358

19.6 FCL中预定义的异常类 359

19.8 定义自己的异常类 361

19.7 抛出异常 361

19.9 如何正确地使用异常 364

19.9.1 验证方法的参数 364

19.9.2 合理使用finally块 367

19.9.3 避免捕获所有的异常 368

19.9.4 从异常中顺利恢复 369

19.9.5 当异常无法修复时,回滚局部完成的操作 369

19.9.6 隐藏实现细节,维持“约定” 370

19.10 性能考虑 372

19.11 未处理异常 374

19.12 异常堆栈跟踪 376

19.13 调试异常 378

第20章 自动内存管理(垃圾收集) 380

20.1 理解垃圾收集平台的基本工作原理 380

20.2 垃圾收集算法 383

20.3 垃圾收集与调试 387

20.4 使用终结操作来释放本地资源 389

20.4.1 确保终结操作使用CriticalFinalizerObject类型 390

20.4.2 SafeHandle类型及其派生类型 391

20.4.3 使用SafeHandle类型实现非托管代码之间的互操作 393

20.5 对托管资源使用终结操作 395

20.6 哪些事件会导致Finalize方法的调用 397

20.7 终结操作内部揭秘 398

20.8 释放模式:强制对象清理资源 401

20.9 使用实现了释放模式的类型 404

20.10 C#的using语句 407

20.11 一个有趣的依赖问题 409

20.12 人工监视和控制对象的生存期 410

20.13 对象复苏 417

20.14 对象的代 418

20.15 使用本地资源的其他垃圾收集特性 423

20.16 预测需求较多内存的操作能否成功 426

20.17 编程控制垃圾收集器 427

20.18 与垃圾收集器性能相关的其他一些话题 430

20.18.1 免同步的多线程分配 431

20.18.2 可扩展并行收集 431

20.18.3 并发收集 431

20.18.4 大尺寸对象 432

20.19 监视垃圾收集 433

第21章 CLR寄宿和应用程序域 435

21.1 CLR寄宿 435

21.2 应用程序域 438

21.3 应用程序域的卸载 450

21.4 宿主如何使用应用程序域 451

21.4.1 控制台和Windows窗体应用程序 451

21.4.2 Microsoft Internet Explorer 452

21.4.3 Microsoft ASP.NET Web窗体和XMLWeb服务应用程序 452

21.5.1 使用托管代码管理CLR 453

21.5 高级宿主控制 453

21.4.4 Microsoft SQL Server 2005 453

21.4.5 预测与展望 453

21.5.2 编写健壮的宿主应用程序 454

21.5.3 宿主如何恢复线程 455

第22章 程序集的加载与反射 459

22.1 程序集的加载 459

22.2 使用反射构建动态可扩展应用程序 463

22.3 反射的性能 463

22.3.1 发现程序集中定义的类型 464

22.3.2 类型对象的准确含义 465

22.3.3 构建派生自Exception的类型的层次结构 467

22.3.4 构建类型的实例 468

22.4 设计支持插件的应用程序 470

22.5 使用反射发现类型的成员 473

22.5.1 发现类型成员 473

22.5.2 BindingFlags:筛选返回成员的类型 477

22.5.3 发现类型的接口 478

22.5.4 调用类型的成员 480

22.5.5 一次绑定、多次调用 483

22.5.6 使用绑定句柄来减小工作集 487

第23章 执行异步操作 490

23.1 CLR如何使用Windows线程 490

23.2 高效线程使用圣典 491

23.3 CLR线程池简介 493

23.4 限制线程池中线程的数量 494

23.5 使用线程池执行受计算限制的异步操作 495

23.6 使用专用线程执行受计算限制的异步操作 497

23.7 定期执行受计算限制的异步操作 499

三个定时器的史话 500

23.8 异步编程模型简介 501

23.9 使用APM执行受I/O限制的异步操作 502

23.10 APM的三个聚集技巧 504

23.10.1 APM的等待直至完成聚集技巧 504

23.10.2 APM的轮询聚集技巧 506

23.10.3 APM的方法回调聚集技巧 508

23.11 使用APM执行受计算限制的异步操作 512

23.13 对APM的重要说明 514

23.12 APM与异常 514

23.14 执行上下文 516

第24章 线程同步 519

24.1 内存一致性、易失内存访问与易失字段 520

24.1.1 易失读取和写入 522

24.1.2 C#对易失字段的支持 524

24.2 互锁方法 526

24.3 Monitor类与同步块 527

24.3.1 “伟大想法” 527

24.3.2 “伟大想法”的实现 528

24.3.3 使用Monitor类管理同步块 529

24.3.4 Microsoft最初计划的同步方式 530

24.3.5 使用C#的lock语句简化代码 531

24.3.6 Microsoft最初计划同步静态成员的方式 532

24.3.7 为什么“伟大想法”思想毫无伟大之处 533

24.3.8 著名的双检锁技巧 535

24.4 ReaderWriterLock类 537

24.5 使用托管代码中的Windows内核对象 538