Trong another question Tôi đã hỏi, một nhận xét xuất hiện cho thấy phương pháp của khung công tác .NET Array.Copy
sử dụng mã không được quản lý. Tôi đi đào với Reflector và thấy chữ ký một trong những Array.Copy
quá tải phương pháp được định nghĩa như vậy:C# bên trong tĩnh extern với InternalCall thuộc tính - nội bộ hay bên ngoài?
[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);
Sau khi xem xét này, tôi hơi bối rối. Nguồn gốc của sự nhầm lẫn của tôi là modifier extern
có nghĩa là (MSDN link):
các modifier extern được sử dụng để khai báo một phương pháp mà được thực hiện bên ngoài.
Tuy nhiên, phương pháp kê khai cũng được trang trí với một thuộc tính MethodImplOptions.InternalCall
, mà chỉ ra (MSDN link):
Chỉ định một cuộc gọi nội bộ. An cuộc gọi nội bộ là cuộc gọi đến phương thức được thực hiện trong chính thời gian chạy ngôn ngữ phổ biến .
Bất kỳ ai có thể giải thích mâu thuẫn dường như rõ ràng này không?
@leppie - Tôi ước gì có thể đánh dấu cả hai bạn và câu trả lời 280Z28 như chấp nhận kể từ khi bạn' cả hai đều chính xác. Tuy nhiên, tôi cảm thấy rằng câu trả lời của 280Z28 đánh vần nó nhiều hơn một chút và giúp tôi hiểu rõ hơn, tuy nhiên, cảm ơn rất nhiều vì nỗ lực của bạn. – CraigTP
Không vấn đề gì, tôi đã có đủ điểm rồi, tôi sẽ cho anh ấy thêm một số nữa :) – leppie