假設下面的代碼來證明財產非空:啓用靜態合同檢查基於一些其他財產
public class CC3
{
private string _field;
private bool _someFlag;
public string Property
{
get { return _field; }
}
public bool SomeFlag
{
get { return _someFlag; }
}
public void SetField()
{
_field = " foo ";
_someFlag = true;
}
public string Method()
{
Contract.Requires(SomeFlag);
return Property.Trim();
}
}
代碼契約的靜態檢查埋怨return
聲明Method
:
可能調用空引用的方法'this.Property'
我需要做些什麼來啓用sta如果SomeFlag
是true
,抽取檢查器證明Property
永遠不可能是null
?
不知道是否有關,但也許[工作分配可能會被編譯器重新排序(http://msdn.microsoft。 com/en-us/magazine/jj863136.aspx)導致競爭狀態? – Rawling 2013-02-19 16:55:35
@Rawling:感謝您的評論。我認爲這不相關。無論執行「SetField」主體的順序如何。當調用'Method'時,兩個任務都發生了。 – 2013-02-19 16:56:59
如果一個線程調用'Method'而另一個線程調用'SetField'會怎麼樣? (我不知道這是否被班級以外的事情所排除。) – Rawling 2013-02-19 17:00:49