Udostępnij za pośrednictwem


Wnioskowanie o typie lokalnym (Visual Basic)

Kompilator Visual Basic używa typu wnioskowanie do określenia typów danych zmiennych lokalnych zadeklarowanych bez As klauzuli.Typ zmiennej z typem wyrażenia inicjowania jest ustalany przez kompilator.Pozwala to na deklarowaniu zmiennych bez jawnego podania typu, jak pokazano w poniższym przykładzie. Z deklaracji zarówno num1 i num2 zdecydowanie są wpisywane jako liczby całkowite.

Public Sub inferenceExample()

    ' Using explicit typing. 
    Dim num1 As Integer = 3

    ' Using local type inference. 
    Dim num2 = 3

End Sub

[!UWAGA]

Jeśli nie chcesz num2 w poprzednim przykładzie, aby być wpisana jako Integer, można określić innego typu za pomocą deklaracji, takich jak Dim num3 As Object = 3 lub Dim num4 As Double = 3.

Wnioskowanie typu lokalnego stosuje się na poziomie procedury.Nie można zadeklarować zmienne na poziomie modułu (w obrębie klasy, struktury, moduł lub interfejsu ale nie wewnątrz procedury lub blok).Jeśli num2 w poprzednim przykładzie zostały pole klasy zamiast zmiennej lokalnej w procedurze, deklaracja może spowodować błąd związany z Option Strict i czy klasyfikowanie num2 jako Object z Option Strict off.Podobnie, wnioskowanie typu lokalnego nie stosuje się do procedury zmiennych poziomu zadeklarowany jako Static.

Wpisz wnioskowanie vs.Późnym wiązaniem

Kod, że używa typu wnioskowanie podobny do kodu, który opiera się na późnym wiązaniem.Jednakże typ wnioskowanie zdecydowanie typy zmiennej zamiast pozostawiania go jako Object.Kompilator używa inicjatorze zmiennej w celu określenia typu zmiennej w czasie kompilacji produkować wczesnym wiązaniem kodu.W poprzednim przykładzie num2, tak jak num1, jest wpisana jako Integer.

Zachowanie zmiennych wczesnym wiązaniem różni się od zmiennych z późnym wiązaniem, dla których typ jest znany tylko w czasie wykonywania.Znajomość typu wczesne pozwala zidentyfikować problemy przed wykonaniem, dokładnie przydzielić pamięci oraz wykonywać inne optymalizacje kompilatora.Wczesne wiązanie umożliwia również Visual Basic zintegrowane środowisko programistyczne (IDE), zapewnienie pomocy IntelliSense o członkach obiektu.Wczesne wiązanie jest również preferowane dla wydajności.Wynika to wszystkie dane przechowywane w zmiennej późnym wiązaniem muszą być pakowane jako typ Object, i w czasie wykonywania, uzyskiwanie dostępu do członków tego typu powoduje, że program wolniej.

Przykłady

Wnioskowanie typu występuje wówczas, gdy zmienna lokalna jest zadeklarowana bez As klauzuli i zainicjowany.Kompilator używa typu przypisanych wartości początkowe jako typ zmiennej.Na przykład, każdy z następujących wierszy kodu deklaruje zmienną typu String.

' Using explicit typing. 
Dim name1 As String = "Springfield" 

' Using local type inference. 
Dim name2 = "Springfield"

Poniższy kod ilustruje dwie równoważne metody tworzenia tablicy liczb całkowitych.

' Using explicit typing. 
Dim someNumbers1() As Integer = New Integer() {4, 18, 11, 9, 8, 0, 5}

' Using local type inference. 
Dim someNumbers2 = New Integer() {4, 18, 11, 9, 8, 0, 5}

Jest wygodne w użyciu typu wnioskowanie do określenia typu zmienna sterująca pętli.W poniższym kodzie kompilator ustali, że number jest Integer ponieważ someNumbers2 z poprzedniego przykładu jest tablica wartości całkowitych.

Dim total = 0
For Each number In someNumbers2
    total += number
Next

Wnioskowanie lokalne typu mogą być używane w Using instrukcji, aby ustanowić typu nazwa zasobu, jak w poniższym przykładzie zademonstrowano.

Using proc = New System.Diagnostics.Process
    ' Insert code to work with the resource. 
End Using

Typ zmiennej można również można wywnioskować na podstawie wartości zwracane funkcji, jak w poniższym przykładzie zademonstrowano.Obie pList1 i pList2 są tablicami procesy, ponieważ Process.GetProcesses zwraca tablicę procesów.

' Using explicit typing. 
Dim pList1() As Process = Process.GetProcesses()

' Using local type inference. 
Dim pList2 = Process.GetProcesses()

Opcja rozpoznać

Option InferUmożliwia określenie, czy w pliku dozwolona jest wnioskowanie typu lokalnego.Aby włączyć lub zablokować możliwość, wpisz jedno z następujących instrukcji na początku pliku.

Option Infer On

Option Infer Off

Jeśli nie określisz wartości dla Option Infer w kodzie, jest domyślnie kompilator Option Infer On.Dla projektów uaktualnione z Visual Basic 2008 lub starszym jest domyślnie kompilator Option Infer Off.

Jeśli wartość dla Option Infer w konflikty z zestawu wartości w IDE lub w wierszu polecenia, wartość w pliku ma pierwszeństwo.

Aby uzyskać więcej informacji, zobacz Option Infer — Instrukcja i Strona kompilowania, Projektant projektu (Visual Basic).

Ograniczenia

Wnioskowanie typu może służyć tylko do niestatycznego zmiennych lokalnych; nie można określić typu pola klasy, właściwości lub funkcji.

Zobacz też

Informacje

For Each...Next — Instrukcja (Visual Basic)

For...Next — Instrukcja (Visual Basic)

Option Infer — Instrukcja

/optioninfer

Koncepcje

Typy anonimowe (Visual Basic)

Wczesne i późne wiązania (Visual Basic)

Wprowadzenie do LINQ w Visual Basic