什么是.NET与Windows内核/操作系统的关系?其他操作系统

时间:2011-09-15 09:52:03

标签: c# .net c++ winapi

我对.NET究竟是什么感到困惑。我是一名计算机科学专业的学生,​​他在C ++和C ++中完成了很多Win32(WinAPI)编程。非常了解Win32功能如何与COM& amp; Windows内核本身。

但.NET适用于所有这些?

  • 具体来说,如果Win32是用C编写的API,那么什么是.NET?它是用C编写的API吗?它只能在像Win32这样的Windows操作系统上运行吗?

  • .NET是否运行在Win32 API之上?例如,一个.NET函数showWindow()(显然我明白了)在后台调用Win32函数来显示窗口,还是直接转到内核来执行此操作?或者.NET是Java虚拟机吗?

  • .NET是否直接与Windows内核交互(如Win32)&与COM对象交互? .NET是否在沙盒中运行?不允许某些操作系统访问某些操作系统区域?

  • 我可以使用Win32 API(如c / c ++,VB,Perl)编写不同语言的代码。我可以在.NET中编写哪些语言?

  • 这真是让我难过的。我听说用.NET编写的Web应用程序?什么,怎么样,哇?用什么语言写的? .NET是否运行在IE之上? .NET Web应用程序可以在Firefox或Safari(MacOS)上运行吗?像.NET applet这样的.NET Web应用程序,你也得到了.NET驱动程序。

5 个答案:

答案 0 :(得分:11)

一些简短的答案让你继续前进:

  

具体来说,如果Win32是用C编写的API,那么什么是.NET?它是用C编写的API吗?

.NET由多个部分组成。一部分称为CLR。该部分是用C ++,C ++ / CLI和一些程序集编写的。这对运行.NET应用程序负责。 Just-In-Time(JIT)编译器是其中的重要组成部分。

然后是包含的库。这些主要是用C#编写的,但其中一些可能是用C ++ / CLI编写的。您实际上可以获得许多包含的库的源代码。

  

它是否仅在win32等Windows操作系统上运行?

也不是,有一个在Linux上运行的端口(称为Mono),有一个在WIndows Phone 7上运行的版本,然后还有可以在Mac上运行的Silverlight ....

  

.NET是否在win32 API的ontop上运行?

在很大程度上,是的,虽然在某些地方它已经开始取代常规的WinAPI(当然微软计划在一个阶段尝试和.Net-ify大部分或全部的WinAPI)。我不打算用它编写驱动程序,你仍然会使用常规的C / C ++与Kernel API接口。

这些库确实调用了win32 API的许多不同部分。这是与其他Windows应用程序平滑互操作所必需的。

  

.NET是否与... COM对象交互?

是的,使用COM互操作。

  

.NET是否在沙盒中运行?不允许访问某些操作系统区域?

运行时的某些变体可以沙箱化(Silverlight,WPF XBAP)。拥有UnmanagedCode权限的.Net应用程序也可以调用用非托管C ++编写的代码,并且可以完全不受限制地访问系统(尽管如此,你仍然必须遵守文件ACL这样的小麻烦)。

  

我可以使用win32 API编写不同语言的代码,例如c / c ++,VB,Perl。我可以在.NET中编写哪些语言?

.Net是一个带有JIT编译的运行时库。您可以使用许多基于框架构建的语言。 JIT编译也不是必需的 - 您仍然可以编译应用程序以定位特定的CPU架构。

  

我听说过用.NET编写的Web应用程序?什么,怎么样,哇?用什么语言写的? .NET运行在IE上吗? .NET webapps可以在Firefox或Safari(MacOS)上运行吗?

这些应用程序可以用任何.Net语言编写,但实际上大多数应用程序都使用C#和VB.Net。你一定听说过ASP吗?好吧,ASP.NET(和它的姐妹ASP.NET MVC)是下一代 - 它运行在服务器上,并像许多其他服务器端语言一样呈现HTML + javascript。您还可以选择在客户端上运行Silverlight,它可以在浏览器内外运行。 Silverlight绝对适用于Firefox,Safari和Chrome。

