Оператор Option Strict

Ограничивает преобразования неявных типов данных только расширяющими преобразованиями; запрещает позднее связывание и запрещает неявную типизации, приводящую к типу Object.

Option Strict { On | Off }

Части

Термин

Определение

On

Необязательный. Включает проверку Option Strict.

Off

Необязательный. Отключает проверку Option Strict.

Заметки

Если Option Strict On или Option Strict отображается в файле, следующие условия вызывают ошибку времени компиляции:

  • Неявные сужающие преобразования

  • Позднее связывание

  • Неявная типизация, которая приводит к типу Object

Примечание

В конфигурациях предупреждений, которые можно задать на Страница "Компиляция" в конструкторе проектов (Visual Basic), есть три параметра, соответствующие трем условиям, которые вызывают ошибки времени компиляции.Дополнительные сведения об использовании этих параметров см. в подразделе To set warning configurations in the IDE далее в этом разделе.

Оператор Option Strict Off отключает проверку ошибок и предупреждений для всех трех условий, даже если связанные параметры IDE задают включение этих ошибок и предупреждений. Оператор Option Strict On будет содержать ошибки и предупреждения проверки для всех 3 условий, даже если связанные параметры интегрированной среды разработки определяют, чтобы отключить эти ошибки или предупреждения.

При использовании оператор Option Strict должен находиться перед всеми остальными операторами в файле.

При установке Option Strict к OnVisual Basic проверяет, что типы данных определяются для всех элементов программирования. Типы данных можно задать явно или указать с помощью вывод локального типа. Определение типов данных для всех элементов программирования рекомендуется по следующим причинам:

  • Это позволяет IntelliSense поддерживать переменные и параметры. Это позволяет видеть вводимые в код свойства и другие члены этих переменных.

  • Это позволяет компилятору выполнять проверку типов. Проверка типа поможет найти операторы, которые во время выполнения могут дат сбой из-за ошибок преобразования типа. Она также определяет вызовы методов для объектов, которые не поддерживают эти методы.

  • Оно ускоряется по выполнению кода. Одна причина этого в том, что если не указать тип данных для элемента программирования, компилятор Visual Basic присвоит ей тип Object. Компилированный код может выполнить преобразование между Object и другими типами данных, что снижает производительность.

Ошибки неявных сужающих преобразований

Ошибки неявных сужающих преобразований возникают при наличии неявного преобразования типа данных, которое является сужающим преобразованием.

Visual Basic может преобразовывать много типов данных в другие типы данных. При преобразовании значения одного типа данных в тип данных с меньшим размером или точностью возможна потеря данных. Ошибка времени выполнения возникает, если происходит сбой такого сужающего преобразования. Option Strict обеспечивает во время компиляции уведомление об этих сужающих преобразованиях таким образом, чтобы их можно было избежать. Дополнительные сведения см. в разделах Явные и неявные преобразования (Visual Basic) и Расширяющие и сужающие преобразования (Visual Basic).

К преобразованиям, которые могут привести к ошибкам, относятся неявные преобразования, которые происходят в выражениях. Дополнительные сведения см. в следующих разделах.

При объединении строк с помощью оператора Оператор & (Visual Basic) все преобразования в строки считаются расширенными. Так что эти преобразования не создают ошибки неявного сужающего преобразования, даже если Option Strict включено.

При вызове метода с аргументом, тип данных которого отличается от соответствующего параметра, сужающее преобразование создает ошибку времени компиляции, если параметр Option Strict включен. Ошибки во время компиляции можно избежать с помощью расширяющего преобразования или явного преобразования.

Ошибки неявных сужающих преобразований подавляются во время компиляции для преобразований элементов коллекции For Each…Next в переменную управления циклом. Это происходит, даже если включен параметр Option Strict. Дополнительные сведения см. в подразделе "Сужающие преобразования" раздела Оператор For Each... Next (Visual Basic).

Ошибки позднего связывания

Позднее связывание объекта возникает при его присваивании свойству или методу переменной, объявленной с типом Object. Дополнительные сведения см. в разделе Раннее и позднее связывание (Visual Basic).

Ошибки неявных типов объектов

Ошибки неявных типов объектов возникают, когда для объявленной переменной не может быть выведен соответствующий тип, поэтому выводится тип Object. Это происходит в основном при использовании оператора Dim для объявления переменной без использования предложения As, если параметр Option Infer отключен. Дополнительные сведения см. в разделах Option Infer - оператор и Спецификация языка Visual Basic.

Для параметров методов предложение As не является обязательным, если параметр Option Strict отключен. Однако, если любой из параметров использует предложение As, для других также необходимо его использование. Если Option Strict имеет значение "включен", предложение As является обязательным для каждого определения параметра.

Если объявить переменную без использования предложения As и задать ей значение Nothing, переменная имеет тип Object. В этом случае ошибка времени компиляции, когда Option Strict включен и Option Infer включен, не возникает. Примером этого является Dim something = Nothing.

Значения и типы данных по умолчанию

В следующей таблице описаны результаты различных комбинаций указания типа данных и инициализации в операторе Оператор Dim (Visual Basic).

Указан тип данных?

Инициализатор указан?

Пример

Результат

Нет

Нет

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 Strict

Если исходный код не содержит оператор Option Strict , используется параметр Option strict Страница "Компиляция" в конструкторе проектов (Visual Basic). Компилировать страницы имеет параметры, которые обеспечивают дополнительный контроль над условиями, которые генерируют ошибку.

