.net - .NET Framework 对 Windows API 的依赖程度如何?

标签 .net windows unmanaged native

我知道一些 .NET Framework 库 (FCL) 包装了 Windows API 调用,但我不知道有多少。所有的?大部分?就一点点?

假设我仅使用托管代码在 C# 中编写了一个典型的 winforms 业务应用程序。我的“托管”应用程序中有多少实际上是“非托管”的?

最佳答案

Let's say I write a typical winforms business application in C# using only managed code. How much of my "managed" application is really "unmanaged" under the covers?

在 Windows 窗体中,几乎所有内容都是托管 Windows API 的精简包装器。 Windows 窗体控件甚至通过 Handle property 公开其 native 控件句柄.

也就是说,如果您使用 WPF,例如,更多的底层逻辑是用托管代码编写的。当然,在某种程度上,事情总是由操作系统决定——但框架的大部分内容(WPF、WCF 等)都是用托管代码编写的更高级别的抽象,构建在围绕 native API 的较低级别包装器之上。

话虽如此,托管代码与原生核心的级别差异很大,具体取决于所讨论的类型。不过,这样做的美妙之处在于,使用 .NET,您真的不必关心底层实现是 native 实现还是托管实现,只需关心它是否是需要通过 IDisposable 或类似。

关于.net - .NET Framework 对 Windows API 的依赖程度如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6751574/

相关文章:

windows - 如何使用 PHP 在 Windows 上运行这些 Unix 类型的命令

c# - 处理不同的非托管整数大小

c# - 在未安装 .NET 时,托管应用程序是否显示有意义的消息框?

.net - 确定 dll 的 .NET Framework 版本

windows - 关闭事件对象是否会导致等待该对象的线程唤醒?

ruby-on-rails - 我正在 Linux 上使用 Ruby on Rails、mongoDB、JSON 开发一个网站。 Windows/Mac 用户是否会遇到任何基于平台的问题?

visual-c++ - SandcaSTLe、/doc 和非托管 C++

c# - 为什么我应该使用 continue 而不是空的 if 语句?

c# - 寻找错误版本的 Newtonsoft.Json.dll 的程序集

.net - 依赖注入(inject) - 分层应用程序