Místní odvození 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 Možnost odvodit prohlášení a Kompilace stránky projektu Designer (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
Pro každý...Další příkaz (Visual Basic)
Pro...Další příkaz (Visual Basic)