c# – 代码合同:我们必须在委托方法中冗余地指定Contract.Requi
我打算使用新的.NET 4代码合同功能来进行开发.这让我想知道我们是否必须在一系列方法中冗余地指定等价的Contract.Requires(…)语句.
我认为代码示例值得一千字: public bool CrushGodzilla(string weapon,int velocity) { Contract.Requires(weapon != null); // long code return false; } public bool CrushGodzilla(string weapon) { Contract.Requires(weapon != null); // specify contract requirement here // as well??? return this.CrushGodzilla(weapon,int.MaxValue); } 对于运行时检查,这并不重要,因为我们最终总是会遇到需求检查,如果失败,我们会收到错误. 但是,当我们再次在第二次重载中未指定合同要求时,是否认为是不良做法? 此外,还将编译时间检查功能,也可能设计代码合同的时间检查.它似乎尚未在Visual Studio 2010中使用C#,但我认为有一些语言,如Spec#已经做了.当我们编写代码来调用这样的方法时,这些引擎可能会给我们提示,我们的参数当前可以是或将为null. 所以我想知道这些引擎是否会始终分析一个调用堆栈,直到找到一个当前不满足的合同的方法? 此外,here I learned about the difference between 解决方法
我认为最好的做法是规定每种公共方法的所有合同.合同不仅仅是“什么被检查” – 它的文档也是有效的.如果你调用一个方法,但是不知道应用什么契约,那么合同失败可能会降低一点:这表示你所调用的方法的错误,而不是你的方法.
请注意,如果您在整个项目中使用C#4,您可以考虑使用可选参数和命名参数来避免这么多重载.如果您需要从不支持这些语言的语言调用代码,那就没有用. 我强烈怀疑,如果您没有在“默认”超载中指定合同,则静态检查器(现在为available for all versions of VS2010)将抱怨合同可能会失败,并且还会建议在其中添加合同. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |