Многие методы в BCL отмечены атрибутом [MethodImpl(MethodImplOptions.InternalCall)]
.
Это указывает , что «метод реализован в самой общеязыковой среде выполнения».
Какой смысл проектировать инфраструктуру таким образом, а не указывать явные инструкции 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
?