答案 1 :(得分:7)

  • .NET是CLI VM的MS品牌;有其他平台的CLI VM;主要是“单声道”;然而,即使.NET比win32更宽,因为.NET的版本存在于XNA(xbox 360),移动设备(CF),甚至更小的设备(MF),浏览器(SL)和手机(WP7等)。 .NET有时也被用作的名称,而的大部分是用C#编写的。在Windows 8中,还有WinRT会使事情进一步混淆。
  • (也见上文)两者兼而有之;它有需要操作系统功能的互操作(P / Invoke),但也可以自我支持。
  • 它通常是一个VM,所以是的,它是一个沙盒;请注意,存在一些编译器(单声道AOT)直接编译为本机代码,例如ARM for iOS设备(请参阅:MonoTouch)
  • CLI编译器编译成IL;有许多 CLI编译器(和运行时,用于动态语言)。 IL根据需要通常 JIT'd到本机代码,但可以提前完成(NGEN),或者根本不做(MF是IL解释器)
  • “web应用程序”有可能指的是服务器部分;这个网站有一个C#/。NET服务器实现。还有Silverlight和XBAP用于浏览器内客户端体验。 Silverlight适用于多种浏览器,月光(单声道版本,适用于非Windows平台)。

答案 2 :(得分:1)

.NET有几个部分。

  • 运行时。这是用C(AFAIK)编写的 - 它是.NET应用程序运行的。有一个垃圾收集器。这是与Windows内核交互的内容。
  • BCL(基类库)这是一组.NET库。其中一些是COM上的包装器。早期版本的COM包装器比后者多。
  • CL / IL(Common Lanaguage / Intermediate Language)。这是一种低级语言(类似于Java字节码)。大多数.NET语言都编译为此,这就是运行时执行的内容。

微软已将.NET的部分内容纳入标准 - 其中部分内容已通过Mono项目为Linux实现。

您可以使用pInvoke(平台调用)使用.NET与COM进行交互。在这方面,它不是沙盒。这意味着您可以使用.NET调用任何PE样式的可执行文件。当然,有无数语言可以编译成IL(称为.NET语言) - 最着名的是C#,VB.NET和F#,但是有python(Iron Pyton),COBOL等等的实现。

对于Web应用程序 - 在IIS Web服务器上运行有几个Web框架(ASP.NET和ASP.NET \ MVC是Microsoft创建的)。 .NET不会在浏览器中运行,而不是本机运行,但服务器会生成浏览器使用的HTML。与所有其他Web应用程序一样,如果以这种方式开发,它们可以在所有浏览器上运行。

您可以使用插件在浏览器中使用.NET(Silverlight和MoonLight是最知名的)。

答案 3 :(得分:1)

.NET Framework包含一个运行时引擎(JIT / Native Compiler),并且有大量主要使用C#编写的库。

这允许使用公共语言基础结构(CLI是开放式规范)开发的语言位于框架上,因为每种语言的编译器将代码编译为.NET运行时引擎执行的MSIL(Microsoft中间语言)。 p>

目前,Novel正在开发Mono,这是一个用于.NET CLI语言的跨平台运行时引擎,但它仍然很早,大多数.NET 3.5规范都已实现。

就“网络应用程序”而言,在ASP.NET中开发的应用程序都是服务器端,并向浏览器提供HTML和javascript,以试图模拟一些WinForm样式的操作。

但Silverlight是非IE浏览器的浏览器插件,它包含.NET Runtime引擎和库的缩减版本,后者又可以在本地计算机上执行用.NET CLI语言编写的应用程序。

答案 4 :(得分:0)

只是你可以把它想象成win32 API的包装“实际上就是它!” 它也是将程序员与旧API及其问题分开的完整框架

它有像java这样的运行时,它能够在多个平台上工作

当然所有这些都在Windows API的

之上

这是一篇关于dot net的简单文章 http://www.codeproject.com/KB/dotnet/allaboutnet.aspx