c# – 如何在接口中配置代码约定
我无法在课堂上配置代码合同.我已经按照文档和示例,但它不起作用.
我想将Code Contracts条件插入我的界面,这里是我的代码 界面 [ContractClass(typeof(ArticleBLLContract))] public interface IArticleBLL { int getArticleNSheet(string IdBox); IEnumerable<IArticle> getArticleValue(string IdBox,string IdLanguage); } 合同类 [ContractClassFor(typeof(IArticleBLL))] public sealed class ArticleBLLContract : IArticleBLL { int IArticleBLL.getArticleNSheet(string IdBox) { Contract.Requires<ArgumentOutOfRangeException>(!String.IsNullOrEmpty(IdBox),"IdBox has no valid value"); return default(int); } IEnumerable<Base.Article.IArticle> IArticleBLL.getArticleValue(string IdBox,string IdLanguage) { Contract.Requires<ArgumentOutOfRangeException>(!String.IsNullOrEmpty(IdBox),"IdBox has no valid value"); Contract.Requires<ArgumentOutOfRangeException>(!String.IsNullOrEmpty(IdLanguage),"IdLanguagehas no valid value"); Contract.Ensures(Contract.Result<IEnumerable<Base.Article.IArticle>>() != null,"Return value is out of Range"); return default(IEnumerable<Base.Article.IArticle>); } } 适用合同的类 public class ArticleBLL : IArticleBLL { public int getArticlNSheet(string IdBox) { try { return _Dal... } catch (Exception ex) { throw ex; } } public IEnumerable<IArticle> getArticleValue(string IdBox,string IdLanguage) { IEnumerable<IArticle> article = null; try { article = _Dal... return article; } catch (Exception ex) { throw ex; } } } 我试图在这一行插入一个断点 Contract.Requires<ArgumentOutOfRangeException>(!String.IsNullOrEmpty(IdBox),"IdBox has no valid value"); 但是当我打电话给方法时,它永远不会通过这里 有什么不对? 谢谢! 解决方法
根据迄今为止的评论总重写
我已经创建了一个类库项目,并将接口及其契约类放在那里.我已将其设置为“标准合同要求”,运行时前后检查和构建合同参考程序集(我为调试和发布设置了相同的选项). 然后,我得到了一个控制台应用程序,其中有一个实现该接口的类,并设置了“标准合同要求”,运行时前置和后置检查(再次,在调试和发布之间设置相同). 在Debug或Release模式下运行它,我在尝试调用getArticleNSheet时遇到ArgumentOutOfRangeException. 除了切换到“标准合同要求”之外,上述内容与您当前的设置不符? 而且,事实上,我以前错了.对于“标准合同要求”,我实际上能够在调试时在合同类中遇到断点.我不确定Wizardry能够做到这一点 – 因为它不是字面上运行该类中的代码 – 事实证明你可以在合同类中重写方法: int IArticleBLL.getArticleNSheet(string IdBox) { Contract.Requires<ArgumentOutOfRangeException>(!String.IsNullOrEmpty(IdBox),"IdBox has no valid value"); throw new NotImplementedException(); } 您可以在Contract.Requires行上放置一个断点,它似乎点击它(在关于文件不匹配的警告之后,可能是由于重写).但假设您已传递非空字符串,则它不会抛出NotImplementedException. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |