W odpowiedzi na pytanie zadane another question pojawił się komentarz wskazujący, że metoda Array.Copy
architektury .NET używa niezarządzanego kodu. Poszedłem kopanie z Reflector i znalazł podpis jednego z Array.Copy
metody przeciążeń jest zdefiniowany jako tak:C# wewnętrzny adres statyczny z atrybutem InternalCall - wewnętrzny czy zewnętrzny?
[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);
Po patrząc na to, jestem nieco zdezorientowany. Źródłem mojego zamieszania jest modyfikator extern
co oznacza (MSDN link):
extern modyfikator służy do deklarowania metodę, która jest realizowany zewnętrznie.
Jednak deklaracja metoda jest również ozdobiona atrybutu MethodImplOptions.InternalCall
, co wskazuje (MSDN link):
Określa połączenie wewnętrzne. Wywołanie wewnętrzne jest wywołaniem metody, która jest implementowana we wspólnym środowisku wykonawczym języka .
Czy ktoś może wyjaśnić tę pozornie widoczną sprzeczność?
@leppie - Chciałbym zaznaczyć obie swoje i odpowiedzi 280Z28 jako przyjęte od ciebie” Oba poprawne. Uważam jednak, że odpowiedź 280Z28 nieco bardziej wyjaśnia i pomogła mi lepiej zrozumieć, dziękuję za wasz wysiłek. – CraigTP
Nie ma problemu, mam już dość punktów, dam mu jeszcze trochę :) – leppie