If I have a Vector3.Normalize()
method that specifies a post condition where the resultant Vector3
is gonna have a length of 1, how would the compiler check for this at compile time (or before)? Does it just pass a random Vector3
variable to the method?
1567 次
2 に答える
3
これは C# 4.0 の機能ではありません。これは、IL レベルで動作する CLR 4.0 の言語に依存しない機能です。静的チェックを実行する機能はありますが、あらゆる種類の条件に対してではありません。使用している言語に関係なく、通常のコンパイラによって生成された IL を実際に分析し、コードに設定した制約を見つけてから、コードを調べて、契約を満たすかどうかを判断します。静的チェック (少なくとも私が見たデモでは) はオプションの機能です。
于 2009-01-29T20:43:01.680 に答える
1
C#4.0のコードコントラクトは、コンパイル時ではなく実行時に発生し、呼び出しで実際に条件を指定する必要があると確信しています。Vector3クラスにLengthプロパティがあるとすると、次のようになります。
Expects(vector3.Length == 1);
これは、ある種のコンパイル後のステップで実際にILの書き換えにヒットし、最終的にはメソッドの本体を試行でラップすることになります。最後に、事後条件テストがfinallyブロックにあります。
于 2009-01-29T20:25:00.873 に答える