换句话说,.NET框架最终会在某处调用以完成其工作吗?或者Microsoft是否在.NET框架中完全重新创建了win32库的所有功能。
谢谢!
答案 0 :(得分:17)
这是一个混合。显然,像winforms这样的东西主要是围绕Win32功能(或两者兼而有之)的包装,但是WPF管理得更多(就实际控制代码而言;在引擎盖下,正如Mash所说,它可能会使用DirectX来实现渲染)。同样,像文件/网络访问这样的东西(必要时)围绕操作系统对象包装,就像Mutex
这样的非托管锁定对象 - 但许多其他东西都是100%管理的。
所以这不是一个简单的答案。
(编辑)另外 - 请记住,“.NET”是一个非常含糊的术语; Compact Framework,Micro Framework,Silverlight等可能有不同的非win32实现。
答案 1 :(得分:6)
.NET应用程序只是另一个Win32进程,因此没有任何魔力,显然它将使用下划线操作系统。甚至.NET库也在很大程度上使用Win32。
示例:
处理内存管理 内部用于托管代码,但是用于 过程本身只是处理它 像任何其他Win32进程一样。
目前管理的主题是 也作为操作系统线程实现。
答案 2 :(得分:6)
更新:意识到我回答了错误的问题(你说运行时不是类库)...哦,不管怎么说,我会把guff保持在下面!
这取决于图书馆的部分:
这只是摆弄着Reflector。显然,作为COM服务器,Microsoft CLR也非常依赖win32。
答案 3 :(得分:5)
在某些情况下(大多数情况下,也许?我还没有在整个框架中反映出来).NET框架会调用win32。大多数控件都只是win32-controls包含一些新功能。
答案 4 :(得分:3)
是的,它在内部调用win32函数。例如,File类中的OpenRead方法包含:
return new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read);
最终会调用:
SafeFileHandle handle = CreateFile(lpFileName, dwDesiredAccess, dwShareMode, securityAttrs, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile);
这是一个win32本机函数,深入到方法中。
答案 5 :(得分:2)
Mono是.net运行时的一个实现,它肯定不会映射到win32函数调用(至少在linux上)
我猜您的问题是指.net运行时的Microsoft实现。
答案 6 :(得分:1)
它确实像所有Windows应用程序一样调用.NET API。但它不仅仅是一个简单的包装器或地图,更准确地描述为抽象。