我在C#中使用Microsoft的Code Contracts扩展程序。当我编写一个带有重写的ToString实现的类,它返回null时,它正确地识别了问题:
我认为这是因为Microsoft在内部使用了代码合同,并且他们向Contract.Ensures
添加了Object.ToString
次调用。但是,当我查看Object.ToString
source code时,我看不到任何合同(我确实看到了其他合同,但不是我正在寻找的合同)。 Code Contracts如何确定ToString不应该返回null?
答案 0 :(得分:6)
这是System.Object
:(link)的代码合约内部定义。如您所见,他们已使用此约束定义ToString()
:
Contract.Ensures(Contract.Result<string>() != null);
为了回答您的问题,代码合同因内部合约定义而知道它不为空。