2011-06-13 70 views
2

我前几天有人问我是否用Java开发过程。当我说我的技能在.NET Framework技术中时,他说这些是恶魔的化身。我不想打开古老的辩论,但他说了一件我以前没有听说过的话,并想知道是否有人可以说出一些看法。.NET Framework和COM

他说.NET框架是建立在COM之上的。这是真的?有人可以扩大吗?

+2

http://stackoverflow.com/questions/2280639/is-net-all-comment-underneath – SLaks 2011-06-13 20:00:44

+0

在CLR中恰好有*一个* COM接口。您在异常堆栈跟踪中获得的文件+行号信息由知道如何读取.pdb文件的COM类生成。 Windows中有很多COM正在使用。框架(与CLR截然不同)具有包装类,使其看起来毫不费力且易于使用。就像Java一样。 – 2011-06-15 01:31:07

回答

0

他错了。

但是,.Net可以将互操作。

0

这是不正确的,没有什么可以展开的。 .net框架可以与COM互操作,但就是这样。你的朋友应该坚持Java!

3

Windows上的部分框架是在com上实现的(也就是说,实现使用了COM对象) - 在.NET的每个新版本中,这种情况越来越少。但是,如果您正在讨论编译器和运行时(而不是.NET库和使用.NET语言编写的代码),我相信这些是用C++编写的,而且可能使用COM(再次,在Windows上)。

还有一些.NET的替代实现,最着名的是Mono,它可以在Linux/Mac/Andriod和Windows上运行。由于大多数这些平台都没有COM,因此您可以看到,.NET根本不需要使用COM。

这只是如何一些的MS .NET框架已经实施。

0

重要吗?是的,大多数Windows API(除了win32/64 API)都是COM。这包括大多数控件.NET在一个漂亮的托管包和所有的DirectX接口(WPF广泛使用)中为你打包。

那么是什么?

0

确实,.Net最初是建立在COM之上的。实际上,框架中的许多API调用可以直接追踪到COM对象或win32 API层的调用。认识到这只是一个实现细节很重要。查看mono的开源版.Net。它显然不是建立在COM之上的,它被认为是编写Android,Mac,Iphone和Linux应用程序的绝佳平台。

请记住,在宗教战争中没有赢家。

0

我想这取决于他的意思是“建立在COM之上”。在这个意义上,框架提供了一个内置的桥接来托管和调用COM对象,以及多个COM接口作为运行时本身的一部分,是的。在每个.NET对象都是COM接口的意义上,当然不是;我想象虚拟机本身不是建立在COM之上的。

当推动推动时,答案是“无关紧要” - 如果框架满足您的需求,性能足够,并且您对库和开发工具感到满意,那么它的基础应该是什么如果它被破坏或者当你搞乱内部时,这两者(我想)都不是这样。

0

不正确。 .NET能够与COM库进行交互,但不依赖于它们,完全依赖于它们。此外,任何对任何事物感到强烈的人都应该被怀疑。即他/她的意见应该以一粒盐来进行。

另一个...你的同事对COM有什么反应?当然,现在有更好的办法可以做事,但COM在当时是一个好主意,而且在未来几年内COM将会继续存在。

0

不,不是。您可以与它互操作并访问诸如Excel和Outlook之类的程序,但它不是基于它构建的。当你进入商业世界时,你的朋友会觉得有些粗鲁的觉醒,并意识到它很多是.NET(尽管当然也有很大一部分是Java和本地语言)。

0

这是一个非常简单的观点。

有关技术细节,@SLaks在评论中引用的dup问题说明了这一切。 .Net的目的是在Windows(整个操作系统,而不仅仅是COM和DCOM部件)上解决复杂的技术问题要容易得多 - 目标是开发速度和代码的简单性。就像Java旨在为跨平台开发所做的一样。

如果你看看C#(最常见的.Net语言)与Java的最新发展轨迹,那么越来越难以争辩说Java作为一种编程语言前进了,尽管它确实曾经是。我总是对栅栏两侧的这种狂热感到怀疑。无知引起蔑视。