.net 4.0 代码契约能否横切代码的关注点?

.net 4.0 代码契约能否横切代码的关注点?,.net-4.0,code-contracts,.net 4.0,Code Contracts,是否有一种方法可以指定横切的代码约定要求,例如,在类级别的约定要求在调用该类上的任何实例方法时实例变量都不为null,否则调用将失败 我对代码契约还不熟悉,一直在浏览,但是没有关于横切特性的东西突然出现在我面前。也许我正在搜索一个代码契约没有的特性 我想你要找的是“对象不变量” 根据手册第2.3节 [ContractInvariantMethod] private void ObjectInvariant () { Contract.Invariant ( this.y >= 0

是否有一种方法可以指定横切的代码约定要求,例如,在类级别的约定要求在调用该类上的任何实例方法时实例变量都不为null,否则调用将失败


我对代码契约还不熟悉,一直在浏览,但是没有关于横切特性的东西突然出现在我面前。也许我正在搜索一个代码契约没有的特性

我想你要找的是“对象不变量”

根据手册第2.3节

[ContractInvariantMethod]
private void ObjectInvariant () 
{
   Contract.Invariant ( this.y >= 0 );
   Contract.Invariant ( this.x > this.y );
}
每次公共方法调用后都将检查它们。

用于正确封装的值,这些值应与每次调用之前相同

我想你要找的是“对象不变量”

根据手册第2.3节

[ContractInvariantMethod]
private void ObjectInvariant () 
{
   Contract.Invariant ( this.y >= 0 );
   Contract.Invariant ( this.x > this.y );
}
每次公共方法调用后都将检查它们。

用于正确封装的值,这些值应与每次调用之前相同

感谢@darvids0n,我将标题中的“方面”改为“关注”,使其更加完整。感谢@darvids0n,我将标题中的“方面”改为“关注”,使其更加完整。这很有趣。我将不得不花更多的时间来处理它,因为当调用我的任何公共方法时,契约方法似乎都无法访问,测试方法是将行
抛出新异常(“fyi-contract area”)
在ObjectInvariant()方法中。为了子孙后代,我找到了关于使用CompactInvariantMethod的代码项目的附加教程和示例?@John:这是一个设置问题(您需要完整的设置),但这不是普通的方法,它不会作为一个方法处理/执行。你的
throw
测试不起作用,试着破坏其中一个合同。谢谢Hank。除了.NET Fmk4中的内容之外,我还必须从Devlab安装代码契约,以获得对应的“代码契约”与“项目”选项卡,这样我就可以启用运行时检查——这似乎起到了作用。关于不将异常用作测试,您是对的。现在,我的代码契约本该失败的。在我的问题中,在所有方法调用中实现一个实例字段检查的场景已经足够了。唯一不适合我实际想要做的事情是ObjectInvariant方法在公共方法调用的末尾运行,而不是在开始时,作为后条件检查。这种推理在代码项目中被描述为:“不变量被检查为post条件,这样您就可以让实例中的一个公共方法调用实例中的另一个公共方法,而无需在第二个公共方法中执行post条件。”?这很有趣。我将不得不花更多的时间来处理它,因为当调用我的任何公共方法时,契约方法似乎都无法访问,测试方法是将行
抛出新异常(“fyi-contract area”)
在ObjectInvariant()方法中。为了子孙后代,我找到了关于使用CompactInvariantMethod的代码项目的附加教程和示例?@John:这是一个设置问题(您需要完整的设置),但这不是普通的方法,它不会作为一个方法处理/执行。你的
throw
测试不起作用,试着破坏其中一个合同。谢谢Hank。除了.NET Fmk4中的内容之外,我还必须从Devlab安装代码契约,以获得对应的“代码契约”与“项目”选项卡,这样我就可以启用运行时检查——这似乎起到了作用。关于不将异常用作测试,您是对的。现在,我的代码契约本该失败的。在我的问题中,在所有方法调用中实现一个实例字段检查的场景已经足够了。唯一不适合我实际想要做的事情是ObjectInvariant方法在公共方法调用的末尾运行,而不是在开始时,作为后条件检查。该推理在代码项目中描述为:“将不变量作为post条件进行检查,以便您可以让实例中的公共方法调用实例中的另一个公共方法,而无需在第二个公共方法中执行post条件。”?