Вывод локального типа (Visual Basic)
Компилятор Visual Basic использует определение типа для определения типов данных локальных переменных, объявляемых без предложения As.Компилятор выводит тип переменной из типа инициализированного выражения.Это позволяет объявлять переменные без явного формулирования типа, как показано в следующем примере. В результате объявлений переменные num1 и num2 строго типизированы как целые числа.
Public Sub inferenceExample()
' Using explicit typing.
Dim num1 As Integer = 3
' Using local type inference.
Dim num2 = 3
End Sub
Примечание |
---|
Если вы не хотите, чтобы num2 в предыдущем примере была введена как Integer, можно указать другой тип с помощью такого объявления, как Dim num3 As Object = 3 или Dim num4 As Double = 3. |
Вывод локального типа происходит на уровне процедуры.Его нельзя использовать для объявления переменных на уровне модуля (в рамках класса, структуры, модуля или интерфейса, но не в рамках процедуры или блока).Если бы num2 в предыдущем примере была полем класса, а не локальной переменной в процедуре, объявление привело бы к ошибке с Option Strict "on" и классифицировало бы num2 как Object с Option Strict "off".Аналогично, вывод локального типа не применяется к переменным уровня процедур, объявленных как Static.
Определение типа илипозднее связывание
Код, который использует выведение типа напоминает код, основанный на позднем связывании.Тем не менее, выведение типа строго типизирует переменные вместо того, чтобы оставлять их в качестве Object.Компилятор использует инициализатор переменной для определения типа переменной во время компиляции для создания кода с ранней привязкой.В предыдущем примере num2, как и num1, объявляется как тип Integer.
Поведение переменных с ранней привязкой отличается от поведения переменных с поздней привязкой, для которых тип известен только во время выполнения.Знание типа заранее позволяет компилятору выявить проблемы до выполнения, точно выделить память и выполнить другие действия по оптимизации.Раннее связывание также позволяет интегрированной среде разработки Visual Basic (IDE) предоставлять справку IntelliSense об элементах объекта.Раннее связывание также является предпочтительным с точки зрения производительности.Это объясняется тем, что все данные, хранящиеся в переменной с поздней привязкой, должны быть упакованы как тип Object и доступ к элементам типа во время выполнения делает программу медленнее.
Примеры
Вывод типа происходит, когда локальная переменная объявлена без предложения As и инициализирована.Компилятор использует тип присвоенного начального значения в качестве типа переменной.Например, все следующие строки кода объявляют переменную типа String.
' Using explicit typing.
Dim name1 As String = "Springfield"
' Using local type inference.
Dim name2 = "Springfield"
Следующий код демонстрирует два эквивалентных способа создания массива целых чисел.
' 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}
Вывод типа удобно использовать для определения типа переменной управления циклом.В следующем коде компилятор выводит, что number относится к типу Integer, поскольку someNumbers2 из предыдущего примера является массивом целых чисел.
Dim total = 0
For Each number In someNumbers2
total += number
Next
Выведение локального типа можно использовать в инструкциях Using, чтобы установить тип имени ресурса, как показано в следующем примере.
Using proc = New System.Diagnostics.Process
' Insert code to work with the resource.
End Using
Тип переменной также может быть выведен из возвращаемых значений функции, как показано в следующем примере.И pList1, и pList2 являются массивами процессов, потому что Process.GetProcesses возвращает массив процессов.
' Using explicit typing.
Dim pList1() As Process = Process.GetProcesses()
' Using local type inference.
Dim pList2 = Process.GetProcesses()
Option Infer
Option Infer позволяет определить, разрешено ли вывод локального типа в заданном файле.Чтобы включить или заблокировать параметр, введите одну из следующих инструкций в начале файла.
Option Infer On
Option Infer Off
Если не задать значение для параметра Option Infer в коде, по умолчанию в компиляторе используется значение Option Infer On.В проектах, обновленных с Visual Basic 2008 или более ранних версий, по умолчанию в компиляторе используется значение Option Infer Off.
Если значение, заданное Option Infer в файле, конфликтует со значением, заданным в IDE или в командной строке, то значение в файле имеет приоритет.
Дополнительные сведения см. в разделах Оператор Option Infer и Страница "Компиляция" в конструкторе проектов (Visual Basic).
Ограничения
Выведение типа может использоваться только для нестатических локальных переменных; оно не может использоваться для определения типа полей класса, свойств или функций.
См. также
Ссылки
Оператор For Each... Next (Visual Basic)
Оператор For... Next (Visual Basic)