1

我可以在代码契约构造中使用 System.Reflection 类和方法,在静态分析期间进行检查吗?我想这样定义合同:

[ContractInvariantMethod]
private void ObjectInvariant()
{
    Contract.Invariant(GetType().GetMethods().Any(x => x.Name == "Add"),"Error");
}

当我运行应用程序时,会检查此条件。但在编译期间不会检查它。我可以以某种方式为这样的合同启用静态检查吗?

4

3 回答 3

2

我不知道有任何技术限制,但这不是最好的解决方案。代码契约用于检查运行时状态或更改,而不是(有效地)不可变的东西,例如类型上的方法。

相反,我要么创建一个检查方法的单元测试,要么在像FXCop这样的静态分析工具中创建一个规则。

于 2012-09-04T02:51:03.617 回答
0

代码合同并不是为了修复设计缺陷。你的类应该实现一个包含Add方法的接口。

于 2012-09-04T03:01:18.493 回答
0

以下是相当古老的帖子,但它似乎仍然有效。它说“静态检查器不使用反射来验证合同”。

于 2012-09-26T15:35:30.503 回答