多年来,我一直是Juval Lowy在.NET开发方面的教学和指导的崇拜者.他还写了我最喜欢的书之一:Programming .NET Components.
然而,在最近的DotNet Rocks播客(2010年1月)讨论WCF/COM和.NET时,他发表了一些令我惊讶的评论:
JuvalLöwy: ..... 在.NET中,看,这里的每个类都是COM对象.我们知道.事实上,它远远超过COM,因为我们有git编译,我们有垃圾收集,我们有安全堆....
卡尔富兰克林:嗯,你应该澄清一下.我的意思是,每个对象都不是COM对象.每个对象都具有COM对象的功能,但.NET Framework不是COM库.
JuvalLöwy: 不,不.首先,.NET实际上是建立在COM之上的.这都是COM下面的.
然后,在卡尔富兰克林要求澄清这一评论之后:
卡尔富兰克林:是的,我明白了.我的问题是基于COM构建的.NET?
JuvalLöwy:当然,所有COM都在下面.
Carl Franklin:不,我知道它是交织在一起的,而且是必需的,但是当你新建一个.NET对象时,你并没有创建一个COM对象.
JuvalLöwy:你正在创建一个.NET对象,但我所说的只是.NET构建在底层.这都是C++和COM.
Carl Franklin:它是C++,但你没有通过COM接口注册COM对象.除非你专门做到这一点,否则不是全部.
JuvalLöwy:但有些东西在下面使用COM,但这不是重点.忘记它是如何制作的.
你怎么看这些评论?
虽然我理解(并且已经确认)某些系统程序集是用非托管C++编写的,但是它们是"所有COM下面"也是有效的吗?
我是在假设完全可以编写与COM/ATL/ActiveX完全无关的.NET CLI兼容的C++程序集?
以下是相关播客的PDF文字记录.见第7页.