Sdílet prostřednictvím


Odvození místního typu (Visual Basic)

Kompilátor Visual Basic používá odvození typu datové typy lokální proměnné deklarované bez určení As klauzule.Kompilátor odvodí typ proměnné z typu výrazu inicializace.Umožňuje deklarovat proměnné bez výslovně uvede typ, jak je znázorněno v následujícím příkladu. O prohlášení i num1 a num2 silný jako celá čísla.

Public Sub inferenceExample()

    ' Using explicit typing. 
    Dim num1 As Integer = 3

    ' Using local type inference. 
    Dim num2 = 3

End Sub

[!POZNÁMKA]

Chcete-li num2 v předchozím příkladu zadat jako Integer, můžete určit jiný typ pomocí prohlášení jako Dim num3 As Object = 3 nebo Dim num4 As Double = 3.

Odvození typu místní se vztahuje na úrovni procedury.Nelze použít deklaraci proměnných na úrovni modulu (v rámci třídy, struktury, modulu nebo rozhraní, ale nejsou v rámci postupu nebo blok).Pokud num2 v předchozím příkladu byly oblasti třídy namísto místní proměnné v proceduře, prohlášení by způsobit chybu s Option Strict a klasifikaci by num2 jako Object s Option Strict vypnout.Podobně odvození typu místní nevztahuje na postup úrovně proměnné deklarované jako Static.

Zadejte odvození vs.Pozdní vazba.

Kód, zadejte používá odvození podobný kód, který se opírá o pozdní vazbu.Však důrazně odvození typu typy proměnnou, ponechejte jako Object.Kompilátor používá k určení typu proměnné v době kompilace k vytvoření kódu s časnou vazbou inicializátoru proměnné.V předchozím příkladu num2, like num1, je zadán jako Integer.

Chování časnou vazbou proměnné se liší od proměnných pozdní vazbou, jejichž typ je znám pouze v době spuštění.Znalost typu včasné umožňuje kompilátor identifikovat problémy před spuštěním, přesně přidělit paměť a provádět další optimalizace.Časná vazba umožňuje také integrované vývojové prostředí (IDE) IntelliSense nápovědu o členy objektu Visual Basic.Upřednostňovaný výkonu je také časná vazba.Důvodem je, že všechna data uložená v pozdní vazbou proměnné musí být zabaleny jako typ Object, a přístup k členům typu v době spuštění programu pomalejší.

Příklady

Lokální proměnná je deklarována bez dojde k odvození typu As klauzule a inicializován.Kompilátor používá typ počáteční hodnoty přiřazené jako typ proměnné.Například každý následující řádky kódu deklaruje proměnnou typu String.

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

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

Následující kód ukazuje dva rovnocenné způsoby vytvoření pole celých čísel.

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

Je vhodné použít k určení typu řídicí proměnná smyčky odvození typu.Následující kód kompilátoru odvodí, že number je Integer protože someNumbers2 z předchozího příkladu je pole obsahující celá čísla.

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

Odvození typu místní lze v Using příkazy vytvořit typ názvu prostředku jako příklad.

Using proc = New System.Diagnostics.Process
    ' Insert code to work with the resource. 
End Using

Typ proměnné také odvodit od vrácené hodnoty funkce a, jak ukazuje následující příklad.I pList1 a pList2 jsou matice procesů, protože Process.GetProcesses vrátí matici procesy.

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

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

Možnost odvodit

Option Inferumožňuje určit, zda je povolena odvození typu místní určitého souboru.Možnost blokovat nebo povolit, zadejte jeden z následujících příkazů na začátku souboru.

Option Infer On

Option Infer Off

Pokud neurčíte hodnotu pro Option Infer v kódu, je výchozí kompilátor Option Infer On.Pro projekty upgrade z Visual Basic 2008 nebo starší, je výchozí kompilátor Option Infer Off.

Pokud je nastavena hodnota pro Option Infer v souboru konflikty s nastavenou hodnotu v IDE nebo na příkazovém řádku, hodnota v souboru má přednost.

Další informace naleznete v tématu Option Infer – příkaz a Stránka Kompilovat, návrhář projektu (Visual Basic).

Omezení

Odvození typu lze použít pouze pro místní proměnné nestatický; Nelze určit typ pole Třída, vlastnosti nebo funkce.

Viz také

Referenční dokumentace

For Each...Next – příkaz (Visual Basic)

For...Next – příkaz (Visual Basic)

Option Infer – příkaz

/optioninfer

Koncepty

Anonymní typy (Visual Basic)

Statické a pozdní vazby (Visual Basic)

Představení technologie LINQ v jazyce Visual Basic