知识大全 详解.NET 4.0代码契约组件

Posted 条件

篇首语:智慧是生成的,知识是学来的。。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 详解.NET 4.0代码契约组件相关的知识,希望对你有一定的参考价值。

详解.NET 4.0代码契约组件  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  代码契约组件是对 NET的重要补充 这次我们将提供更为详细的内容

  如果要在 NET 发布之前使用代码契约 我们可以在Visual Studio项目中引用程序集Microsoft Contracts dll 该程序集安装在%PROGRAMFILES%/Microsoft/Contracts/PublicAssemblies目录下 NET 会在mscorlib dll中包含契约组件 我们可以指定契约验证 可在编译时(静态)或在运行时(动态)执行校验

  契约包含几种类型 前置条件(Preconditions) 后置条件(Postconditions) 对象不变量(Object Invariants) 断言(Assertions) 假定(Assumptions) 量词(Quantifiers) 接口契约(Interface Contracts)和抽象方法契约(Abstract Method Contracts)

  前置条件使用Contract Requires()进行定义 如果在编译时使用了符号(Symbol)CONTRACTS_FULL或CONTRACTS_PRECONDITIONS 那么IL中就会包含其编译结果 例如

Contract Requires( x ! = null )

  如下所示 前置条件通常作为方法体中的参数验证 如下所示

public Rational( int numerator int denominator)     Contract Requires( denominator ! = );         this numerator = numerator;         this denominator = denominator;

  如果不符合Contract Requires()指定的条件 就会调用Debug Assert(false) 然后调用Environment FailFast() 如果不管在编译时使用哪个符号 您都希望程序集中包含前置条件 那么可以使用Contract RequiresAlways()

  当方法结束时 后置条件表示其结果需要满足的契约 它通过Contract Ensures()方法指定 如下例所示

public int Denominator        get                  Contract Ensures( Contract Result() != );            return this denominator;          

  虽然似乎在返回结果之前就指定了条件 实际它还是会在返回结果之后 调用者得到结果之前进行验证

  对象不变量则为每个实例指定条件

ContractInvariantMethod]protected void ObjectInvariant ()     Contract Invariant ( this denominator ! = );  

  至于其他类型的契约 断言表示为Contract Assert() 假定则表示为Contract Assume() 一个失败的Assert()会调用Debug Assert(false) 假定与运行时断言相似 不同之处在于静态检验的方式 假定用于指定 期望 应该符合的条件 而由于某些限制 该条件无法得到编译器的验证

  接口契约为接口指定条件 它们使用在关联于接口的独立类上 因为接口方法只能声明 而不能拥有方法体 对于抽象方法契约同样如此

  以下为一个使用契约的类

cha138/Article/program/net/201311/15397

相关参考

知识大全 VB.NET 中的组件开发源代码剖析

VB.NET中的组件开发源代码剖析  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!         

知识大全 保护你的代码——谁动了我的组件

  摘要本文描述了如何用CodeAccessSecurity技术来保护代码使代码不致被恶意调用  作为一名NET开发人员你没日没夜地写代码你的组件运行在越来越多的机器上忽然有一天你发现你写的组件被引用

知识大全 详解.NET中的动态编译

详解.NET中的动态编译  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  代码的动态编译并执行是一

知识大全 详解C# 4.0中的新对象ExpandoObject

详解C#4.0中的新对象ExpandoObject  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

知识大全 详解.NET中的动态编译技术

详解.NET中的动态编译技术  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  代码的动态编译并执行

知识大全 详解.NET中的动态编译[1]

详解.NET中的动态编译[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  代码的动态编译并执

知识大全 详解.NET中的动态编译技术[1]

详解.NET中的动态编译技术[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  代码的动态编译

知识大全 C# 4.0中泛型协变性和逆变性详解

C#4.0中泛型协变性和逆变性详解  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  VS的推出会为

知识大全 用Delphi 6开发ASP上传组件详解

用Delphi6开发ASP上传组件详解  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  文件上传是

知识大全 .NET框架4.0中都有些什么

.NET框架4.0中都有些什么?  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  前不久在美国洛杉