我可以使用系统吗。代码合约构造中的反射类和方法,在静态分析期间进行检查?我想这样定义合同:
[ContractInvariantMethod]
private void ObjectInvariant()
{
Contract.Invariant(GetType().GetMethods().Any(x => x.Name == "Add"),"Error");
}
当我运行应用程序时,会检查此条件。但在编译过程中不会检查它。我可以以某种方式为类似的合同启用静态检查吗?
我不知道任何技术限制,但这不是最好的解决方案。代码契约是用来检查运行时状态或更改的,而不是(有效地)不可变的东西,比如类型上的方法。
相反,我会创建一个单元测试来检查方法,或者在像FXCop这样的静态分析工具中创建一个规则。
代码契约并不是为了修复设计缺陷。您的类应该实现一个包含Add
方法的接口。
以下是一篇相当古老的文章,但似乎仍然有效。它说"静态检查器不使用反射来验证合同"。