Option Infer – příkaz
Povolí použití odvozování místního typu v deklarování proměnných.
Syntaxe
Option Infer { On | Off }
Součástky
Pojem | definice |
---|---|
On |
Nepovinné. Povolí odvození místního typu. |
Off |
Nepovinné. Zakáže odvozovat místní typ. |
Poznámky
Pokud chcete nastavit Option Infer
soubor, zadejte Option Infer On
nebo Option Infer Off
v horní části souboru před jakýkoli jiný zdrojový kód. 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.
Když nastavíte hodnotu Option Infer
On
, můžete deklarovat místní proměnné bez explicitního zadání datového typu. Kompilátor odvodí datový typ proměnné z typu inicializačního výrazu.
Na následujícím obrázku Option Infer
je zapnutá. Proměnná v deklaraci Dim someVar = 2
je deklarována jako celé číslo podle odvození typu.
Následující snímek obrazovky ukazuje Technologii IntelliSense, když je zapnutá možnost odvození:
Na následujícím obrázku Option Infer
je vypnutý. Proměnná v deklaraci Dim someVar = 2
je deklarována jako odvození Object
typu. V tomto příkladu je nastavení Option Strict nastaveno na Vypnuto na stránce Kompilace, Návrhář projektu (Visual Basic).
Následující snímek obrazovky ukazuje Technologii IntelliSense, když je vypnutá možnost odvození:
Poznámka:
Pokud je proměnná deklarována jako Object
proměnná, může se typ běhu během běhu programu změnit. Visual Basic provádí operace označované jako boxing a unboxing k převodu Object
mezi a typem hodnoty, což zpomaluje provádění. Informace o boxování a rozbalování naleznete v tématu Specifikace jazyka Visual Basic.
Odvození typu se vztahuje na úrovni procedury a nevztahuje se mimo proceduru ve třídě, struktuře, modulu nebo rozhraní.
Další informace najdete v tématu Odvození místního typu.
Není-li k dispozici příkaz odvození možnosti
Pokud zdrojový kód neobsahuje Option Infer
příkaz, použije se nastavení Odvození možnosti na stránce Kompilace Návrhář projektu (Visual Basic). Pokud se použije kompilátor příkazového řádku, použije se možnost kompilátoru -optioninfer .
Nastavení možnosti odvození v integrovaném vývojovém prostředí
V Průzkumník řešení vyberte projekt. V nabídce Projekt klepněte na příkaz Vlastnosti.
Klikněte na kartu Kompilace .
Nastavte hodnotu v poli Odvozovat možnost.
Při vytváření nového projektu je nastavení Odvození možnosti na kartě Kompilace nastaveno na nastavení Odvození možnosti v dialogovém okně Výchozí nastavení VB. Chcete-li získat přístup k dialogovému okně Výchozí hodnoty VB, klepněte v nabídce Nástroje na příkaz Možnosti. V dialogovém okně Možnosti rozbalte položku Projekty a řešení a klepněte na tlačítko Výchozí hodnoty VB. Počáteční výchozí nastavení ve výchozím nastavení VB je On
.
Nastavení odvození možnosti na příkazovém řádku
Do příkazu vbc zahrňte možnost kompilátoru -optioninfer.
Výchozí datové typy a hodnoty
Následující tabulka popisuje výsledky různých kombinací určení datového typu a inicializátoru Dim
v příkazu.
Zadaný datový typ? | Inicializátor byl zadán? | Příklad | Výsledek |
---|---|---|---|
No | Ne | Dim qty |
Pokud Option Strict je vypnutá (výchozí), proměnná je nastavená na Nothing hodnotu .Pokud Option Strict je zapnutá, dojde k chybě v době kompilace. |
No | Ano | Dim qty = 5 |
Pokud Option Infer je zapnutá (výchozí), proměnná přebírá datový typ inicializátoru. Viz odvození místního typu.Pokud Option Infer je vypnutý a Option Strict je vypnutý, proměnná přebírá datový typ Object .Pokud Option Infer je vypnutý a Option Strict je zapnutý, dojde k chybě v době kompilace. |
Yes | No | Dim qty As Integer |
Proměnná se inicializuje na výchozí hodnotu datového typu. Další informace naleznete v tématu Dim – příkaz. |
Ano | Yes | Dim qty As Integer = 5 |
Pokud datový typ inicializátoru není konvertibilní na zadaný datový typ, dojde k chybě kompilace. |
Příklad 1
Následující příklady ukazují, jak Option Infer
příkaz umožňuje odvozovat místní typ.
' Enable Option Infer before trying these examples.
' Variable num is an Integer.
Dim num = 5
' Variable dbl is a Double.
Dim dbl = 4.113
' Variable str is a String.
Dim str = "abc"
' Variable pList is an array of Process objects.
Dim pList = Process.GetProcesses()
' Variable i is an Integer.
For i = 1 To 10
Console.WriteLine(i)
Next
' Variable item is a string.
Dim lst As New List(Of String) From {"abc", "def", "ghi"}
For Each item In lst
Console.WriteLine(item)
Next
' Variable namedCust is an instance of the Customer class.
Dim namedCust = New Customer With {.Name = "Blue Yonder Airlines",
.City = "Snoqualmie"}
' Variable product is an instance of an anonymous type.
Dim product = New With {Key .Name = "paperclips", .Price = 1.29}
' If customers is a collection of Customer objects in the following
' query, the inferred type of cust is Customer, and the inferred type
' of custs is IEnumerable(Of Customer).
Dim custs = From cust In customers
Where cust.City = "Seattle"
Select cust.Name, cust.ID
Příklad 2
Následující příklad ukazuje, že typ běhu se může lišit, pokud je proměnná identifikována jako .Object
' Disable Option Infer when trying this example.
Dim someVar = 5
Console.WriteLine(someVar.GetType.ToString)
' If Option Infer is instead enabled, the following
' statement causes a run-time error. This is because
' someVar was implicitly defined as an integer.
someVar = "abc"
Console.WriteLine(someVar.GetType.ToString)
' Output:
' System.Int32
' System.String