2014-09-01 35 views
0

我使用Visual Studio 2013,並試圖跳過實現getter和setter手動只用下面的代碼:智能感知 - 在VB.NET的Visual Studio自動生成的屬性2013

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 +空格。

不過,如果我使用初始化

Dim input As VerifiableText 
input = New VerifiableText 

智能感知正確提示我的財產我的變量。

這不是一個真正的問題,但我想了解這種行爲。

謝謝!

回答

2

在這種情況下,它可能與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... 
    ' ... 

vObject型的還是因爲Option Infer只能在本地變量。您還將從Option Strict中收到錯誤,因爲未聲明類型。解決的辦法是包括在申報類型:

Private v As New VerifiableText   ' As... is required for Option Strict 

Dim v As New VerifiableText    ' As... is optional under Option Infer 

在這兩種情況下,你已經申報v型所以現在智能感知應該工作。然而,您應該打開Option Strict,IDE /編譯器將幫助錯過類型聲明(等等)。