Если используется компилятор командной строки, можно воспользоваться параметром компилятора /optionstrict, чтобы задать параметр Option Strict.

Настройка Option Strict в IDE

Примечание

Отображаемые на компьютере имена или расположения некоторых элементов пользовательского интерфейса Visual Studio могут отличаться от указанных в следующих инструкциях. Это зависит от имеющегося выпуска Visual Studio и используемых параметров. Дополнительные сведения см. в разделе Настройка параметров разработки в Visual Studio.

  1. Выберите проект в обозревателе решений. В меню Проект выберите пункт Свойства. Дополнительные сведения см. в разделе Знакомство с конструктором проектов.

  2. На вкладке Компилировать задайте значение в поле Option Strict.

Задание конфигураций предупреждений в IDE

При использовании Страница "Компиляция" в конструкторе проектов (Visual Basic) вместо оператора Option Strict пользователь имеет дополнительный контроль над условиями, создающими ошибки. Раздел Конфигурации предупреждений на странице Компиляция имеет параметры, соответствующие трем условиям, вызывающим ошибку времени компиляции при включенном параметре Option Strict. Ниже перечислены эти параметры:

  • Неявное преобразование

  • Позднее связывание; вызов может завершиться сбоем во время выполнения

  • Неявный тип; объект предполагается

При задании для параметра Option Strict значения On для всех трех параметров конфигурации предупреждений задается значение Ошибка. При задании для параметра Option Strict значения Off для всех трех параметров задается значение Нет.

Можно индивидуально изменить каждый параметр конфигурации предупреждений для свойство Нет, Предупреждение или Ошибка. Если всем трем параметрам конфигурации предупреждения задано значение Ошибка, On появляется в поле Option strict. Если всем трем параметрам задано значение Нет, в этом поле появляется Off. Для любого другого сочетания этих параметров отображается (другой).

Задание значения по умолчанию параметра Option Strict для новых проектов

При создании проекта для параметра Option Strict на вкладке Компиляция задается значение параметра Option Strict в диалоговом окне Параметры.

Чтобы задать параметр Option Strict в этом диалоговом окне, в меню Сервис выберите команду Параметры. В диалоговом окне Параметры разверните узел Проекты и решения и выберите пункт Параметры VB по умолчанию. Исходный параметр по умолчанию вПараметры VB по умолчанию - Off.

Установка Option Strict в командной строке

Включите параметр компилятора /optionstrict в команду vbc.

Пример

В следующих примерах покаханы ошибки времени компиляции, вызванные неявными преобразования типов, которые являются сужающими преобразованиями. Эта категория ошибок соответствует состоянию неявного преобразования на странице Компиляция.

' If Option Strict is on, this implicit narrowing 
' conversion causes a compile-time error. 
' The commented statements below use explicit 
' conversions to avoid a compile-time error. 
Dim cyclists As Long = 5
Dim bicycles As Integer = cyclists
'Dim bicycles As Integer = CType(cyclists, Integer) 
'Dim bicycles As Integer = CInt(cyclists) 
'Dim bicycles As Integer = Convert.ToInt32(cyclists) 


' If Option Strict is on, this implicit narrowing 
' conversion causes a compile-time error. 
' The commented statements below use explicit 
' conversions to avoid a compile-time error. 
Dim charVal As Char = "a" 
'Dim charVal As Char = "a"c 
'Dim charVal As Char = CType("a", Char) 


' If Option Strict is on, a compile-time error occurs. 
' If Option Strict is off, the string is implicitly converted 
' to a Double, and then is added to the other number. 
Dim myAge As Integer = "34" + 6


' If Option Strict is on, a compile-time error occurs. 
' If Option Strict is off, the floating-point number 
' is implicitly converted to a Long. 
Dim num = 123.45 \ 10

В следующем примере демонстрируется ошибка во время компиляции, вызванная поздним связывание. Эта категория ошибок соответствует состоянию Позднее связывание; возможный сбой вызова во время выполнения на странице Компиляция.

' If Option Strict is on, this late binding 
' causes a compile-time error. If Option Strict 
' is off, the late binding instead causes a 
' run-time error. 
Dim punchCard As New Object
punchCard.Column = 5

В следующих примерах показаны ошибки, вызванные переменными, объявленные с неявным типом Object. Эта категория ошибок соответствует состоянию Неявный тип; предполагается объект на странице Компиляция.

' If Option Strict is on and Option Infer is off, 
' this Dim statement without an As clause  
' causes a compile-time error. 
Dim cardReaders = 5

' If Option Strict is on, a compile-time error occurs. 
' If Option Strict is off, the variable is set to Nothing. 
Dim dryWall
' If Option Strict is on, this parameter without an 
' As clause causes a compile-time error. 
Private Sub DetectIntergalacticRange(ByVal photonAttenuation)

End Sub

См. также

Задачи

Практическое руководство. Доступ к членам объекта (Visual Basic)

Ссылки

Страница "Компиляция" в конструкторе проектов (Visual Basic)

Оператор Option Explicit (Visual Basic)

Функции преобразования типов (Visual Basic)

/optionstrict

Страница "Параметры Visual Basic по умолчанию", папка "Проекты", диалоговое окно "Параметры"

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

Расширяющие и сужающие преобразования (Visual Basic)

Явные и неявные преобразования (Visual Basic)

Встроенные выражения в XML (Visual Basic)

Неявное преобразование делегата (Visual Basic)

Позднее связывание в решениях Office