Sdílet prostřednictvím


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 nechcete, aby byl num2 v předchozím příkladu zadán jako Integer, můžete určit 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 by num2 v předchozím příkladu bylo polem třídy místo místní proměnné v rámci procedury, deklarace by způsobila chybu při zapnutém Option Strict a klasifikovala by num2 jako Object při vypnutém Option Strict. Podobně se místní odvození typu nevztahuje na proměnné na úrovni procedury deklarované jako Static.

Odvození typu vs. pozdní vazba

Kód, který používá odvození typu, se podobá kódu, který spoléhá na pozdní vazbu. Nicméně, odvozování typů silně typuje proměnnou namísto ponechá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, num2, jako 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ému vývojovému prostředí (IDE) jazyka Visual Basic poskytovat pomoc funkce IntelliSense k členům objektu. Včasné vazby jsou také preferovány kvůli výkonu. 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}

Je vhodné použít odvození typu k určení typu řídicí proměnné smyčky. V následujícím kódu kompilátor odvodí, že number je Integer, protože someNumbers2 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()

Infer možnost

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 Option Infer a Kompilační stránka, Návrhář projektu (Visual Basic).

Viz také