言い換えれば、.NET Frameworkは最終的にどこかで呼び出しを行って作業を完了しますか?または、Microsoftは.NETFrameworkでwin32ライブラリのすべての機能を完全に再作成しましたか。
ありがとう!
ミックスです。明らかに、winformsのようなものは主にWin32機能(または両方の世界の組み合わせ)のラッパーですが、WPFははるかに管理されています(実際の制御コードの観点から;内部では、Mashが指摘しているように、DirectXを使用する場合がありますレンダリング)。同様に、ファイル/ネットワークアクセスのようなものは、OSオブジェクトのラッパーであり、アンマネージドロックオブジェクトのようなものも同様ですMutex
が、他の多くのものは100%管理されています。
したがって、それは単純な答えではありません。
(編集)また、「。NET」は非常にあいまいな用語であることに注意してください。Compact Framework、Micro Framework、Silverlightなどには、win32以外のさまざまな実装がある場合があります。
.NETアプリケーションは単なる別のWin32プロセスであるため、魔法はなく、明らかに下線付きのオペレーティングシステムを使用します。.NETライブラリでさえWin32をかなりの程度使用しています。
例:
メモリ管理はマネージコードに対して内部的に処理されますが、プロセス自体については、他のWin32プロセスと同じように処理されます。
現在管理されているスレッドは、OSスレッドとしても実装されています。
更新:私が間違った質問に答えたことに気づきました(クラスライブラリではなくランタイムと言いました)...まあ、とにかく以下のガフを維持します!
ライブラリの部分によって異なります。
それはReflectorをいじっただけです。明らかにCOMサーバーであるため、MicrosoftCLRはwin32にも大きく依存しています。
場合によっては(ほとんどの場合、おそらく?フレームワーク全体に反映されていません)、.NETフレームワークはwin32を呼び出します。ほとんどのコントロールは単純にwin32です-いくつかの新機能でラップされたコントロール。
はい、内部でwin32関数を呼び出します。たとえば、FileクラスのOpenReadメソッドには次のものが含まれます。
return new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read);
そしてそれは最終的に呼び出すでしょう:
SafeFileHandle handle = CreateFile(lpFileName, dwDesiredAccess, dwShareMode, securityAttrs, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile);
これはwin32ネイティブ関数であり、メソッドの奥深くにあります。
Monoは.netランタイムの実装であり、win32関数呼び出しにマップされません(少なくともLinuxでは)
あなたの質問は、Microsoftによる.netランタイムの実装に関するものだったと思います。
すべてのWindowsアプリケーションと同様に、.NETAPIを呼び出します。しかし、それは単なるラッパーやマップではなく、抽象化としてより正確に記述されています。