Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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 Object
a 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 On
kompilá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).