多年来,我一直是Juval Lowy在.NET开发中教学和指导方面的崇拜者。他还写了我最喜欢的书之一:Programming .NET Components。
然而,在最近的DotNet Rocks播客(2010年1月)中,当谈论WCF/COM和.NET时,他发表了一些让我非常吃惊的评论:
Juval Löwy: ..... 在.NET中,每个类都是一个COM对象。我们知道这点。 实际上,它比COM更强大,因为我们有git编译,垃圾回收,安全性栈等等。
Carl Franklin: 嗯,你应该澄清一下。我的意思是,不是每个对象都是COM对象。每个对象具有COM对象的功能,但.NET Framework并不是一个COM库。
Juval Löwy: 不,不是这样的。首先,.NET实际上是建立在COM之上的。它下面全部都是COM。
然后,在Carl Franklin要求对此评论进行澄清之后:
Carl Franklin: 是的,我明白了。我的问题是.NET是建立在COM上的吗?
Juval Löwy: 当然,全部都是COM。
Carl Franklin: 不。我知道它们交织在一起并且是必需的,但当你创建一个.NET对象时,你并没有创建一个COM对象。
Juval Löwy: 你创建的是.NET对象,但我所说的是.NET是建立在COM之上的。.NET底层都是C++和COM。
Carl Franklin: 确实是C++,但你没有通过COM接口注册COM对象。不是所有那些东西。
Juval Löwy: 但是,有些东西在底层使用了COM,但这并不重要。忘掉它是如何制作的。
你怎么看待这些评论?
尽管我理解(并已确认)一些系统程序集是用非托管C++编写的,但也可以说它们全部都“在底层使用了COM”吗?
我原本认为完全有可能编写符合.NET CLI标准的C++程序集,并且与COM/ATL/ActiveX毫无关系?
这是有关该播客的PDF转录。请参阅第7页。