在代码中使用System.Reflection进行静态分析

时间:2012-09-04 02:44:25

标签: c# reflection code-contracts

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

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

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

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

代码合同并不意味着修复设计缺陷。您的类应该实现包含Add方法的接口。

答案 2 :(得分:0)

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