Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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 Static
deklariert 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 On
der 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).