我正在創建如第號中所述的接口合同2.8接口合同的Feb 4, 2011 Code Contracts User Manual (PDF)。這不是問題。不可變方法[ContractInvariantMethod]可以在接口契約內工作嗎?
此外,我想混合一個對象不變(見第4.2 ContractInvariantMethod)到相同的接口合同。這是個問題。我無法找到Interface Interface上使用的Object Invariants的例子。
我試着在以下部分代碼片段中看到的接口契約中添加一個對象不變量。它編譯。在運行時,它不會引發任何錯誤,但它似乎沒有做任何正面的事情(即被調用)。
/* Note: The intention of this snippet is to cause the data implementation
* to fail if it is not initalized before its public data access methods are called.
*/
[ContractClassFor(typeof(IDataProxy))]
abstract class IDataProxyContract : IDataProxy
{
[ContractInvariantMethod]
private void ObjectInvariant()
{
Contract.Invariant(IsInited == true, "Instance not initialized.");
}
我無法找到專門解決這種情況或駁斥它的文檔。
在這一點上,我不確定是否遺漏了一個步驟來使其工作,或者代碼合同技術完全忽略了此對象中的對象不變量。我想使它工作。有人知道答案嗎?
這是一個具有接口不變量的特定問題,正如John K的自我回答所指出的那樣。接口不變量不是「默認關閉」的,它們只是簡單地不起作用。 –