您的浏览历史

框架设计(第2版):CLR Via C#

促销活动
  • [本书]参加清华大学出版社满58元赠书活动
精彩评论

基本信息

编辑推荐

被china-pub会员评为“2007年我最喜爱的十大技术图书”之一
知名技术作家类Jeff Richter 为您提供专业指导,让您迅速掌握CLR和.NET Framework 2.0
现提供本书英文原版部分章节,欢迎大家踊跃参与评论翻译质量,留下您的宝贵书评

推荐阅读
代码大全[第二版·英文珍藏版]..

市场价:¥148.00
4-5星价:¥113.96
[购买] [收藏]
程序员2006精华本(上、下册+1DVD)..

市场价:¥45.00
4-5星价:¥36.00
[购买] [收藏]

内容简介回到顶部↑

作为深受编程人员爱戴和尊敬的编程专家,微软.NET开发团队的顾问,本书作者Jeffrey Richter针对开发各种应用程序(如Web Form、Windows Form和Web服务、Microsoft SQL Server解决方案、控制台应用程序、NT Service)的开发人员,深入揭示了公共语言运行库(CLR)和.NET Framework.,演示了如何将这些知识应用到实际开发。全书分5部分,共24章。第1部分讲述CLR基础,第11部分介绍类型的使用,第III部分说明类型的设计,第Ⅳ部分介绍基本类型,第V部分讲述CLR实用特性。.
通过本书的阅读,读者可以掌握CLR精髓,轻松、高效地创建高性能应用程序。
在经典畅销书《Microsoft .NET框架程序设计》的最新版中,深入剖析了.NET Framework和CLR 2.0的内部机制。Jeffrey是深受爱戴的编程专家,同时也是Microsoft .NET开发团队的顾问。本书是他多年开发和咨询经验的结晶,是开发人员开发任何一类应用程序(包括ASP.NET、Windows窗体、Microsoft SQL Server,Web服务和控制台应用程序)的理想参考。
通过本书提供的动手指导和丰富的C#范例代码,开发人员可掌握难解的主题,开发出高性能的应用程序。
本书特色主题:..
· 构建、部署、管理应用程序、组件和共享程序集并对其进行版本控制
· 用常量、字段、构造函数、方法、属性和事件来设计类型
· 高效使用CLR的特殊类型,如枚举器、数组和字符串等
· 声明、创建和使用委托来揭示回调函数
· 用接口和泛型来定义和部署可重用的算法
· 定义、使用和检测自定义属性
· 使用异常处理来构建健壮、稳定、安全性更强的组件
· 用垃圾收集机制自动管理内存,并使用本地资源
· 应用CLR宿主、应用程序域、程序集加载和反射,构建动态可扩展的应用程序。...

作译者回到顶部↑

本书提供作译者介绍

Jeffrey Richter是全球享有盛誉的技术作家,Wintellect公司的创办人之一。该公司专门从事培训、调试和咨询,帮助客户构建更好、更快的软件。他在Windows/.NET领域有着杰出的贡献。他的经典著作《Windows 高级编程指南》和《Windows核心编程》是Windows程序设计领域的颠峰之作,培育了几代软件开发设计人员。Jeffrey从1999年10月以来,一直为Microsoft .NET Framework 团队担任顾问,与他们一起经历着.NET的孕育、诞生和发展,他对.NET思想的领悟、对.NET细节的了解程度,是其他任何作家无法望其项背的。此.. << 查看详细

作者: Jeffrey Richter
Jeffrey Richter是一位在全球享有盛誉的技术作家,尤其在Windows/.NET领域有着杰出的贡献。他的第一本Windows著作Windows 3: A Developer's Guide大获好评,从而声名远扬。之后,他又推出了经典著作《Windows 高级编程指南》和《Windows核心编程》。如今这两本书早已成为Windows程序设计领域的颠峰之作,培育了几代软件开发设计人员。他的每一本新作问世,我们都有理由相信这是一本巨著,我们想要的一切尽在其中。Jeffery 是Wintellect公司的创始人之一,也是MSDN杂志.NET专栏的特邀编辑。现在他正领导.. << 查看详细

