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