2009-06-18 6 views
7

estaba investigando algo de código marco (el método System.AppDomain.GetDynamicDir) y esto era todo el ensamblador mostró:¿Cómo funciona el MethodImplAttribute en .NET?

[MethodImpl(MethodImplOptions.InternalCall)] 
private extern string GetDynamicDir(); 

lo que sucede cuando este método se llama? No me refiero a este método específico, sino a los métodos con este atributo en general.

Respuesta

10

De MSDN:

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

Así que, básicamente, el CLR proporciona su propia implementación de este método (que es, probablemente, en código nativo), por lo que no se puede ver en el desensamblador.

+0

Encontré los métodos aquí: http://www.koders.com/cpp/fid006DC4C11F458707221DA6ED2ED9CC3C7AE12E11.aspx ¡Gracias! –

6

respuesta here:

(...) MethodImplOptions.InternalCall se utiliza en conjunción con extern a contar el tiempo de ejecución que el método se implementa internamente dentro del propio sistema. Esto se hace para muchos de los métodos de .NET Framework mejores servidos al implementarse en código no administrado. Por ejemplo, muchos de los métodos en la String, GC, y clases de matemáticas están marcados como InternalCall. Como habrás notado, Guid.CompleteGuid es también un InternalCall.

Cuestiones relacionadas