[同作者作品]
Windows核心编程[按需印刷]
Microsoft .NET框架程序设计(修订版)
框架设计(第2版):CLR Via C#

译者: 周靖
周靖 资深译者,在计算机行业“浸染”近二十年,涉猎广泛,具有深厚的技术功底和良好的文学素养。早期痴迷于硬件,曾多次被《微型计算机》杂志聘为特约作者。继而潜心钻研程序设计,并在这方面积累了丰富的经验。此后专职从事翻译。其翻译风格严谨、准确、朴实、流畅,深受读者欢迎。代表译著有《Windows Server 2003技术内幕》、《PC性能优化与升级技术》和《Unix技术内幕》等。.... << 查看详细

[同作者作品]
Visual C# 2008从入门到精通
Windows核心编程(第5版) (china-pub 首发)(09年度畅销榜TOP50)(08年度畅销榜TOP50)
Windows Vista官方攻略

目录回到顶部↑

目 录


第Ⅰ部分 CLR基础


第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

前言回到顶部↑

多年来,Microsoft发布了多种技术来帮助开发者构造和实现代码。其中许多技术都提供了一定的抽象,允许开发者更多地思考如何解决他们的问题,更少地思考机器和操作系统本身。下面是一些例子:
·Microsoft基础类库(Microsoft Foundation Class library,MFC)在GUI(图形用户接)编程上方提供了一个C++抽象。使用MFC,开发者可以将精力集中在程序应该做的事情上,不用过多地关注消息循环、窗口过程、窗口类等。
·使用Microsoft Visual Basic 6以及更早的版本,开发者还能通过一个抽象更简单地构建GUI应用程序。这个抽象技术的宗旨与MFC相似,只是针对熟悉Basic语言的开发者进行了优化。另外,它对GUI编程的各个部分的侧重也有所不同。
·Microsoft的ASP(ActiveX服务系统网页)技术提供了一个抽象,允许开发者使用Visual Basic Script或者JScript来构建活动的、动态的网站。ASP允许开发者更多地关注网页内容,更少地关注网络通信。
·Microsoft的活动模板库(Active Template Library,ATL)提供了一个抽象,允许开发者更轻松地创建一些组件,以便由使用多种编程语言的开发者共享。
可以发现,每一种抽象技术的设计宗旨都是使开发者更容易将精力集中在一种特定的开发情形上,比如GUI应用程序开发、Web应用程序开发或者组件开发。如果一个开发者想要建立一个网站,该网站使用了一个组件,那么开发者必须学习多种抽象技术:ASP和ATL。除此之外,开发者必须精通多种编程语言,因为ASP需要Visual Basic Script或JScript,而ATL需要C++。所以,虽然这些抽象技术的目的是为我们提供帮助,但它们仍然要求开发者学习大量知识。而且经常遇到的问题是,多种抽象技术并不是从一开始便设计成相互协作的。所以,开发者还要解决集成问题。
Microsoft为.NET Framework制定的目标就是解决所有这些问题。可以看出,后文提到的每一种抽象技术都是为了简化特定的应用程序开发情形。Microsoft .NET Framework的目标不是为构建一种特定类型的应用程序的开发者提供一个抽象技术。相反,它的目标是为平台或者Microsoft Windows操作系统本身提供一个抽象技术。换言之,.NET Framework为所有类型的应用程序提升了抽象等级。这意味着开发者只需学习和掌握一个编程模型和一套API,不管开发者是用它们来构建控制台应用程序、图形应用程序、网站,还是构建由其他应用程序使用的组件。
.NET Framework的另一个目标是允许开发者使用自己选择的编程语言来工作。现在可以使用一种语言(比如Visual Basic或者Microsoft新推出的C#语言)来构建一个网站及其 组件。
单一的编程模型、API集合以及编程语言是抽象技术取得的重大进步,并极大地帮助了开发者。另一个好消息是,这些特点使集成问题不复存在,从而极大地增强了测试、部署、管理以及版本控制,并提高了代码的重用性,使开发者更容易重新规划其用途。我个人使用.NET Framework已经有几年时间,可以肯定地说,我再也不会回归到过时的抽象技术以及过时的软件开发方式。如果逼迫我那样做,那我情愿改行,因为那样只能引起我痛苦的回忆。事实上,当我回想起以前使用那些技术来进行的所有编程工作,我简直不敢相信我们这些程序员居然忍受了那么长的时间!
开发平台:.NET Framework
.NET Framework由两个部分构成:公共语言运行库(Common Language Runtime,CLR)和Framework类库(Framework Class Library,FCL)。CLR提供了所有类型的应用程序都要使用的编程模型。CLR包括它自己的文件加载器、内存管理器(垃圾收集器)、安全系统(代码访问安全性)、线程池等。除此之外,CLR还提供了一个面向对象的编程模型,它定义了类型和对象是什么,以及它们的行为方式。
Framework类库提供了所有应用程序模型都要使用的一个面向对象的API集合。利用其中包含的类型定义,开发者可以执行文件和网络I/O、调度其他线程上的任务、画图、比较字符串等。当然,所有这些类型定义都遵循CLR设定的编程模型。
Microsoft实际上发布了.NET Framework的三个版本:
·2002年发布的.NET Framework 1.0,包括Microsoft C#编译器的7.0版本。
·2003年发布的.NET Framework 1.1,包括Microsoft C#编译器的7.1版本。
·2005年发布的.NET Framework 2.0,包括Microsoft C#编译器的8.0版本。
本书完全围绕着.NET Framework 2.0和Microsoft C#编译器的8.0版本展开描述的。由于Microsoft在发布新版本的.NET Framework时,会尝试保持相当程度的向后兼容性,所以本书讨论的许多内容同样适用于早期版本。不过,我不会对早期版本特有的一些东西进行任何强调。
.NET Framework 2.0支持Windows的32位x86版本,以及Windows的64位x64和IA64版本。另外,还针对PDA(便携式数据编程)比如Windows和其他小型设备发布了.NET Framework的一个精简版本,名为.NET Compact Framework。2001年12月13日,欧洲计算机制造商联盟(European Computer Manufacturers Association,ECMA)接受了C#编程语言、一部分CLR以及一部分FCL作为其标准。因而形成的标准文档允许其他组织为其他CPU架构和其他操作系统构建这些技术的ECMA相容版本。实际上,本书相当多的内容是关于这些标准的。所以,假如想寻求符合ECMA标准的runtime/library实现,也能从本书获得相当多的帮助。不过,本书重点关注的还是Microsoft如何在台式机和服务器系统上实现这个标准。
Microsoft Windows Vista搭载了.NET Framework 2.0,但之前的Windows版本并没有这样做。要想在更早的Windows版本上运行.NET Framework应用程序,需要手工安装.NET Framework。幸运的是,Microsoft提供了一个.NET Framework重分发文件(redistribution file),并允许程序员随自己的应用程序一起自由地分发它。
相较于之前的任何Microsoft开发平台,.NET Framework允许开发者利用的技术多得多。尤其值得一提的是,.NET Framework真正强调了代码重用、代码专用、资源管理、多语言开发、安全性、部署以及管理的问题。在设计这个新平台时,Microsoft还认为有必要改善当前Windows平台的一些不足之处。下面列出的只是CLR和FCL提供的一小部分 内容。

序言回到顶部↑

我决定让我的儿子Aidan来写这本书的序言。Aidan虽然只有3岁,但从他一出生,就一直在听我讲有关公共语言运行库、C#编程语言以及Framework类库的一切。现在,他必须好好归纳一下平时不经意间接触到的大量知识。有一天,我感觉如果他再听我讲一遍异常处理,肯定会呕吐不已。事实证明我是对的。
既然我是Aidan的父亲,我觉得有必要让他在这篇序言中写一点关于我的东西。在向Aidan解释了什么是序言,以及我想让他写些什么之后,我就让他坐在我的膝上,然后让他开始打字。刚开始的时候,他似乎遇到了许多作家都遇到过的问题,那就是思绪混乱,不知道如何开头。所以我说好吧,我来帮你开个头。但他随即就删掉了我的一些话。作为他的父亲,我对他的这篇小文深感满意。我认为他的想法是天真的,而且真实反映了他对我和.NET Framework的感受。
Aidan Richter
2005年12月19日
序一
CLR之美
“合抱之木,生于毫末;九层之台,起于垒土”,整个.Net大厦建筑的基础技术上讲就是CLR,它不仅仅是.Net的运行环境,也是.Net程序员所看到的操作系统环境、网络环境和设备环境。CLR是庞大而复杂的,不过同样因为这点决定了上层.Net应用的绚丽多彩。
CLR给我们带来了JIT、垃圾回收、MSIL、Meta Data、Application Domain等一系列新的概念,它们共同协作,合力打造了一个与非托管代码完全不同的一个新的开发环境,其中每一个组件如何和谐地与其他组件协作,平稳地运行.Net应用,只有拨开CLR,才能看得清楚。学习和深入了解CLR对于用.Net平台开发高质量的应用和系统软件都有弥足珍贵的重要意义,但如果想深入了解CLR的执行过程,需要跳出贯有的思维方式加以考虑,也就是要采用自下而上的方式分析。要从CLR的执行结果入手分析各种.Net语言的代码如何经过CLR变成程序集。对于多数.Net开发人员而言,面对每天都打交道的这个CLR,就像是一个旅者来到一座没有任何交通指示的繁华城市面前一样,贸然走入无疑会迷失和淹没在这一片繁华之中。
感谢Jeffrey先生毫无保留地把他与CLR团队多年来朝夕相处所积累的精华沉淀到这本书中。全书以极为严格的条理,借助C#语言,循序渐进地通过各种功能表像剖析每一个CLR功能组件,用丰富和翔实的示例启发读者如何写出.Net程序员与CLR和谐奏鸣的高质量软件。
与其他绝大多数.Net书籍围绕某个.Net语言本身不同,Jeff先生更多的是把具体的.Net语言作为一个隐含内容给出(有兴趣的读者可以参考本书的姊妹篇《CLR via C++/CLI》),其中介绍的每个内容更多地围绕着CLR来给出。本书只是用上层开发人员所熟悉的C#语言作为功能描述的入口,通过分析IL来揭示CLR的运行本质。本书清晰而明确地给出了.Net Framework中的关键技术的运行方式,其中很多技术即使在MSDN和.Net Framework SDK中也很难找到详细的介绍,如下内容在书中进行了重点展开:
·.Net Framework的结构是如何设计的?相较于以往的COM时代,在这种设计下开发、使用和部署.Net应用程序有何重大变化?
·一段.Net语言程序是如何转变成IL的?这些IL又是采用何种方式保存,并被CLR提交给不同的运行宿主进程执行的?执行过程中托管代码和非托管代码又是CLR通过何种控制实现的,系统层面的处理器和内存又是如何通过CLR和.Net环境联系到一起。
·为什么要为程序集配置元信息(Meta Data),这些元信息在执行过程中是如何被CLR所使用的?作为应用.Net应用的开发人员,我们如何生成和使用这些元信息。
·开发中使用的各种数据类型是如何被CLR辨识的,之后他们是如何被CLR所管理和组织的,进而为应用的执行提供支持。
·类、各种类成员是如何被CLR拼装的,面向对象技术所采用的封装、继承、多态和各种抽象从.Net语言代码翻译到IL的过程是怎样的,所有的类成员和类方法最后又是如何在CLR的控制下组合成一个个可以执行的实例被执行的。
·异常处理的底层实现是怎么样的?如何实现结构化的异常处理?根据CLR异常实现的原理确定应用该怎么设计,才能更好的捕捉能力所及且有应该处理的异常。
·内存回收机制的原理是如何的?怎样更好的根据该机制的实现原理控制各类对象的使用,保证我们设计的应用轻装前进。
·什么是反射机制?CLR是如何实现的。
·什么是多线程?根据CLR的多线程执行特点,怎样才可以写出高效、可控的.Net多线程应用。
·如何通过接口和范型定义并更好的重用已有算法

书摘回到顶部↑

序言
  我决定让我的儿子Aidan来写这本书的序言。Aidan虽然只有3岁,但从他一出生,就一直在听我讲有关公共语言运行库、C#编程语言以及Framework类库的一切。现在,他必须好好归纳一下平时不经意间接触到的大量知识。有一天,我感觉如果他再听我讲一遍异常处理,肯定会呕吐不已。事实证明我是对的。
  既然我是Aidan的父亲,我觉得有必要让他在这篇序言中写一点关于我的东西。在向Aidan解释了什么是序言,以及我想让他写些什么之后,我就让他坐在我的膝上,然后让他开始打字。刚开始的时候,他似乎遇到了许多作家都遇到过的问题,那就是思绪混乱,不知道如何开头。所以我说好吧,我来帮你开个头。但他随即就删掉了我的一些话。作为他的父亲,我对他的这篇小文深感满意。我认为他的想法是天真的,而且真实反映了他对我和.NET Framework的感受。
评论交流

共有225人开贴评论  367人参与评论  165人参与打分 查看

86人
 52%
用户平均打分
我要写评论 help如何参与评论和打分
25人
 15%
30人
 18%
4人
 2%
20人
 12%

GISY
二级评论员
精彩书评
  
发表于:2006-11-7 22:05:00
李建忠:关于Jeffrey Richter的《CLR via C#, Second Edition》 一书

最近陆续有不少读者朋友写信来询问Jeffrey Richter的CLR via C#, Second Edition 一书译本的问题,也就是Applied Microsoft .NET Framework Programming-Microsoft .NET框架程序设计(修订版)一书第二版的翻译。我想在这里对此问题作一点交待。
  Applied Microsoft .NET Framework Programming确实是可读性和教育性极高的一本.NET技术经典。第二版改名为CLR via C#。由于第一版为我所翻译,某出版社前段时间便和我联系翻译事宜。由于工作比较忙,便委托助理帮我谈。谈了几天后助理告诉我出版社坚持第2版的翻译以“整理费+翻译费”来结算,并且暗示如果我不翻译,那么出版社将找其他人来“整理”我的第1版中翻译的文字。
  所谓“整理费”是指第一版我原来已经翻译的文字,由于同样出现在第2版,因此有“整理”之说,当然“整理”的报酬要远低于“翻译”的报酬,其逻辑在于“出版社认为我已经在第1版中获取了翻译的报酬”。所谓“翻译费”是指新添的文字,从目录判断(原文我没有看到)第2版整个篇幅确实修改不算大,大概100多页新添的东西。
  出版社的逻辑是:既然译者已经在第1版中获取了翻译的报酬,那么第2版同样的文字便应该“奉献出来”,而不应该再领取报酬。我并非一定要计较其中的报酬得失,只是这样的逻辑和名堂让我感到非常可笑。
  为什么我们的出版社总以“无私奉献的雷锋精神”去要求作译者,但实际上却将这种“别人无私奉献所获得的利益”收入自己的腰包?坦白来讲,我也很有奉献精神,也常常体会到奉献的快乐。但是这种在出版社“胁迫”下的“奉献”,我怎么也快乐不起来。如果出版社确实真有奉献精神,那可以在要求译者不收取合理的翻译费用的同时,是不是也应该将第2版的书直接免费赠送给购买了第1版的读者?如果真有这样的出版社,我非常乐意免费翻译。
  在对此“奉献逻辑”感到可笑的同时,我也特意让助理查询《中华人民共和国著作权法》,事实证明法律支持我的看法——还好,中国确立了依法治国的方略。
  自然,我无论如何也不会接受这种“奉献”+“胁迫”的谈判,因此我很干脆地放弃了CLR via C#, Second Edition的翻译,同时正告出版社,未经我的授权,没有理由在我第1版的基础上“整理”,因为我只授权《Microsoft .NET框架程序设计(修订版)》第1版采纳我的译文,没有授权第2版采纳我的译文。我也希望读者能够帮我监督。
  其实有时候感觉去计较这些鸡毛蒜皮的小事情,真的挺损伤自我的高尚情怀和高远理想的——我不知道牛顿在写作《自然哲学的数学原理》,Donald E.Knuth 在写作《计算机程序设计艺术》,Bjarne Stroustrup在写作《The C++ Programming Language》时是否会有这样的出版社,是否会由这些令人惊诧的“奉献逻辑”,是否会斤斤计较于这些事情?
  但是,在当下中国的环境中,分明就是这些事情常常让人很不舒服。我既非圣贤,写译的作品也不敢和这些圣贤大师比肩,但我想,合理的诉求,正当的抗争是必须有的。屈服于这种“奉献逻辑”是放弃自己的公民权利,只会助长不良风气,伤害出版环境,从而伤害整个公民社会(Civil Society)。 [李建忠blog]
回复 ( 5条评论-- 点击查看讨论 )
您觉得呢? 送鲜花 (得14支)  扔鸡蛋 (得0个)

liguorongdream
二级评论员
该会员在china-pub购买过此书
评价等级:  
发表于:2009-12-19 8:20:00
非常感谢作者,非常感谢这本好书,带我走进了.NET圣堂!
这绝对是一本经得起时间考验的经典之作!
我还想推荐一好书《C#和.NET 2.0 实战:平台、语言与框架》,
希望每位.NET程序员不要冷落这两本书!
您觉得呢? 送鲜花 (得0支)  扔鸡蛋 (得0个)

codespy

三级评论员
  
发表于:2009-3-4 20:02:00
看了一下译者的博客(http://transbot.blog.163.com/blog/),这里列出的勘误太多,有近百处翻译问题!这么多的翻译问题,会影响我的阅读流畅感。难道还要让我们在看书的时候,身边必须有计算机,并不时地停下来对照下勘误表,或者在书上写上密密麻麻的勘误?

译者还说”本人负责的是该书1~5章以及11~18章的翻译;其他章节的勘误建议,请发送至编辑信箱。“。不知道这部分的勘误在那里?
您觉得呢? 送鲜花 (得0支)  扔鸡蛋 (得0个)

sundashuang
一级评论员
该会员在china-pub购买过此书 精彩书评
评价等级:  
发表于:2009-2-23 14:48:00
总的来说,这是一本相当经典的书。读此书,让你做的不仅仅只是一个只会敲代码的Programer。而更多的,是了解why。知道.NET更底层的一些运行机制。值得床头收藏.
您觉得呢? 送鲜花 (得0支)  扔鸡蛋 (得0个)

bnbbs

三级评论员
  
发表于:2009-1-4 1:30:00
我要买一本,我觉得,小周同学还是比较负责的,他的博客上把好多勘误都列出来了,应该给予支持和鼓励。。。
您觉得呢? 送鲜花 (得0支)  扔鸡蛋 (得0个)
我要写评论
查看所有评论交流(共225条)