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

Kompilátor jazyka Visual Basic používá odvození typu k určení datových typů místních proměnných deklarovaných bez As klauzule. Kompilátor odvodí typ proměnné z typu inicializačního výrazu. To umožňuje deklarovat proměnné bez explicitního uvedení typu, jak je znázorněno v následujícím příkladu. V důsledku deklarací jsou obě num1 a num2 silně zadané 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:

Pokud v předchozím příkladu nechcete num2 , aby byl zadán jako Integertyp , můžete zadat jiný typ pomocí deklarace jako Dim num3 As Object = 3 nebo Dim num4 As Double = 3.

Poznámka:

Odvození typu lze použít pouze pro nestatické místní proměnné; Nelze jej použít k určení typu polí třídy, vlastností nebo funkcí.

Odvození místního typu se vztahuje na úrovni procedury. Nelze ji použít k deklaraci proměnných na úrovni modulu (v rámci třídy, struktury, modulu nebo rozhraní, ale ne v rámci procedury nebo bloku). Pokud num2 by v předchozím příkladu bylo pole třídy místo místní proměnné v rámci procedury, deklarace by způsobila chybu s Option Strict zapnutou chybou a klasifikovala num2 by jako vypnuto Option StrictObject. Podobně se místní odvození typu nevztahuje na proměnné na úrovni procedury deklarované jako Static.

Odvození typu vs. pozdní vazby

Kód, který používá odvození typu, se podobá kódu, který spoléhá na pozdní vazbu. Nicméně, typ odvozování silné typy proměnné namísto opuštění jako Object. Kompilátor používá inicializátor proměnné k určení typu proměnné v době kompilace k vytvoření kódu s časnou vazbou. V předchozím příkladu , num2jako num1, je zadán jako .Integer

Chování proměnných s časnou vazbou se liší od chování proměnných s pozdní vazbou, pro které je typ znám pouze za běhu. Znalost typu v rané fázi umožňuje kompilátoru identifikovat problémy před spuštěním, přidělit paměť přesně a provést další optimalizace. Časná vazba také umožňuje integrované vývojové prostředí (IDE) jazyka Visual Basic poskytovat nápovědu intelliSense k členům objektu. Časná vazba je také upřednostňovaná pro výkon. Důvodem je to, že všechna data uložená v proměnné s pozdní vazbou musí být zabalena jako typ Objecta přístup k členům typu za běhu ztěžuje program.

Příklady

Odvození typu nastane, když je místní proměnná deklarována bez As klauzule a inicializována. Kompilátor jako typ proměnné používá typ přiřazené počáteční hodnoty. Například každý z následujících řádků 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 ekvivalentní 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}

K určení typu řídicí proměnné smyčky je vhodné použít odvození typu. V následujícím kódu kompilátor odvodí, že je Integer to proto, že numbersomeNumbers2 z předchozího příkladu je pole celých čísel.

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

Odvození místního typu lze použít v Using příkazech k vytvoření typu názvu prostředku, jak ukazuje následující příklad.

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

Typ proměnné lze také odvodit z návratových hodnot funkcí, jak ukazuje následující příklad. Obě pList1 a pList2 jsou pole procesů, protože Process.GetProcesses vrací pole procesů.

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

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

Odvození možnosti

Option Infer umožňuje určit, zda je v určitém souboru povoleno odvozovat místní typ. Pokud chcete povolit nebo zablokovat možnost, zadejte na začátku souboru jeden z následujících příkazů.

Option Infer On

Option Infer Off

Pokud v kódu nezadáte hodnotu Option Infer , je výchozí hodnota Option Infer Onkompilátoru .

Pokud je hodnota nastavená Option Infer v souboru v konfliktu s hodnotou nastavenou v integrovaném vývojovém prostředí nebo na příkazovém řádku, má hodnota v souboru přednost.

Další informace naleznete v tématu Příkaz odvození možnosti a stránka kompilace, Návrhář projektu (Visual Basic).

Viz také