日期:2014-05-19  浏览次数:20970 次

COM组件和.NET组件有什么区别?
如题,希望能解释的清楚点

------解决方案--------------------
COM组件是以前微软推荐的东东

.NET组件是现在微软推荐的东东

都可以实现组件的重用,最大的区别是,现在的.NET组件解决了版本问题,也就是说允许多个不同的版本的同一组件在一台机器上安装,而这个是以前COM组件的致命问题
------解决方案--------------------
差别太大了,我说几点:
1.数据结构:COM组件是二进制的数据,.Net组件使用的是IL,因此需要.Net Framework.
2.内存管理:还记得COM的AddRef和Release吗?:), .Net是托管的,因此有GC
3.Metadata: .Net的元数据包含了丰富的类型信息,因此你或者Compiler可以用反射提供诸如智能提示,方法调用等等一系列的功能
4.安全:.Net提供强类型程序集,需要Public Key, 语言,程序名和版本号来唯一确定某个特定的 .net组件,查找组件的位置有一套机制。 COM仅仅依靠注册表和dll文件名来确定组件,因此,DLL Hell的问题出现了 :)
还有很多,呵呵,最本质的还是存储结构和运作方式上的不同
------解决方案--------------------
com 是为实现二进制复用的一种技术,windows操作系统是多任务的,也就有不同应用程序之间交互的问题,一开始windows采用dde方式,后来改用ole也就是com的前身,在发展就是com ,之后又是com+ , 再就是 .net.
因为是为了不同的应用程序通讯,而不同的语言开发的程序模型是打不相同的,例如同样是c++
vc 和 bc 类的实现方式就不一样。所以采用接口调用。
com 是非常复杂的技术,了解它可以看看《com 本质论》和《com 原理》
.net 组件和com组件不仅是版本控制问题,有专家说.net是更好的com,我觉的.net与com的最大区别在于.net是自描述的,也就是说你拿到一个.net 的dll ,这个dll就包含了它所提供的类型信息的标准描述。所以使用者直接引用即可。

而com是同一种复杂的技术达到使用者来了解一个com组件具体提供了什么方法,什么属性,脚本语言可以使用自动化方式,而象c++等则通过tlb等来了解更简单