相关疑难解决方法(0)

具有InternalCall属性的C#内部静态extern - 内部还是外部?

在我问的另一个问题中,出现了一条评论,表明.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链接):

指定内部调用.内部调用是对在公共语言运行时本身内实现的方法的调用.

任何人都可以解释这个看似明显的矛盾吗?

.net c#

34
推荐指数
2
解决办法
7942
查看次数

标签 统计

.net ×1

c# ×1