Code Contracts 如何知道 ToString 覆盖不应该 return null?
How does Code Contracts know that ToString overrides shouldn't return null?
我在 C# 中使用 Microsoft 的代码合同扩展。当我用 return 为 null 的覆盖 ToString 实现编写 class 时,它正确地识别了问题:
我认为这是因为 Microsoft 在内部使用代码契约,并且他们添加了对 Object.ToString
的 Contract.Ensures
调用。但是,当我查看 Object.ToString
source code 时,我没有看到任何合同(我确实看到了其他合同,但不是我正在寻找的合同)。 Code Contracts 如何确定 ToString 不应该 return null?
这是 System.Object
的代码合同内部定义:(link)。如您所见,他们定义了 ToString()
和这个约束:
Contract.Ensures(Contract.Result<string>() != null);
为了回答您的问题,Code Contracts 知道它不是空的,因为有内部合同定义。
我在 C# 中使用 Microsoft 的代码合同扩展。当我用 return 为 null 的覆盖 ToString 实现编写 class 时,它正确地识别了问题:
我认为这是因为 Microsoft 在内部使用代码契约,并且他们添加了对 Object.ToString
的 Contract.Ensures
调用。但是,当我查看 Object.ToString
source code 时,我没有看到任何合同(我确实看到了其他合同,但不是我正在寻找的合同)。 Code Contracts 如何确定 ToString 不应该 return null?
这是 System.Object
的代码合同内部定义:(link)。如您所见,他们定义了 ToString()
和这个约束:
Contract.Ensures(Contract.Result<string>() != null);
为了回答您的问题,Code Contracts 知道它不是空的,因为有内部合同定义。