首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Contract.Requires使用

Contract.Requires使用
EN

Stack Overflow用户
提问于 2011-11-28 18:56:39
回答 3查看 21.9K关注 0票数 47

这是我的问题。我是一个非常喜欢通过合同设计,我使用这个概念,特别是在开发库,可供其他开发人员使用。我刚刚发现了一种新的方法,那就是:Contract.Requires而不是Exception:所以,而不是拥有:

代码语言:javascript
复制
public void SomeMethod(string name){
   if(name==null) throw new NullArgumentException("Null values not supported");
} 

我现在有:

代码语言:javascript
复制
public void SomeMethod(string name){
   Contract.Requires(name != null);
}

编辑:我在调试模式下在VS2010下工作。

问题:Contract.Requires什么也不做,即使namenull

MSDN文档说:

指定包围方法或属性的先决条件契约。

但是,如果不满足条件,则不指定任何内容!

我还注意到有其他 Contract.Requires重载抛出异常,显示消息.但是Contract.Requires(Boolean)是用来做什么的呢?

下面的编辑答案突出显示,必须安装插件才能拥有Contract API的全部功能,但是对于希望自己的代码在不同平台上运行相同的Mono用户呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-11-28 19:19:44

你应该做以下几点:

  1. 安装代码契约外接程序,如nfechner所注意到的
  2. 转到项目属性“代码契约”文件夹
  3. 检查“执行运行时合同检查”
  4. 将“组装模式”切换到“标准合同要求”
  5. Contract.Requires替换Contract.Requires<SomeException> (第一个抛出System.Diagnostics.ContractException,而第二个抛出您指定的异常,这对于公共方法非常重要)

这是基本的设置。要获得更精确的配置,请使用请参阅手册

如果您使用Mono,可能合同类是空的。我还没有这样做,但是合同手册的第七章似乎解释了如何提供您自己的实现。

票数 26
EN

Stack Overflow用户

发布于 2011-11-28 19:01:53

来自合同类文件

重要 必须安装Visual外接程序才能强制执行合同.代码合同高级版外接程序允许在“项目属性”页面中指定代码契约的静态和运行时检查。如果不启用运行时检查,则如果合同被违反,Contract.Ensures方法等合同在运行时不会抛出异常。Visual外接程序不随Visual 2010或Windows一起发布.

票数 11
EN

Stack Overflow用户

发布于 2011-11-28 19:16:36

有了这样一条消息,准确地指定您所做的事情通常是有帮助的。

例如,如果您已经安装了VS插件,或者您已经在项目属性下启用了它,或者您实际上正在调试和发布模式下运行,那么您就不会在原始消息中提到。

关于Contract.RequiresContract.Requires<Exception>

推荐使用Contract.Requires。根据手册

如果您的代码必须在特定前提条件失败时抛出特定的异常,则可以使用下面的泛型重载表单。(在您的代码中提交此表单之前,请阅读5.1节。如果没有在所有构建上运行契约工具,就不能使用Requires < Exn <Exn>>。如果这样做,则每次都会出现运行时故障。)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8300815

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档