ビットマップをピクセルの配列としてカプセル化するオブジェクトに取り組んでいます。配列は 1 次元で、画像の幅を読み取り専用フィールドに格納します。また、ピクセル配列の長さと幅に基づいて高さを計算するプロパティも追加しました。高さに関して次の不変条件があります。
- ピクセル配列 (プライベート データ フィールドを使用する Data プロパティ) が null ではなく、少なくとも 1 つの要素を持っています。
- 幅がゼロより大きい
高さプロパティのコード:
public int Height
{
[Pure]
get
{
Contract.Requires(Data != null);
Contract.Requires(Width > 0);
Contract.Requires(Data.Length > 0);
Contract.Ensures(Contract.Result<int>() > 0);
Contract.EndContractBlock();
Contract.Assume(Data.Length > Width);
return Data.Length / Width;
}
}
しかし、静的チェッカーで保証を証明することはできません。問題は(私の理解では)、 という要件がないことですData.Length % Width == 0
。したがって、整数除算Data.Length / Width
がゼロになる可能性があるためです。したがって、運がないという仮定を追加しました。静的チェッカーに確実に受け入れるように指示する方法がわかりません。