Delen via


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 num1num2 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 Integertype 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, num2zoals , wordt num1getypt 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 Objecten 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 Onde 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.

Zie ook