intellisense-在VB.NET visual Studio 2013中自动生成的属性



我使用的是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声明(以及其他内容)。

最新更新