Option Infer - оператор
Включает использование локального определения типов при объявлении переменных.
Синтаксис
Option Infer { On | Off }
Детали
Термин | Определение |
---|---|
On |
Необязательно. Включает локальное определение типов. |
Off |
Необязательно. Отключает локальное определение типов. |
Замечания
Чтобы задать Option Infer
в файле, введите Option Infer On
или Option Infer Off
в начале файла перед всем остальным исходным кодом. Если значение, заданное для Option Infer
в файле, конфликтует со значением, заданным в среде разработки или в командной строке, приоритет имеет значение в файле.
Если задать для Option Infer
значение On
, можно объявлять локальные переменные, не задавая явным образом тип данных. Компилятор определяет тип переменной по типу ее выражения инициализации.
На следующей иллюстрации Option Infer
включен. Переменная в объявлении Dim someVar = 2
объявляется как целочисленная определением типов.
На следующем снимке экрана показан IntelliSense при включении параметра "Вывод".
На следующей иллюстрации Option Infer
отключен. Переменная в объявлении Dim someVar = 2
объявляется как Object
определением типов. В этом примере параметр "Строгий" установлен настранице компиляции, конструктор проектов (Visual Basic).
На следующем снимке экрана показан IntelliSense при отключении параметра:
Примечание.
Если переменная объявлена как Object
, тип времени выполнения может измениться в ходе работы программы. Visual Basic выполняет операции, называемые боксом и распаковкой для преобразования между Object
типом и типом значения, что делает выполнение более медленным. Сведения о боксе и распаковки см. в спецификации языка Visual Basic.
Определение типов применяется на уровне процедур и не применяется вне процедур в классах, структурах, модулях и интерфейсах.
Дополнительные сведения см. в разделе "Вывод локальных типов".
Если оператор Option Infer отсутствует
Если исходный Option Infer
код не содержит инструкцию, используется параметр "Вывод параметров" на странице компиляции, конструктор проектов (Visual Basic). Если используется компилятор командной строки, используется параметр компилятора -optioninfer .
Чтобы включить Option Infer в среде разработки
Выберите проект в обозревателе решений. В меню Проект выберите пункт Свойства.
Откройте вкладку Компиляция.
Задайте значение в поле вывода "Параметр".
При создании проекта параметр "Вывод параметров" на вкладке "Компиляция" устанавливаетсяв диалоговом окне "Выбор параметров" в диалоговом окне "Значения по умолчанию VB". Чтобы открыть диалоговое окно по умолчанию VB, в меню "Сервис" нажмите кнопку "Параметры". В диалоговом окне Параметры разверните узел Проекты и решения и выберите пункт Параметры Visual Basic по умолчанию. Начальным параметром по умолчанию в VB Defaults является On
.
Чтобы включить Option Infer в командной строке
Включите параметр компилятора -optioninfer в команду vbc.
Типы данных и значения по умолчанию
В следующей таблице перечислены результаты различных сочетаний заданных типов данных и инициализаторов в операторе Dim
.
Указан тип данных? | Указан инициализатор? | Пример | Результат |
---|---|---|---|
No | No | Dim qty |
Если Option Strict отключен (по умолчанию), для переменной устанавливается значение Nothing .Если параметр Option Strict включен, возникает ошибка времени при компиляции. |
No | Да | Dim qty = 5 |
Если параметр Option Infer включен (по умолчанию), переменная получает тип данных инициализатора. См . вывод локальных типов.Если параметры Option Infer и Option Strict отключены, переменная получает тип данных Object .Если параметр Option Infer отключен, а параметр Option Strict включен, возникает ошибка времени компиляции. |
Да | Нет | Dim qty As Integer |
Переменная инициализируется со значением по умолчанию для типа данных. Дополнительные сведения см. в инструкции Dim. |
Да | Да | Dim qty As Integer = 5 |
Если тип данных инициализатора нельзя преобразовать в указанный тип данных, возникает ошибка времени компиляции. |
Пример 1
В следующих примерах показано, как оператор Option Infer
включает локальное определение типов.
' 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
Пример 2
В следующем примере показано, что тип времени выполнения может различаться, когда переменная указана как 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