CLR如何处理C#中的extern方法调用

时间:2009-03-15 18:28:21

标签: c# c#-3.0

我想问为什么所有的extern方法调用都是静态的? CLR如何处理这些调用?

2 个答案:

答案 0 :(得分:4)

Extern方法调用是非托管代码。因此,在(托管)对象实例上调用没有意义 - 实例方法中的第一个(隐藏)参数是实例引用,即this。通常,extern方法只涉及简单类型(基元,字符串等) - 不是对象(可能除了数组 - 甚至它们通常首先解析为IntPtr)。

答案 1 :(得分:2)

extern调用通常也必须符合“C风格”API,而C对对象一无所知,因此调用是static

我的声明不是100%为真,因为有一个 ThisCall 调用约定,它可以与 [DllImport] 一起用来调用C ++方法。