Lokaler Typrückschluss

Aktualisiert: Juli 2008

Der Compiler in Visual Basic 2008 ermittelt durch Typrückschluss die Datentypen lokaler Variablen, die ohne eine As-Klausel deklariert werden. Der Compiler leitet den Typ der Variable vom Typ des Initialisierungsausdrucks ab. Dadurch können Sie Variablen deklarieren, ohne explizit einen Typ anzugeben, wie im folgenden Beispiel gezeigt.

Public Sub inferenceExample()

    ' Using explicit typing.
    Dim num1 As Integer = 3

    ' Using local type inference.
    Dim num2 = 3

End Sub
Hinweis:

Klassenfelder können nicht mit lokalem Typrückschluss deklariert werden. Wenn im vorherigen Beispiel num2 statt einer lokalen Variable ein Feld gewesen wäre, würde die Deklaration bei aktivierter Option Strict (On) einen Fehler verursachen und num2 bei deaktivierter Option Strict (Off) als ein Object klassifizieren. Dementsprechend können die Typen von statischen Variablen nicht per Rückschluss abgeleitet werden, wenn Option Strict aktiviert (On) ist. Bei deaktivierter Option Strict (Off) hat staticVar in Static staticVar = 5 den Typ Object.

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 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 zuordnen 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.

Hinweis:

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.

Beispiele

Ein Typrückschluss erfolgt, wenn einer lokalen Variable, die ohne eine As-Klausel deklariert wird, ein Wert zugewiesen wird. Der Compiler verwendet den Typ des Werts als Typ der Variablen. Beispielsweise wird in den folgenden Codezeilen jeweils eine Variable des Typs 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 ermitteln. Im folgenden Code wird vom Compiler mit Typrückschluss abgeleitet, dass number ein Integer ist, da someNumbers2 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 sind Listen von Prozessen.

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

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

Option Infer

Mit der neuen Option 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 im Code keinen Wert für Option Infer angeben, ist der Compilerstandardwert für in Visual Basic 2008 erstellte Projekte Option Infer On bzw. für aus früheren Versionen aktualisierte Projekte Option Infer Off. Weitere Informationen finden Sie unter Option Infer-Anweisung und unter /optioninfer.

Hinweis:

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.

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

Konzepte

Anonyme Typen

Frühes und spätes Binden

Einführung in LINQ in Visual Basic

Referenz

For Each...Next-Anweisung (Visual Basic)

For...Next-Anweisung (Visual Basic)

Option Infer-Anweisung

/optioninfer

Änderungsprotokoll

Date

Versionsgeschichte

Grund

Juli 2008

Name der Schleifensteuerungsvariable im Textabschnitt "Beispiel" wurde von num in number geändert, damit er dem Namen im Code entspricht.

Kundenfeedback.