.NET 言語で記述されたすべてのコードは MSIL にコンパイルされますが、MSIL を直接使用してのみ実行できる特定のタスクや操作はありますか?
C#、VB.NET、F#、j#、またはその他の .NET 言語よりも、MSIL で作業を簡単に実行できるようにしましょう。
これまでのところ、次のとおりです。
- 末尾再帰
- ジェネリック共変性/反変性 (C# 4 および VB 10 で許可)
- 戻り値の型のみが異なるオーバーロード
- アクセス修飾子を上書きする
- System.Object から継承できないクラスがある
- フィルターされた例外 (VB および C# 6 で許可)
- 現在の静的クラス タイプの仮想メソッドを呼び出します。
- 値型のボックス化されたバージョンを取得します。
- トライ/フォールトを実行します。
- 禁止されている名前の使用。
- 値型用のパラメータなしのコンストラクタを独自に定義する。
- 要素を使用してイベントを定義します
raise
。 - 一部の変換は CLR では許可されますが、C# では許可されません。
- 非
main()
メソッドを として作成します.entrypoint
。 - ネイティブ
int
およびネイティブunsigned int
タイプを直接操作します。 - 一時ポインターで遊ぶ
- MethodBodyItem の emittingbyte ディレクティブ
- System.Exception 以外の型をスローおよびキャッチする
- 列挙型の継承 (未検証)
- バイト配列を (4 倍小さい) int 配列として扱うことができます。
- フィールド/メソッド/プロパティ/イベントにはすべて同じ名前を付けることができます (未検証)。
- 独自の catch ブロックから try ブロックに分岐することができます。
- famandassemアクセス指定子(
protected internal
is fam)にアクセスできますまたはassem ですが、現在は C# 7.2 および VB 15.5 でも許可されています) <Module>
グローバル関数またはモジュール初期化子を定義するためのクラスへの直接アクセス。- ゼロ境界のない1ベースの配列を作成して使用する
- オープンインスタンスデリゲートとクローズドスタティックデリゲート、およびゲッター/セッターのデリゲートを作成する
- 一時変数を使用せずに2つの値を交換する
- 任意の名前で明示的なインターフェース実装、および 2 つのインターフェース関数を 1 つに実装する (VB で実行可能)
- 宣言( Cの
vtfixup
に相当)extern
- 任意
modopt
またはmodreq
ベストアンサー1
MSILでは、戻り値の型のみが異なるオーバーロードが許可されます。
call void [mscorlib]System.Console::Write(string)
または
callvirt int32 ...