Freigeben über


Lokale Typableitung (Visual Basic)

Der Visual Basic-Compiler verwendet typinferenz , um die Datentypen lokaler Variablen zu bestimmen, die ohne Eine As Klausel deklariert wurden. Der Compiler leitet den Typ der Variablen vom Typ des Initialisierungsausdrucks ab. Auf diese Weise können Sie Variablen deklarieren, ohne explizit einen Typ anzugeben, wie im folgenden Beispiel gezeigt. Als Ergebnis der Deklarationen sind sowohl num1 als auch num2 stark typisiert als Integer.

Public Sub inferenceExample()

    ' Using explicit typing.
    Dim num1 As Integer = 3

    ' Using local type inference.
    Dim num2 = 3

End Sub

Hinweis

Wenn num2 im vorherigen Beispiel nicht als Integer eingestuft werden soll, können Sie einen anderen Typ mithilfe einer Deklaration wie Dim num3 As Object = 3 oder Dim num4 As Double = 3 spezifizieren.

Hinweis

Typinferenz kann nur für nicht statische lokale Variablen verwendet werden; Sie kann nicht verwendet werden, um den Typ von Klassenfeldern, Eigenschaften oder Funktionen zu bestimmen.

Lokale Typreferenz wird auf Prozedurebene angewendet. Es kann nicht verwendet werden, um Variablen auf Modulebene zu deklarieren (innerhalb einer Klasse, Struktur, eines Moduls oder einer Schnittstelle, jedoch nicht innerhalb einer Prozedur oder eines Blocks). Wenn num2 im vorherigen Beispiel anstelle einer lokalen Variablen in einer Prozedur ein Feld einer Klasse wäre, würde die Deklaration mit aktivierter Option Strict einen Fehler verursachen und num2 mit deaktivierter Object als ein Option Strict klassifizieren. Ebenso gilt die lokale Typinference nicht für Prozedurebenenvariablen, die als Staticdeklariert werden.

Typrückschlüsse im Vergleich zu späten Bindungen

Code, der Typinferenz verwendet, ähnelt Code, der auf späte Bindung basiert. Bei einem Typrückschluss wird die Variable jedoch stark typisiert, anstatt sie als Object zu übernehmen. Der Compiler verwendet den Initialisierer einer Variablen, um den Typ der Variablen zur Kompilierungszeit zu bestimmen, 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 der von spät gebundenen Variablen, für die der Typ nur zur Laufzeit bekannt ist. Das frühzeitige Kennen des Typs ermöglicht es dem Compiler, Probleme vor der Ausführung zu identifizieren, Arbeitsspeicher genau zuzuweisen und andere Optimierungen durchzuführen. Frühe Bindung ermöglicht auch die integrierte Visual Basic-Entwicklungsumgebung (IDE), IntelliSense-Hilfe zu den Elementen eines Objekts bereitzustellen. Frühe Bindung wird auch aus Performance-Gründen bevorzugt. Dies liegt daran, dass alle Daten, die in einer spät gebundenen Variablen gespeichert sind, als Object-Typ umschlossen werden müssen, und der Zugriff auf Member des Typs zur Laufzeit macht das Programm langsamer.

Beispiele

Typinferenz tritt auf, wenn eine lokale Variable ohne Klausel As deklariert und initialisiert wird. Der Compiler verwendet den Typ des zugewiesenen Anfangswerts als Typ der Variablen. Beispielsweise deklariert jede der folgenden Codezeilen eine Variable vom Typ String.

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

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

Der folgende Code veranschaulicht zwei äquivalente Methoden zum Erstellen eines Arrays mit ganzen Zahlen.

' 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}

Es ist praktisch, Typinferenz zu verwenden, um den Typ einer Schleifensteuerungsvariable zu bestimmen. Im folgenden Code leitet der Compiler ab, dass number ein Integer ist, weil someNumbers2 aus dem vorherigen Beispiel ein Array von Ganzzahlen ist.

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

Die lokale Typinferenz kann in Using-Anweisungen verwendet werden, um den Typ des Ressourcennamens festzulegen, wie im folgenden Beispiel gezeigt.

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. Beide pList1 und pList2 sind Arrays 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

Option Infer ermöglicht ihnen anzugeben, ob lokale Typinferenz in einer bestimmten Datei zulässig ist. Um die Option zu aktivieren oder zu blockieren, geben Sie am Anfang der Datei eine der folgenden Anweisungen ein.

Option Infer On

Option Infer Off

Wenn Sie in Ihrem Code keinen Wert Option Infer angeben, lautet Option Infer Onder Compilerstandard .

Wenn der in einer Datei festgelegte Option Infer Wert mit dem in der IDE oder in der Befehlszeile festgelegten Wert in Konflikt steht, hat der Wert in der Datei Vorrang.

Weitere Informationen finden Sie unter Option Infer Statement und Compile Page, Project Designer (Visual Basic).

Siehe auch