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
存在するのですか?