我即将开始一个新的C#项目。我想知道使用代码合同或代码分析器(在Roslyn中)有什么区别。我误解了每个的用法吗?作为一个新项目,我想保持代码的完整性。所以我希望其他开发人员遵守特定的代码准则。我会进一步研究,但我希望首先得到社区的意见。原谅这个问题,我对C#开发还比较陌生。代码合同与代码分析器
1
A
回答
2
它们是两种不同的工具。
代码契约是申报和检查......嗯,合同,如前置条件和后置条件的方式:
public class Foo
{
public Foo(object arg)
{
Contract.Requires<ArgumentNullException>(arg != null);
}
public object GetBar()
{
Contract.Ensures(Contract.Result<object>() != null);
// TODO:
}
}
CC在运行时检查自己的条件。这需要编译后重写程序集(非源代码!)以将适当的调用注入到代码中。
代码分析器在编写代码时使用Roslyn分析源代码。 他们可以帮助您格式化代码,提醒您在IDisposable
上调用Dispose
等,但它们不会直接影响运行时行为。
有很多分析仪,按用途划分成项目(如StyleCopAnalyzers),而Code Contracts是一个独立的项目。
(CC也有静态分析仪,但这里我不能说太多 - 它在真实项目中使用时会导致性能下降,所以对我来说它通常是关闭的,无论如何,它打算检查合同)
1
代码分析器将分析您的代码中的常见错误。他们查看代码的结构和数据流以检测问题。
另一种类型的分析器着眼于样式(例如StyleCop),大写字母,骆驼套,前缀,后缀和你有什么。
第三种类型是您提到的代码合同,这个工作稍有不同。您声明了代码的预期行为,例如传递给方法的参数的期望值,您的代码可能抛出的异常等等。然后,合约分析器将检查调用代码是否传递了正确的参数(例如,分析器将检测到你传入null,如果不允许的话会引发一个错误)。同时它会检查你的方法的“内部一致性”,以确保你不会抛出你不允许抛出的异常。取决于实施合同可以在运行时或在编译时进行验证。
相关问题
- 1. 代码合同+代码分析
- 2. 可以让代码分析了解代码合同吗?
- 3. 与VS .NET标准/ .NET的核心代码分析和代码合同2017年
- 4. 静态代码分析与动态代码分析工具?
- 5. 分析代码与步骤
- 6. sonarqube代码分析与angularJS
- 7. 代码分析
- 8. JavaScript源代码分析器
- 9. 并发代码分析器
- 10. python2.6的+代码分析器
- 11. HTML代码分析器
- 12. 分组合计/合计聚合查询与分析云代码
- 13. 代码签入运行代码分析
- 14. 静态代码分析/代码注释
- 15. Clojure代码来分析clojure代码
- 16. JavaScript代码分析
- 17. Erlang - 代码分析
- 18. 分析MSP430代码
- 19. 分析PHP代码
- 20. SQl代码分析
- 21. 分析Mathematica代码
- 22. php代码分析
- 23. 代码分析CSS
- 24. C代码分析
- 25. 将VB.net代码与c#代码混合
- 26. openmp代码(并行)与串行代码的性能分析
- 27. 合并非git代码与基于git的代码(初始代码库相同)
- 28. 2同一网站的分析代码
- 29. 代码分析发现设计器代码中的CA2213错误
- 30. Javascript代码分析器的开源代码或插件
谢谢你。所以Code Contracts会影响性能? –
如果您想了解更多关于代码合同的信息,请查看本电子书https://www.syncfusion.com/resources/techportal/details/ebooks/csharpcontracts –
@JonMeyers:由于重写,CC将增加构建项目的时间。在运行时,合同比“如果......抛出”要慢,但我怀疑,在大多数情况下你会看到差异。同时,使用CC还有很大的好处。 – Dennis