VB.Net构造函数中的代码契约 [英] Code contracts in VB.Net Constructors

查看:77
本文介绍了VB.Net构造函数中的代码契约的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试在VB.NET中为构造函数编写一个合同,但它无法使用


Erreur  17 格式错误的合同:在方法MyClass中。 #ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext),assembly [...]


方法体是


< pre style ="font-size:13px; background:white; color:black; font-family:Consolas"> 受保护的  Sub   (info  As   SerializationInfo ,  context  As   StreamingContext
MyBase 。新(info,  context)
合约。合约。确保(MediaType  IsNot   Nothing
合约s。合同 .Ensures(MissingProperties  IsNot   没有
合同。合同 .Ensures(MissingProperties.Count >  0)

_MediaType  ; =  info.GetValue(" MediaType" ,  GetType (PhysicalObjects。 MediaType ))
_MissingProperties  =  info.GetValue(" MissingProperties" ,  ; GetType ICollection   ; 字符串)))
结束  Sub


其中MediaType和MissingProperties属于成员属性。我认为问题与合同不是第一条指令但MyBase.New也需要成为第一条指令这一事实有关。然后,任何人都有解决方案吗?


BKQc

解决方案

我恐怕不是能够重现这个问题。你能发一个完整的例子吗?例如,这是我尝试的示例,它似乎工作正常。

 Imports System.Diagnostics.Contracts 

公共类B
继承System.Object
Public Sub New(a as Integer)
End Sub
End Class

Public Class C
继承B

受保护的子新(x为整数)
MyBase.New(x)
Contract.Requires(0< x)
Contract.Ensures(Name IsNot Nothing)
End Sub

公共属性名称字符串
结束类


I'm trying to write a contract for a constructor in VB.NET but it fails to cmpile with

Erreur 17 Malformed contract.: In method MyClass.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext), assembly [...]

The method body is

		Protected Sub New(info As SerializationInfo, context As StreamingContext)
			MyBase.New(info, context)
			Contracts.Contract.Ensures(MediaType IsNot Nothing)
			Contracts.Contract.Ensures(MissingProperties IsNot Nothing)
			Contracts.Contract.Ensures(MissingProperties.Count > 0)
 
			_MediaType = info.GetValue("MediaType"GetType(PhysicalObjects.MediaType))
			_MissingProperties = info.GetValue("MissingProperties"GetType(ICollection(Of String)))
		End Sub

Where MediaType and MissingProperties are to member properties. I suppose the problem has something to do with the fact that contracts are not the first instruction but MyBase.New needs also to be the first instruction. Then, anyone has a solution?


BKQc

解决方案

I'm afraid I was not able to reproduce the problem. Can you please post a complete example? For instance, this is the example I tried and it seemed to work just fine.

Imports System.Diagnostics.Contracts
 
  Public Class B
    Inherits System.Object
    Public Sub New(a as Integer)
    End Sub
  End Class
 
  Public Class C
    Inherits B
 
    Protected Sub New(x as Integer)
	  MyBase.New(x)
	  Contract.Requires(0 < x)
	  Contract.Ensures(Name IsNot Nothing)
    End Sub
	
    Public Property Name As String
  End Class


这篇关于VB.Net构造函数中的代码契约的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