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

时间:2014-09-01 14:19:51

标签: 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
如果输入"输入,

intellisense无法识别我的属性。"然后按ctrl + space。

但是,如果我使用

初始化我的变量
Dim input As VerifiableText
input = New VerifiableText

intellisense正确地建议我的财产。

这不是一个真正的问题,但我想了解这种行为。

谢谢!

1 个答案:

答案 0 :(得分:2)

在这种情况下,它可能与Scope和编译器选项有关,而不是属性样式。但它归结为VS不知道对象的实际类型,以便在Intellisense中提供列表项。

启用Option Infer时,VB将推断局部变量的类型。所以:

Sub SomeSub
   Dim v = New VerifiableText

...你没有声明一个Type但是VB从赋值中推断出它。关闭Option Infer时,vObject类型,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声明(以及其他内容)。