.NET言語で記述されたすべてのコードはMSILにコンパイルされますが、MSILを直接使用してのみ実行できる特定のタスク/操作はありますか?
MSILでは、C#、VB.NET、F#、j#、その他の.NET言語よりも簡単に処理を実行できます。
これまでのところこれがあります:
- テール再帰
- ジェネリックCo / Contravariance
- 戻り型のみが異なるオーバーロード
- アクセス修飾子を上書きする
- System.Objectから継承できないクラスがある
- フィルタリングされた例外(vb.netで実行できます)
- 現在の静的クラス型の仮想メソッドを呼び出します。
- 値型のボックス版のハンドルを取得します。
- try / faultを実行します。
- 禁止された名前の使用。
- 値型の独自のパラメーターなしのコンストラクターを定義します。
raise
要素でイベントを定義します。- CLRでは許可されているが、C#では許可されていない一部の変換。
- 非
main()
メソッドをとして作成し.entrypoint
ます。 - ネイティブとの仕事
int
とネイティブunsigned int
に直接タイプ。 - 一時的なポインタで遊ぶ
- MethodBodyItemのエミッタバイトディレクティブ
- System.Exception以外のタイプをスローしてキャッチする
- 列挙型の継承(未検証)
- バイトの配列を(4倍小さい)intの配列として扱うことができます。
- フィールド/メソッド/プロパティ/イベントにすべて同じ名前を付けることができます(未確認)。
- 独自のcatchブロックからtryブロックに戻ることができます。
- famandassemアクセス指定子にアクセスできます(
protected internal
fam または assemです) <Module>
グローバル関数を定義するためのクラス、またはモジュール初期化子への直接アクセス。