使用系统.代码契约静态分析中的反射



我可以使用系统吗。代码合约构造中的反射类和方法,在静态分析期间进行检查?我想这样定义合同:

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

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

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

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

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

以下是一篇相当古老的文章,但似乎仍然有效。它说"静态检查器不使用反射来验证合同"。

最新更新