.net – MethodImplOptions.InternalCall有什么意义?

BCL中的许多方法都标有[MethodImpl(MethodImplOptions.InternalCall)]属性。
这个indicates认为“方法是在公共语言运行本身内实现的”。

通过指定运行时被强制实施的指定的显式CIL指令,以这种方式设计框架的要点是什么?最终,该属性正在为运行时创建合同义务,但在某种程度上,我看起来很混乱,而不是立即显现。

例如,Math.Pow可能是以这种方式写的(如果不好的话,请不要混淆C#IL和IL本身;这只是解释我的观点的一个例子):

public static double Pow(double x, double y)
{
    ldarg.0
    ldarg.1
    pow // Dedicated CIL instruction
    ret
}

而不是现在的方式:

[MethodImpl(MethodImplOptions.InternalCall)]
public static double Pow(double x, double y);

为什么存在MethodImplOptions.InternalCall?

我认为很大的原因是创建一个新的IL指令是很困难的,它可能会影响很多工具,包括外部工具(ILGenerator,ilasm,ildasm,PEVerify,Reflector,PostSharp,…)。

但是创建一个新的InternalCall方法?这就像在C#中编写方法一样简单(我假设没有看到Rotor来验证),它并不影响任何东西。

而不仅仅是创建它,我认为这同样适用于维护。

翻译自:https://stackoverflow.com/questions/11161120/whats-the-point-of-methodimploptions-internalcall

转载注明原文:.net – MethodImplOptions.InternalCall有什么意义?