Option Infer — Instrukcja
Umożliwia używanie wnioskowania typu lokalnego w deklarowaniu zmiennych.
Składnia
Option Infer { On | Off }
generatora
Termin | Definicja |
---|---|
On |
Opcjonalny. Włącza wnioskowanie typu lokalnego. |
Off |
Opcjonalny. Wyłącza wnioskowanie typu lokalnego. |
Uwagi
Aby ustawić Option Infer
plik, wpisz Option Infer On
lub Option Infer Off
w górnej części pliku, przed jakimkolwiek innym kodem źródłowym. Jeśli wartość ustawiona Option Infer
w pliku powoduje konflikt z wartością ustawioną w środowisku IDE lub w wierszu polecenia, wartość w pliku ma pierwszeństwo.
Po ustawieniu Option Infer
On
wartości na wartość można zadeklarować zmienne lokalne bez jawnego stwierdzenia typu danych. Kompilator wywnioskuje typ danych zmiennej z typu wyrażenia inicjalizacji.
Na poniższej ilustracji Option Infer
jest włączona. Zmienna w deklaracji Dim someVar = 2
jest zadeklarowana jako liczba całkowita według wnioskowania typu.
Poniższy zrzut ekranu przedstawia funkcję IntelliSense, gdy funkcja Wnioskowanie opcji jest włączona:
Na poniższej ilustracji Option Infer
jest wyłączona. Zmienna w deklaracji Dim someVar = 2
jest zadeklarowana jako Object
wnioskowanie typu. W tym przykładzie ustawienie Opcja ścisła jest ustawione na Wartość Wyłączone na stronie kompilacji, Project Projektant (Visual Basic).
Poniższy zrzut ekranu przedstawia funkcję IntelliSense, gdy funkcja Wnioskowanie opcji jest wyłączona:
Uwaga
Gdy zmienna jest zadeklarowana jako zmienna Object
, typ czasu wykonywania może ulec zmianie podczas działania programu. Program Visual Basic wykonuje operacje nazywane boxingiem i rozpętowywaniem w celu konwersji między typem wartości a Object
, co sprawia, że wykonywanie jest wolniejsze. Aby uzyskać informacje na temat boksowania i rozpakowania, zobacz Specyfikację języka Visual Basic.
Wnioskowanie typu ma zastosowanie na poziomie procedury i nie ma zastosowania poza procedurą w klasie, strukturze, module lub interfejsie.
Aby uzyskać dodatkowe informacje, zobacz Wnioskowanie typu lokalnego.
Gdy instrukcja wnioskowania opcji nie jest obecna
Jeśli kod źródłowy nie zawiera Option Infer
instrukcji, zostanie użyte ustawienie Wnioskowanie opcji na stronie kompilacji, zostanie użyty program Project Projektant (Visual Basic). Jeśli jest używany kompilator wiersza polecenia, jest używana opcja -optioninfer kompilatora.
Aby ustawić wnioskowanie opcji w środowisku IDE
W Eksplorator rozwiązań wybierz projekt. W menu Project (Projekt) kliknij pozycję Properties (Właściwości).
Kliknij kartę Kompiluj.
Ustaw wartość w polu Wnioskowanie opcji.
Podczas tworzenia nowego projektu ustawienie Wnioskowanie opcji na karcie Kompilowanie jest ustawione na ustawienie Wnioskowanie opcji w oknie dialogowym Wartości domyślne VB. Aby uzyskać dostęp do okna dialogowego Ustawienia domyślne VB, w menu Narzędzia kliknij pozycję Opcje. W oknie dialogowym Opcje rozwiń węzeł Projekty i rozwiązania, a następnie kliknij pozycję Domyślne VB. Początkowe ustawienie domyślne w ustawieniach domyślnych VB to On
.
Aby ustawić wnioskowanie opcji w wierszu polecenia
Dołącz opcję -optioninfer compiler w poleceniu vbc.
Domyślne typy danych i wartości
W poniższej tabeli opisano wyniki różnych kombinacji określania typu danych i inicjatora w instrukcji Dim
.
Określony typ danych? | Określony inicjator? | Przykład | Result |
---|---|---|---|
Nie | Nie. | Dim qty |
Jeśli Option Strict wartość jest wyłączona (wartość domyślna), zmienna jest ustawiona na Nothing wartość .W przypadku Option Strict włączenia wystąpi błąd czasu kompilacji. |
Nie. | Tak | Dim qty = 5 |
Jeśli Option Infer parametr jest włączony (wartość domyślna), zmienna przyjmuje typ danych inicjatora. Zobacz Wnioskowanie typu lokalnego.Jeśli Option Infer wartość jest wyłączona i Option Strict wyłączona, zmienna pobiera typ Object danych .Jeśli Option Infer jest wyłączona i Option Strict jest włączona, wystąpi błąd czasu kompilacji. |
Tak | Nie. | Dim qty As Integer |
Zmienna jest inicjowana do wartości domyślnej dla typu danych. Aby uzyskać więcej informacji, zobacz Dim, instrukcja. |
Tak | Tak | Dim qty As Integer = 5 |
Jeśli typ danych inicjatora nie jest konwertowany na określony typ danych, wystąpi błąd czasu kompilacji. |
Przykład 1
W poniższych przykładach pokazano, jak Option Infer
instrukcja umożliwia wnioskowanie typu lokalnego.
' 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
Przykład 2
W poniższym przykładzie pokazano, że typ czasu wykonywania może się różnić, gdy zmienna Object
jest identyfikowana jako .
' 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