コードコントラクトの簡単なテストを行っています。次のコードはWinFormです。これは(もちろん)合格です:
private void Test(Form form)
{
Contract.Requires(!string.IsNullOrEmpty(form.Name));
MessageBox.Show(form.Name);
}
protected override void OnLoad(EventArgs e)
{
if (!string.IsNullOrEmpty(Name))
Test(this);
base.OnLoad(e);
}
ただし、非常に単純なレベルの間接参照を追加すると、「証明されていないものが必要」と表示されます。
private bool Valid(string str)
{
return !string.IsNullOrEmpty(str);
}
protected override void OnLoad(EventArgs e)
{
if (Valid(Name))
Test(this);
base.OnLoad(e);
}
これを証明するのは簡単なことのようです。なぜ機能しないのですか?