- 热门文章:
- · 获取指定IP的终端的MAC地址
- · 网络传输(FTP)问题
- · Paint.NET: An Open Source GDI+ App Likes Photoshop
- · 看到有人用 WebClient来下载, 发篇用 WebRequest 实现有进度下载的吧.
- · 树形控件TreeView的序列化
- · 使用javascript+XML实现分页
- · 使用Control.Invoke处理多线程应用程序界面
- · WEB页面TreeView的应用-(得到所有选中的节点)
- · DotNetNuke(DNN)
- · 枚举器模式(Enumerator pattern)
- · 用ASP.NET 1.1 新特征防止Script攻击
- · 关于ASP.Net中的时间处理
《Essential .Net》读书笔记 - Chapter 1
Chapter 1:
1. 组件技术主要强调的是独立开发和部署程序之间的协定(contract,就是说好怎么做就要怎么做)。COM是M$首次尝试将这些约定规范化。COM出现之前,约定仅仅表现为简单的函数入口,于是COM从以前的世界跨出了一大步,是个重大的进步,它将动态加载代码和类型系统以相当一致的方式有机地结合在一起。
2. COM是编程模型,也是支持的平台技术,但是它缺乏一个稳固的平台技术,因此,COM技术面临终结。
3. 对于约定描述,M$定义和 支持的COM支持格式不是一个,而是两个:接口定义语言(Interface Definition Language,IDL)和类型库(type library,TLB)文件。但是无法确定这两种格式谁是“权威”或“标准”,这是主要问题一。
4. 还有,COM缺乏扩展性。MIT小组上世纪90年代初就开始研究了一种新的编程模型、它基于现在被称为“AOP(面向方面编程)”的编程思想。后来的EJB就是这个演变而来的。遗憾的是,MTS小组没有依赖于任何一个COM约定格式。随着VB的推出,MTS小组的研究成果宣告死亡。
5. COM组件约定是基于类型描述的。这个约定是物理的(physical),基于二进制的,因此对组件间的调用方式要求非常严格。最后组件的约定最终只是在内存中形成堆栈结构的协议,根本没有描述语义的内容。这样的话,版本控制也是非常大的问题了。精确要求太高能产生高效的代码,但是也就出现了难以接受的不可靠性。
6. 为了处理COM约定及其定义所引发的问题,COM小组和MTS小组决定开发一个新的组件平台,其命名:COM3 à COR(Component Object Runtime) à URT(Universal Runtime) à CLR(Common Language Runtime)。
7. COM和CLR的唯一共同点:组件间的约定是基于类型的。
8. CLR中组件之间的约定:使用“元数据(metadata)”。元数据是机器可读的(machine-readable),而且形成规范。而且可以使用“定制属性(Custom Attribute)”可以轻易扩展元数据(其实在《Applied M$ .NET Framework Programming》——后称《Applied》——一书中,Richter建议把这个理解为一串被写入的被序列化的二进制数据,需要得到时再反序列化出来)。
9. CLR约定本身是被描述成为类型的逻辑结构。CLR不会察看内存中的表现形式,事实上内存中的内容直到运行时才被首次加载,然后再计算成员的实际地址/偏移量等。(我的理解是:这种约定是被“读出来”的,不是被“判断出来”的,就好比直接C&P文本而不是拿着“纸板书”再OCR出来,OCR要求文本的精度很高。其实这个理解也蛮牵强的L)。由于这样的“载入延迟”,这样的解析必须到实际部署时才能判断,CLR为了解决这一点,让组件几乎不包含机器码,使用公共中间语言(Common Intermediate Language)来做到这一点(也被称为IL,MSIL)。
10. 由于把本地代码的生成推迟到了实际运行阶段,因此对于IA-32/Pentium架构到IA-64/Itanium架构发展,CLR显得意义非凡(其余诸如可以得到“针对机器(指令集)”的优化等可以再《Applied》一书中得到解释)。
下一篇:获取指定IP的终端的MAC地址 >>
相关文章:
- · javascript实现的数据表格:冻结列、调整列宽和客户端排序
- · [常见问题]cookie使用1.Page与HttpContext的Request、Response
- · 怎样在页面和页面的用户控件进行交互
- · webform页面间传值的特殊方法
- · 怎么直接建立一个DataTable并且为之添加数据
- · 我的第一个Asp.Net程序
- · 如何把数据放到web不能访问的文件夹中并给用户下载?
- · How to handle the concurrency problems on ASP.Net Database
- · 后台动态设置前台标签内容和属性
- · ASP.NET中让同一个页面不同的文本框回车响应不同的事件
- · 认识ASP.NET配置文件Web.config
- · 将ArrayList中的ListItem绑定到DropDownList中去
- · 安全存放web项目数据库连接字符串
- · 分享:Project级别的权限控制
- · Solidworks二次开发—06—在装配体中添加配合
- · 在Repeater中嵌套使用Repeater
- · 一个简单的加密/解密方法
- · 加入身份验证信息的SMTP mail发送
- · webconfig的设置节点说明
- · 现有的Web打印控制技术分成几种方案
- · 一段实现DataGrid的“编辑”、“取消”功能脚本[无刷新]
- · WEB图片高清晰浏览同打印
- · Tangram与软件的组合构造
- · solidworks二次开发-04-修改数据
- · Solidworks二次开发-05-装配体中插入零部件
- · solidworks二次开发-03-访问特征数据
- · solidworks二次开发-02-用来访问特征的两个API
- · solidworks二次开发-01-录制一个宏
- · 有关于web播放器的列表播放问题
- · Microsoft User Interface Process Application Block 研究(3)
- · ASP.NET中使用IFRAME建立类Modal窗口
- · 挤压造型Extrusion的节点说明和应用实例
- · .net 里面 protected private 的变量也可以访问
- · 怎样得到一个系统盘的全名,不是字符,是全名,如:本地磁盘(C:)?
- · ASP.NET中新的代码编译功能(三)
- · ASP.NET中新的代码编译功能(二)
- · ASP.NET中新的代码编译功能(一)
- · asp.net里,一个小的自定义错误显示
