Dans une autre question que j'ai posée, un commentaire a indiqué que la méthode Array.Copy
du framework .NET utilise du code non managé. J'ai creusé avec Reflector et j'ai trouvé que la signature de l'une des surcharges de la méthode Array.Copy
est définie ainsi :
[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);
Après avoir examiné cela, je suis légèrement confus. La source de ma confusion est le modificateur extern
qui signifie (lien MSDN) :
Le modificateur extern est utilisé pour déclarer une méthode qui est implémentée de manière externe.
Cependant, la déclaration de la méthode est également décorée avec un attribut MethodImplOptions.InternalCall
, qui indique (lien MSDN) :
Spécifie un appel interne. Un appel interne est un appel à une méthode qui est implémentée au sein du runtime commun du langage lui-même.
Quelqu'un peut-il expliquer cette contradiction apparemment évidente ?