什么时候应该使用C#4.0附带的代码合同?

ACP*_*ACP 19 c# code-contracts c#-4.0

我正在经历一个关于SO的问题,这是关于c#4.0的新功能和jon双向飞碟的答案有C#4.0的Code Contracts功能..但我真的不明白何时使用它们..任何建议......

jas*_*son 25

只要有可能.例如,在类似方法的开头使用guard子句的任何地方

public void Write(TextWriter tw, object o) {
    if(tw == null) {
        throw new ArgumentNullException("tw");
    }
    if(o == null) {
        throw new ArgumentNullException("o");
    }
    tw.WriteLine(o.ToString());
}
Run Code Online (Sandbox Code Playgroud)

你应该改用

public void Write(TextWriter tw, object o) {
    Contract.Requires(tw != null);
    Contract.Requires(o != null);
    tw.WriteLine(o.ToString());
}
Run Code Online (Sandbox Code Playgroud)

令人高兴的是Contract,它们变得公开并且可以成为文档的一部分,而不需要额外的工作,因为保护条款不公开,只能通过一些繁重的工作进入文档.因此,Contract您可以更清楚地表达代码中的要求和承诺.

  • 除了上面使用Contracts检查前置条件之外,类似地它们可以用于验证后置条件 - 例如,在部分/完整方法体执行之后,断言一些变量/对象是否处于正确状态.此外,合同也可以静态评估(在编译时). (3认同)

小智 5

合同的真正美妙之处在于你不必硬连接那些丑陋的参数名称字符串......

if(tw == null) throw new ArgumentNullException("tw");
Run Code Online (Sandbox Code Playgroud)