2009-04-27 12 views

Respuesta

17

Es una mezcla. Obviamente, cosas como winforms son en gran parte envoltorios alrededor de la funcionalidad Win32 (o una combinación de ambos mundos), pero WPF es mucho más administrado (en términos del código de control real; bajo el capó, como notas de Mash, puede usar DirectX para el representación). Del mismo modo, elementos como el acceso a archivos/redes son (por necesidad) envoltorios alrededor de los objetos del SO, al igual que los objetos de bloqueo no administrados como Mutex, pero muchas otras cosas se administran al 100%.

Así que no es una respuesta simple.

(corregir) Además, tenga en cuenta que ".NET" es un término muy vago; Compact Framework, Micro Framework, Silverlight, etc. pueden tener diferentes implementaciones no win32.

+3

Es discutible si WPF es mucho más administrado, mientras que internamente depende en gran medida de DirectX ... – Mash

+0

@Mash - Buen punto –

+0

Así porque .NET depende en gran medida de que win32 haga su trabajo, nunca podría "reemplazarlo" como el WINAPI primario, ¿verdad? ¿O ese es el objetivo final? – tyler

5

En algunos casos (¿la mayoría, tal vez? No he reflejado todo el marco) el .NET framework hace llamadas a win32. La mayoría de los controles son simplemente controles win32 envueltos con algunas características nuevas.

6

Una aplicación .NET es solo otro proceso de Win32, por lo que no hay magia y obviamente va a utilizar el sistema operativo de subrayado. Incluso las bibliotecas .NET usan Win32 en gran medida.

Ejemplos:

  • gestión de memoria es manejada internamente para código administrado, pero para el proceso en sí es manejado simplemente como cualquier otro proceso Win32.

  • Actualmente, los hilos gestionados son implementados como hilos del sistema operativo.

3

Sí, llama a las funciones de win32 internamente. Por ejemplo, el método OpenRead en la clase de archivos contiene:

return new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read); 

y con el tiempo se llame:

SafeFileHandle handle = CreateFile(lpFileName, dwDesiredAccess, dwShareMode, securityAttrs, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile); 

que es una función nativa de Win32, en el fondo en el método.

1

Llama a .NET API como lo hacen todas las aplicaciones de Windows. Pero es más que un simple contenedor o mapa, se describe con más precisión como una abstracción.

6

Actualización: me di cuenta de que respondí la pregunta incorrecta (dijiste el tiempo de ejecución no la biblioteca de clases) ... ¡bueno, de todas maneras mantendré el guff abajo!

Depende de la parte de la biblioteca:

  • biblioteca System.XML no se uso MSXML
  • System.Reflection voluntad no, ya que es todo a base de IL Sistema
  • .El texto lo hace y no lo hace. Hay algunas llamadas "rápidas" para la manipulación de cadenas
  • System.Text.RegularExpressions no, al igual que el espacio de nombres XML todo es personalizado utilizando una clase interna RegexRunner.
  • System.Diagnostics utiliza llamadas kernel32.dll como CreateProcess
  • System.IO espacio de nombres hace PInvoke también
  • System.Threading utiliza las llamadas a métodos internos que con el tiempo (dentro de las CLR) Métodos de llamada WinAPI
  • sistema. Windows.Forms es una mezcla, pero finalmente utiliza GDI
  • System.Net (NetworkStream) utiliza ws2_32.dll como WSARecv (..)

Eso es sólo de tocar el violín con reflector. Obviamente, al ser un servidor COM, Microsoft CLR también depende en gran medida de win32.

+0

¡Genial! ¡Gracias! – abatishchev

2

Mono es una implementación del tiempo de ejecución de .NET, y ciertamente no se asigna a las llamadas de función Win32 (al menos en Linux)

supongo que su pregunta se refería a la implementación de Microsoft del tiempo de ejecución de .NET.

Cuestiones relacionadas