Deductie van lokaal type (Visual Basic)
De Visual Basic-compiler gebruikt typedeductie om de gegevenstypen van lokale variabelen te bepalen die zonder component As
zijn gedeclareerd. De compiler bepaalt het type van de variabele van het type initialisatie-expressie. Hiermee kunt u variabelen declareren zonder expliciet een type op te geven, zoals wordt weergegeven in het volgende voorbeeld. Als gevolg van de declaraties worden beide sterk num1
num2
getypt als gehele getallen.
Public Sub inferenceExample()
' Using explicit typing.
Dim num1 As Integer = 3
' Using local type inference.
Dim num2 = 3
End Sub
Notitie
Als u niet wilt dat num2
in het vorige voorbeeld als een Integer
type wordt getypt, kunt u een ander type opgeven met behulp van een declaratie zoals Dim num3 As Object = 3
of Dim num4 As Double = 3
.
Notitie
Typedeductie kan alleen worden gebruikt voor niet-statische lokale variabelen; het kan niet worden gebruikt om het type klassevelden, eigenschappen of functies te bepalen.
Deductie van het lokale type is van toepassing op procedureniveau. Het kan niet worden gebruikt om variabelen op moduleniveau te declareren (binnen een klasse, structuur, module of interface, maar niet binnen een procedure of blok). Als num2
in het vorige voorbeeld een veld van een klasse was in plaats van een lokale variabele in een procedure, zou de declaratie een fout veroorzaken met Option Strict
aan en zou worden geclassificeerd num2
als een Object
met Option Strict
uit. Op dezelfde manier is deductie van het lokale type niet van toepassing op variabelen op procedureniveau die zijn gedeclareerd als Static
.
Type Deductie versus Late Binding
Code die gebruikmaakt van typedeductie lijkt op code die afhankelijk is van late binding. Typedeductie typt echter sterk de variabele in plaats van deze als Object
. De compiler gebruikt de initialisatiefunctie van een variabele om het type van de variabele tijdens het compileren te bepalen om vroege gebonden code te produceren. In het vorige voorbeeld, num2
zoals , wordt num1
getypt als een Integer
.
Het gedrag van vroege afhankelijke variabelen verschilt van die van late afhankelijke variabelen, waarvoor het type alleen tijdens runtime bekend is. Als u het type vroeg kent, kan de compiler problemen identificeren voordat het wordt uitgevoerd, het geheugen nauwkeurig toewijzen en andere optimalisaties uitvoeren. Met vroege binding kan de Visual Basic Integrated Development Environment (IDE) ook IntelliSense Help verstrekken over de leden van een object. Vroege binding heeft ook de voorkeur voor prestaties. Dit komt doordat alle gegevens die zijn opgeslagen in een laat gebonden variabele, moeten worden verpakt als type Object
en toegang krijgen tot leden van het type tijdens runtime, maakt het programma langzamer.
Voorbeelden
Typedeductie treedt op wanneer een lokale variabele wordt gedeclareerd zonder een As
component en geïnitialiseerd. De compiler gebruikt het type van de toegewezen initiële waarde als het type van de variabele. Elk van de volgende regels code declareert bijvoorbeeld een variabele van het type String
.
' Using explicit typing.
Dim name1 As String = "Springfield"
' Using local type inference.
Dim name2 = "Springfield"
De volgende code laat twee equivalente manieren zien om een matrix met gehele getallen te maken.
' 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}
Het is handig om typedeductie te gebruiken om het type lusbesturingsvariabele te bepalen. In de volgende code wordt afgeleid dat number
de compiler een Integer
omdat someNumbers2
uit het vorige voorbeeld een matrix met gehele getallen is.
Dim total = 0
For Each number In someNumbers2
total += number
Next
Deductie van het lokale type kan worden gebruikt in Using
instructies om het type resourcenaam vast te stellen, zoals in het volgende voorbeeld wordt gedemonstreert.
Using proc = New System.Diagnostics.Process
' Insert code to work with the resource.
End Using
Het type variabele kan ook worden afgeleid van de retourwaarden van functies, zoals in het volgende voorbeeld wordt gedemonstreerd. Beide pList1
en pList2
zijn matrices van processen omdat Process.GetProcesses
een matrix van processen wordt geretourneerd.
' Using explicit typing.
Dim pList1() As Process = Process.GetProcesses()
' Using local type inference.
Dim pList2 = Process.GetProcesses()
Optie afleiden
Option Infer
hiermee kunt u opgeven of deductie van het lokale type is toegestaan in een bepaald bestand. Als u de optie wilt in- of blokkeren, typt u een van de volgende instructies aan het begin van het bestand.
Option Infer On
Option Infer Off
Als u geen waarde Option Infer
voor in uw code opgeeft, is Option Infer On
de standaardwaarde van de compiler.
Als de waarde die in een bestand is ingesteld Option Infer
, conflicteert met de waarde die is ingesteld in de IDE of op de opdrachtregel, heeft de waarde in het bestand voorrang.
Zie Option Infer Statement and Compile Page, Project Designer (Visual Basic) voor meer informatie.