• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
鱼要的是海洋,鸟要的是天空,我要的是自由!
平凡的人不平凡的人生
博客园    首页    新随笔    联系   管理    订阅  订阅

Essential .NET 读书笔记--转

一.前言

去年的这个时候读了Don Box的《Essential .NET Volume 1: CLR》(《.NET 本质论 卷一:CLR》),当时囫囵吞枣似的匆匆读完,没有认真咀嚼大师的思想,有点暴殓天物的感觉。今日又在图书馆拿出这本书,心中有很多体会,也许就像他本人所说,Don Box的书不应该只读一遍的。

在这篇读书笔记中,我将原书的中一些重点摘抄下来,同时对书中的一些观点也会提出自己的思考。好了,废话不说,让我们开始吧。(本人才疏学浅,难免有许多疏忽和错误之处,希望大家能进行指正)

 

二.第一章 CLR是一个更好的COM

1.组件技术强调程序之间的约定(contract),COM之间的组件约定是基于二进制的,同时没有一种标准的描述形式。(受到现实环境所累)

2.COM为什么消亡了?COM是一个编程模型,但是支持它的平台技术太薄弱了,最终使得COM变成了一个理念或编程准则,因此COM时代终结了。

3..NET的3个主要的组成部分:CLR,公共类库,ASP.NET。

4..NET Framework包括2个核心的集成技术:[1] CLR(虚拟机,作为托管代码的宿主,将他们集成到一个单独的OS进程中)[2] Web Services (异构系统集成)

5.CLI包括了:CTS, CIL, 元数据和底层文件。CLI已经提交给了ECMA(C#好像也已经提交给了ECMA了吧,版本是1.0 还是2.0 ?)。目前的CLI实现有:MS CLR和Mono。

6.CLR本质是一个虚拟运行环境,一个加载器,它将你的组件加载入一个OS进程中。

7.CLR是组件软件的一个发展阶段,所有组件之间的约定都是基于逻辑结构的。

8.CLR和Web Services强调组件之间的强类型协定,用来描述组件之间的关系与依赖。有2种关键概念为上述目标提供了基础:[1] 元数据(机器可读,可扩展) [2] 虚拟化。

9.CLR中组件之间的约定具有完全规范的格式(元数据),同时约定根据的是类型的逻辑结构(物理结构等到首次被运行时加载的时候再确定)。这2点与COM的约定完全不同,是对它的重要改进。

10.CLR是类型安全的,一切都是类型,对象或值。这些类型在托管代码在CLR上运行的时候依然存在,并可以被CLR或其它程序所解析。(因为有元数据来描述这些类型)

11.CIL只会包含元数据的引用,这些引用基于名称,而不是位置或偏移量等二进制信息。直到被CLR翻译为本机代码才会确定它的二进制信息。

       12.任何语言只要具有能够发射(Emit)CIL代码和CLR元数据的编译器,就能被CLR 所解析。

13.当程序员面临生产率和可控性的选择时,随着时间的推移,在大多数应用场合,能够让他们拥有更高生产率的技术更有可能胜出。

三.             第二章 组件

1.    CLR模块包含代码,元数据,资源。CLR模块依然是WinNT的PE/COFF的可执行文件的扩展版,它其中的大部分内容作为不透明的数据存放在PE/COFF文件的.text部分中。

2.    4种模块输出种类:exe, winexe, library, module。其中只有module不能独立部署(程序级才是部署的原子单位),即CLR无法直接加载它。

3.    程序集(assembly)是由一个或多个模块所组成的。      

4.    程序集的元数据中包含程序集清单部分(assembly manifest,即.assembly,而不是.assembly extern),对于没有程序集清单的模块(module),CLR只能间接加载。

5.    程序集4部分名称(强名称):Name, Version, Culture, PublicKeyToken。

6.    含有Culture特性的程序集不能含有代码,它们是纯资源程序集(又称为satellite程序集)。也就是说包含代码的程序集都是culture-neutral的。

7.    强名称程序集会把Public Key附到程序集中。

8.    CLR总是按需加载程序集。(Good Feature)

9.    Assembly.LoadForm():直接通过程序集加载器加载(通过位置加载),完全忽略任何版本策略。

Assembly.Load():先通过程序集解析器解析,再通过程序集加载器加载。

10. 版本策略只能用在强名称程序集上边。

11. 版本策略的3个级别:应用程序策略(app.config)=>发行者策略(整合的资源)=>机器策略(machine.config)。其中要注意发行者策略一般用于组件,来标明组件那些版本可以互相兼容。(Good Feature)

12. 查找程序集文件的策略:[1] GAC => [2] CodeBase Hint (href指定位置) =>[3] Probing(AppBase目录和其子目录)

posted @ 2005-11-29 10:15  伊凡  阅读(454)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3