我使用的是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
如果我输入"input."并按ctrl+space,intellisense将无法识别我的属性。
但是,如果我使用初始化我的变量
Dim input As VerifiableText
input = New VerifiableText
intellisense正在正确地建议我的属性。
这其实不是问题,但我想了解这种行为。
谢谢!
在这种情况下,它可能更多地与Scope
和编译器选项有关,而不是与属性样式有关。但归根结底,VS不知道对象的实际类型,以便在Intellisense中提供列表项。
在Option Infer
打开的情况下,VB将推断局部变量的类型。因此:
Sub SomeSub
Dim v = New VerifiableText
您尚未声明类型,但VB从赋值中推断出它。在Option Infer
关闭的情况下,v
是类型Object
,VS IDE无法提供Intellisense帮助(这里可能是这种情况)。请注意,要进行编译,还必须关闭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
声明了一个类型,因此现在Intellisense应该可以工作了。但是,您应该打开Option Strict
,IDE/编译器将帮助处理遗漏的Type声明(以及其他内容)。