Поделиться через


Вывод локального типа

Обновлен: Июль 2008

Компилятор в Visual Basic 2008 использует выведение типа для определения типов данных локальных переменных, объявленных без условия As. Компилятор выводит тип переменной из типа инициализированного выражения. Это позволяет объявлять переменные без явного формулирования типа, как показано в следующем примере.

Public Sub inferenceExample()

    ' Using explicit typing.
    Dim num1 As Integer = 3

    ' Using local type inference.
    Dim num2 = 3

End Sub
Bb384937.alert_note(ru-ru,VS.90).gifПримечание.

Выведение локального типа нельзя использовать для объявления полей класса. Если бы num2 в предыдущем примере было полем, а не локальной переменной, объявление привело бы к ошибке с Option Strict "on" и классифицировало бы num2 как Object с Option Strict "off". Аналогичным образом типы статических переменных не могут быть получены, когда включен Option Strict. С выключенным Option Strict тип staticVar в Static staticVar = 5 является Object.

Код, который использует выведение типа напоминает код, основанный на позднем связывании. Тем не менее, выведение типа строго типизирует переменные вместо того, чтобы оставлять их в качестве Object. Компилятор использует инициализатор переменной для определения типа переменной во время компиляции для создания кода с ранней привязкой. В предыдущем примере num2 объявляется как тип Integer.

Поведение переменных с ранней привязкой отличается от поведения переменных с поздней привязкой, для которых тип известен только во время выполнения. Знание типа заранее позволяет компилятору выявить проблемы до выполнения, точно выделить память и выполнить другие действия по оптимизации. Раннее связывание также позволяет интегрированной среде разработки Visual Basic (IDE) предоставлять справку IntelliSense об элементах объекта. Раннее связывание также является предпочтительным с точки зрения производительности. Это объясняется тем, что все данные, хранящиеся в переменной с поздней привязкой, должны быть упакованы как тип Object и доступ к элементам типа во время выполнения делает программу медленнее.

Bb384937.alert_note(ru-ru,VS.90).gifПримечание.

Если вы не хотите, чтобы num2 в предыдущем примере была введена как Integer, можно указать другой тип с помощью такого объявления, как Dim num3 As Object = 3 или Dim num4 As Double = 3.

Примеры

Вычисление типа происходит, когда локальная переменная объявлена без условия 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 являются списками процессов.

' 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 и /optioninfer.

Bb384937.alert_note(ru-ru,VS.90).gifПримечание.

Если значение, заданное Option Infer в файле, конфликтует со значением, заданным в IDE или в командной строке, то значение в файле имеет приоритет.

Ограничения

Выведение типа может использоваться только для нестатических локальных переменных; оно не может использоваться для определения типа полей класса, свойств или функций.

См. также

Основные понятия

Анонимные типы

Раннее и позднее связывание

Знакомство с LINQ в Visual Basic

Ссылки

Инструкция For Each... Next (Visual Basic)

Инструкция For... Next (Visual Basic)

Оператор Option Infer

/optioninfer

Журнал изменений

Дата

Журнал изменений

Причина

Июль 2008

Изменено имя управляющей переменной цикла в тексте подраздела "Примеры" num to number, чтобы соответствовать ее имени в коде.

Обратная связь от клиента.