現在、Code Contracts
これを使用できるため、次を使用できます。
Contract.Requires(source != null);
Contract.Ensures(Contract.Result<MyType>() != null);
などですが、これはまだ CLR に組み込まれていないため (個別にダウンロードする必要があります)、独自のコードでしか実行できません。
Code Contracts クラス自体は、バージョン 4 から .Net の一部になっていますが、それ自体ではチェック コードを生成しません。そのためには、コードの生成時に C# コンパイラによって呼び出されるコード コントラクト リライターが必要です。それは別のダウンロードが必要なものです。
はい、現在これを行うためのより良い方法がありますが、CLR の一部として (まだ) リリースされていないため、CLR は現在、「レガシー」アプローチと考えられるものを使用しています。
「関数ポインターでスタックをオーバーロードする」こととはまったく関係ありません。
Code Contracts を使用しても、もちろんチェックは行っています。引数の null をチェックし、そうであればスローする IL コマンドは私が知っているものではないため、そのような作業は (すべての CLR 言語で) いくつかの IL 命令を使用して行う必要があります。ただし、Code Contracts コード リライタは、コード コントラクトの述語 (例: value != null
) をチェックするためのメソッドを呼び出すのではなく、インライン コードを生成するため、非常に効率的です。