我正在使用Visual Studio 2013,并尝试使用以下代码手动跳过实现getter和setter:
Public Class VerifiableText
Public Property verifier() As IVerifier
Public Property text() As String
Function verify() As Boolean
Return verifier.verify(text)
End Function
End Class
到目前为止,这似乎很好,但我想知道以下行为:
如果我使用
初始化我的课程Dim input = New VerifiableText
如果输入"输入,intellisense无法识别我的属性。"然后按ctrl + space。
但是,如果我使用
初始化我的变量Dim input As VerifiableText
input = New VerifiableText
intellisense正确地建议我的财产。
这不是一个真正的问题,但我想了解这种行为。
谢谢!
答案 0 :(得分:2)
在这种情况下,它可能与Scope
和编译器选项有关,而不是属性样式。但它归结为VS不知道对象的实际类型,以便在Intellisense中提供列表项。
启用Option Infer
时,VB将推断局部变量的类型。所以:
Sub SomeSub
Dim v = New VerifiableText
...你没有声明一个Type但是VB从赋值中推断出它。关闭Option Infer
时,v
为Object
类型,VS IDE无法提供智能感知帮助(此处可能就是这种情况)。请注意,为了进行编译,Option Strict
也必须关闭,否则您将收到未声明Type的错误。
如果这是一个模块级变量,则情况略有不同:
Private v = New VerifiableText
Sub SomeSub...
' ...
v
仍属于Object
类型,因为Option Infer
仅适用于本地变量。您还将从Option Strict
收到错误,因为未声明Type。解决方案包括声明中的类型:
Private v As New VerifiableText ' As... is required for Option Strict
Dim v As New VerifiableText ' As... is optional under Option Infer
在这两种情况下,你都为v
声明了一个Type,所以现在Intellisense应该可以工作了。您应该打开Option Strict
然后IDE /编译器将帮助错过Type声明(以及其他内容)。