BCLの多くのメソッドは、[MethodImpl(MethodImplOptions.InternalCall)]
属性でマークされています。 indicates "メソッドが共通言語ランタイム自体の中で実装されている"こと。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
が存在するのですか?
それはうまくいかないようではなく、ちょうど恐ろしくスケールする。スタックトランザクションはILオペコードに対して暗黙的であり、機能シグネチャを処理するために多くのツールを更新する必要があります。宣言がメタデータにあるときは無料です。また、Ecma-335規格を超えて容易に拡張できます。 –
@Hans:新しいIL命令のサポートを追加することについての質問はありましたか?私はAniが最初に「InternalCall」メソッドがそこにあった理由を知りたいと思った。ちょうど尋ねる... –
@thecoon - '//専用のCIL命令'は良いヒントです。 –