在another question我問,一個評論出現,指出.NET框架的Array.Copy
方法使用非託管代碼。我去Reflector挖掘,發現簽名Array.Copy
方法重載的一個被定義爲這樣:C#內部靜態外部與InternalCall屬性 - 內部或外部?
[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);
看着這之後,我稍微困惑。我的混亂的來源是extern
改性劑,這意味着(MSDN鏈路):
的extern修飾符用於聲明 被實現 外部的方法。
然而,該方法聲明還裝飾有一個MethodImplOptions.InternalCall
屬性,其指示(MSDN鏈路):
指定內部呼叫。內部呼叫是對方法 的調用,該方法在通用的 語言運行時本身內實施。
任何人都可以解釋這個看似明顯的矛盾嗎?
@leppie - 我想我可能標誌着雙方你和280Z28的回答,因爲你作爲公認的」都是正確的。但是,我認爲280Z28的答案能夠更清楚地說明問題,並幫助我更好地理解,但是,非常感謝您的努力。 – CraigTP 2009-07-31 12:52:54