VB.Net构造函数中的代码契约 [英] Code contracts in VB.Net Constructors
问题描述
我正在尝试在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屋!