在我问的另一个问题中,出现了一条评论,表明.NET框架的Array.Copy方法使用了非托管代码.我用Reflector挖掘并发现Array.Copy方法重载的签名之一定义如下:
[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);
Run Code Online (Sandbox Code Playgroud)
看了这个之后,我有点困惑.我混淆的来源是extern修饰符,意思是(MSDN链接):
extern修饰符用于声明从外部实现的方法.
但是,方法声明也用一个MethodImplOptions.InternalCall属性来装饰,它表示(MSDN链接):
指定内部调用.内部调用是对在公共语言运行时本身内实现的方法的调用.
任何人都可以解释这个看似明显的矛盾吗?