Lokaler Typrückschluss (Visual Basic)
Der Visual Basic -Compiler ermittelt durch Typrückschluss die Datentypen lokaler Variablen, die ohne eine As-Klausel deklariert werden. Der Compiler leitet den Typ der Variablen vom Typ des Initialisierungsausdrucks ab. Dadurch können Sie Variablen deklarieren, ohne explizit einen Typ anzugeben, wie im folgenden Beispiel gezeigt. Im Ergebnis der Deklarationen sind sowohl num1 als auch num2 stark typisiert als ganze Zahlen.
Public Sub inferenceExample()
' Using explicit typing.
Dim num1 As Integer = 3
' Using local type inference.
Dim num2 = 3
End Sub
Tipp
Wenn Sie nicht möchten, dass num2 im vorherigen Beispiel als Integer typisiert wird, können Sie mit einer Deklaration wie Dim num3 As Object = 3 oder Dim num4 As Double = 3 einen anderen Typ angeben.
Der lokale Typrückschluss ist auf der Prozedurebene gültig. Damit können keine Variablen auf der Modulebene deklariert werden (d. h. in einer Klasse, einer Struktur, einem Modul oder einer Schnittstelle, jedoch nicht in einer Prozedur oder in einem Block). Wenn im vorherigen Beispiel num2 statt einer lokalen Variablen in einer Prozedur ein Feld einer Klasse gewesen wäre, würde die Deklaration bei aktivierter Option Strict (On) einen Fehler verursachen und num2 bei deaktivierter Option Strict (Off) als Object klassifizieren. Entsprechend gilt ein lokaler Typrückschluss nicht für Verfahrensebenenvariablen, die als Static deklariert sind.
Typrückschluss undspäte Bindung
Code, in dem Typrückschluss verwendet wird, ähnelt Code, der auf später Bindung beruht. Beim Typrückschluss werden Variablen jedoch stark typisiert, statt sie als Object zu belassen. Der Typ einer Variablen wird vom Compiler zur Kompilierungszeit anhand des Initialisierers der Variable ermittelt, um früh gebundenen Code zu erzeugen. Im vorherigen Beispiel wird num2 wie num1 als Integer typisiert.
Das Verhalten früh gebundener Variablen unterscheidet sich von dem spät gebundener Variablen, deren Typ nur zur Laufzeit bekannt ist. Durch ein frühes Erkennen des Typs kann der Compiler Probleme vor der Ausführung erkennen, Speicher genau belegen und weitere Optimierungen durchführen. Außerdem ermöglicht die frühe Bindung der integrierten Entwicklungsumgebung (IDE) von Visual Basic, IntelliSense-Hilfen für die Member eines Objekts bereitzustellen. Frühe Bindung ist auch aus Leistungsgründen zu bevorzugen. Der Grund hierfür besteht darin, dass alle in einer spät gebundenen Variable gespeicherten Daten als Typ Object umschlossen werden müssen und das Programm durch Zugriffe auf Member dieses Typs zur Laufzeit langsamer wird.
Beispiele
Ein Typrückschluss erfolgt beim Initialisieren einer lokalen Variablen, die ohne As-Klausel deklariert wurde. Der Compiler verwendet den Typ des zugewiesenen Anfangswerts als Typ der Variablen. Beispielsweise wird in jeder der folgenden Codezeilen jeweils eine Variable vom Typ String deklariert.
' Using explicit typing.
Dim name1 As String = "Springfield"
' Using local type inference.
Dim name2 = "Springfield"
Im folgenden Code werden zwei gleichwertige Möglichkeiten veranschaulicht, ein Array mit Ganzzahlen zu erstellen.
' 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}
Mit Typrückschluss können Sie den Typ einer Schleifensteuerungsvariablen auf einfache Weise ermitteln. Im folgenden Code wird vom Compiler mit Typrückschluss abgeleitet, dass number ein Integer ist, da someNumbers2 aus dem vorherigen Beispiel ein Array mit Ganzzahlen ist.
Dim total = 0
For Each number In someNumbers2
total += number
Next
Lokaler Typrückschluss kann in Using-Anweisungen verwendet werden, um den Typ des Ressourcennamens festzulegen, wie im folgenden Beispiel veranschaulicht.
Using proc = New System.Diagnostics.Process
' Insert code to work with the resource.
End Using
Der Typ einer Variablen kann auch aus den Rückgabewerten von Funktionen abgeleitet werden, wie im folgenden Beispiel veranschaulicht. Sowohl pList1 als auch pList2 ist ein Array von Prozessen, da Process.GetProcesses ein Array von Prozessen zurückgibt.
' Using explicit typing.
Dim pList1() As Process = Process.GetProcesses()
' Using local type inference.
Dim pList2 = Process.GetProcesses()
Option Infer
Mit Option Infer können Sie angeben, ob der lokale Typrückschluss in einer bestimmten Datei zulässig ist. Geben Sie am Anfang der Datei eine der folgenden Anweisungen ein, um die Option zu aktivieren oder zu sperren.
Option Infer On
Option Infer Off
Wenn Sie in Ihrem Code keinen Wert für Option Infer angeben, ist die Standardeinstellung des Compilers Option Infer On. Bei Projekten, die von Visual Basic 2008 oder einer früheren Version aktualisiert wurden, ist die Compilerstandardeinstellung Option Infer Off.
Tipp
Wenn der für Option Infer in einer Datei festgelegte Wert dem in der IDE oder auf der Befehlszeile festgelegten Wert widerspricht, hat der Wert in der Datei Vorrang.
Weitere Informationen finden Sie unter Option Infer-Anweisung und Seite "Kompilieren", Projekt-Designer (Visual Basic).
Beschränkungen
Typrückschluss kann nur für nicht statische, lokale Variablen verwendet werden, und nicht, um den Typ von Klassenfeldern, Eigenschaften oder Funktionen zu ermitteln.
Siehe auch
Referenz
For Each...Next-Anweisung (Visual Basic)
For...Next-Anweisung (Visual Basic)