|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
也许C#刚上市的时候有些抄袭net网页编程吧,但自从C#2.0上市之后,整个局面就扭转乾坤了,不但net网页编程在模仿C#,而且他从来都没能跟得上C#的脚步。InfoQ于不久前宣布了.NET代码左券组件供应下载的旧事。这个组件是对.NET的主要增补,此次我们将供应更加具体的内容。
假如要在.NET4.0公布之前利用代码左券,我们能够在VisualStudio项目中援用程序集Microsoft.Contracts.dll,该程序集安装在%PROGRAMFILES%/Microsoft/Contracts/PublicAssemblies目次下。.NET4.0会在mscorlib.dll中包括左券组件。我们能够指定左券考证,可在编译时(静态)或在运转时(静态)实行校验。左券包括几品种型:前置前提(Preconditions)、后置前提(Postconditions)、对象稳定量(ObjectInvariants)、断言(Assertions)、假定(Assumptions)、量词(Quantifiers)、接口左券(InterfaceContracts)和笼统办法左券(AbstractMethodContracts)。
前置前提利用Contract.Requires()举行界说,假如在编译时利用了标记(Symbol)CONTRACTS_FULL或CONTRACTS_PRECONDITIONS,那末IL中就会包括其编译了局。比方:- Contract.Requires(x!=null);
复制代码 以下所示,前置前提一般作为办法体中的参数考证,以下所示:- publicRational(intnumerator,intdenominator){Contract.Requires(denominator!=0);this.numerator=numerator;this.denominator=denominator;}
复制代码 假如不切合Contract.Requires()指定的前提,就会挪用Debug.Assert(false),然后挪用Environment.FailFast()。假如不论在编译时利用哪一个标记,您都但愿程序会合包括前置前提,那末可使用Contract.RequiresAlways()。
当办法停止时,后置前提暗示其了局必要满意的左券。它经由过程Contract.Ensures()办法指定,以下例所示:- publicintDenominator{get{Contract.Ensures(Contract.Result()!=0);returnthis.denominator;}}
复制代码 固然仿佛在前往了局之前就指定了前提,实践它仍是会在前往了局以后,挪用者失掉了局之行进行考证。
对象稳定量则为每一个实例指定前提。- [ContractInvariantMethod]protectedvoidObjectInvariant(){Contract.Invariant(this.denominator!=0);}
复制代码 至于其他范例的左券,断言暗示为Contract.Assert(),假定则暗示为Contract.Assume()。一个失利的Assert()会挪用Debug.Assert(false)。假定与运转时断言类似,分歧的地方在于静态查验的体例。假定用于指定“希冀”应当切合的前提,而因为某些限定,该前提没法失掉编译器的考证。
接口左券为接口指定前提。它们利用在联系关系于接口的自力类上,由于接口办法只能声明,而不克不及具有办法体。关于笼统办法左券一样云云。
以下为一个利用左券的类:可用链接:InfoQ关于代码左券的旧事,代码左券下载(MSI),代码左券的在线文档(PDF),微软研讨院的代码左券网站。
检察英文原文:DetailsonUsingCodeContracts
本文出自:http://www.infoq.com/cn/news/2009/03/Code-Contracts-Details
听03很多师兄说主讲老师杭城方讲课很差就连旁听也没有去了) |
|