significa que propiedad palabras lenguaje hacer for cómo comandos codigos claves c# .net performance extern modifier

que - propiedad static c#



¿Cómo funciona extern en C#? (4)

Considere leer la sección 10.6.7 de la especificación de C #, que responde muchas de sus preguntas. Aquí reproduzco parte para su conveniencia:

Cuando una declaración de método incluye un modificador externo, se dice que ese método es un método externo. Los métodos externos se implementan de forma externa, generalmente utilizando un lenguaje distinto de C #. Debido a que una declaración de método externo no proporciona una implementación real, el cuerpo del método de un método externo simplemente consiste en un punto y coma. Un método externo puede no ser genérico. El modificador externo se usa normalmente junto con un atributo DllImport, lo que permite que los DLL (bibliotecas de enlace dinámico) implementen métodos externos. El entorno de ejecución puede admitir otros mecanismos mediante los cuales se pueden proporcionar implementaciones de métodos externos. Cuando un método externo incluye un atributo DllImport, la declaración del método también debe incluir un modificador estático.

¿Cómo alguien aprovecha el atributo externo?

  • Escriba su código en el idioma no administrado de su elección.
  • Compílalo en una DLL, exportando el punto de entrada de su código.
  • Haga una biblioteca de interoperabilidad que defina el método como un método externo en la DLL dada.
  • Llámalo desde C #.
  • ¡Lucro!

¿Cómo iría sobre la fuente de los métodos externos como Object.InternalGetEquals ()?

Vaya a https://github.com/dotnet/coreclr/tree/master/src/vm

Cada vez que miro lo suficientemente profundo en el reflector, me extern con métodos extern sin ninguna fuente. Leí la documentación de msdn en http://msdn.microsoft.com/en-us/library/e59b22c5(v=vs.80).aspx . Lo que obtuve de ese artículo es que los métodos con el modificador extern tienen que ser inyectados. Interpreté que esto significa que funciona como un patrón abstracto de fábrica. También noté que nunca había visto un método externo no estático. ¿Es la declaración estática un requisito (podría ver cómo esto tendría sentido)? Todavía estoy adivinando aquí y no estoy seguro de cómo funciona realmente. Me parece que el compilador debe reconocer ciertos atributos que mitigan el procesamiento, pero no sé qué atributos son diferentes a los que he encontrado como MethodImplAttribute y DllImportAttribute del ejemplo de MSDN. ¿Cómo alguien aprovecha el atributo extern ? Dijo que en muchos casos esto puede aumentar el rendimiento. Además, ¿cómo iría sobre la fuente de los métodos Object.InternalGetEquals() como Object.InternalGetEquals() ?


Los métodos marcados http://msdn.microsoft.com/en-us/library/e59b22c5(v=vs.80).aspx con el atributo [DllImport] suelen ser llamadas a bibliotecas C. Esta función es útil para llamar a WinAPI o código heredado.

Este es un ejemplo de MSDN:

using System; using System.Runtime.InteropServices; class MainClass { [DllImport("User32.dll")] public static extern int MessageBox(int h, string m, string c, int type); static int Main() { string myString; Console.Write("Enter your message: "); myString = Console.ReadLine(); return MessageBox(0, myString, "My Message Box", 0); } }

Llama a MessageBox que se define dentro de la biblioteca de Windows user32.dll . El tiempo de ejecución hace todo el trabajo pesado por usted aquí, aunque a veces es necesario administrar manualmente la memoria. Si la firma es incorrecta, su programa puede fallar en la llamada, puede presentar una fuga o el método puede devolver algo completamente diferente, ¡así que tenga cuidado! Creo que pinvoke.net es un gran instrumento para corregir firmas para diferentes API.

Algunos métodos extern dentro de .NET Framework que no tienen el atributo [DllImport] pero están decorados con el [MethodImpl (MethodImplOptions.InternalCall)] suelen ser los implementados en CLR, que también está escrito en C. Algunos de estos métodos simplemente no se pueden implementar en C # porque administran el tiempo de ejecución en sí, y algunos se implementan en C porque su rendimiento es crítico y C es más rápido.

Esto es lo que says MSDN sobre ellos:

Especifica una llamada interna. Una llamada interna es una llamada a un método que se implementa dentro del mismo tiempo de ejecución del lenguaje común.

En cuanto a ver el código de implementación real, dudo que pueda obtenerlo de Microsoft, pero hay algunas implementaciones alternativas muy buenas de CLR, así que asegúrese de revisarlas.


Usamos el modificador "extern" en la declaración del método. Se utiliza para indicar que el método se implementa externamente. Un uso común del modificador "externo" es con el atributo DllImport. Las llamadas de función que no son de C # se gestionan con este atributo. Si está utilizando un modificador externo, debe incluir el siguiente espacio de nombres:

using System.Runtime.InteropServices;

La sintaxis es algo como:

[DllImport("User32.dll")] public static extern int MessageBox(int h, string m, string c, int type);


extern es con invocación de plataforma (pinvoke) para facilitar los ensamblados administrados llamando al código no administrado. La palabra clave extern le informa al compilador que necesitará generar el código correcto para permitir el cálculo de datos correcto.