我想问为什么所有的extern方法调用都是静态的? CLR如何处理这些调用?
答案 0 :(得分:4)
Extern方法调用是非托管代码。因此,在(托管)对象实例上调用没有意义 - 实例方法中的第一个(隐藏)参数是实例引用,即this
。通常,extern
方法只涉及简单类型(基元,字符串等) - 不是对象(可能除了数组 - 甚至它们通常首先解析为IntPtr
)。
答案 1 :(得分:2)
extern
调用通常也必须符合“C风格”API,而C对对象一无所知,因此调用是static
。
我的声明不是100%为真,因为有一个 ThisCall 调用约定,它可以与 [DllImport] 一起用来调用C ++方法。