En another question pregunté, surgió un comentario que indica que el método de .NET Framework Array.Copy
utiliza código no administrado. Fui a cavar con Reflector y encontré la firma uno de los Array.Copy
sobrecargas método se define como tan:Externo interno estático C# con atributo InternalCall - ¿interno o externo?
[MethodImpl(MethodImplOptions.InternalCall), ReliabilityContract(Consistency.MayCorruptInstance, Cer.MayFail)]
internal static extern void Copy(Array sourceArray, int sourceIndex, Array destinationArray, int destinationIndex, int length, bool reliable);
Después de ver esto, estoy un poco confundido. La fuente de mi confusión es el modificador extern
que significa (MSDN link):
El modificador externo se utiliza para declarar un método que se implementa externamente.
Sin embargo, la declaración de método también está decorado con un atributo MethodImplOptions.InternalCall
, lo que indica (MSDN link):
Especifica una llamada interna. Una llamada interna es una llamada a un método que se implementa dentro del tiempo de ejecución del lenguaje común .
¿Alguien puede explicar esta aparente contradicción aparente?
@leppie - Me gustaría poder marcar las suyas y las respuestas de 280Z28 aceptada ya que' re ambos correctos. Sin embargo, creo que la respuesta de 280Z28 lo deletrea un poco más y me ayudó a entender mejor, sin embargo, muchas gracias por su esfuerzo. – CraigTP
No hay problema, ya tengo suficientes puntos, le daré un poco más también :) – leppie