Оператор Option Strict

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

Синтаксис

Option Strict { On | Off }

Детали

Термин Определение
On Необязательно. Option Strict Включает проверка.
Off Необязательно. Отключает Option Strict проверка.

Замечания

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

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

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

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

Примечание.

В конфигурациях предупреждений, которые можно задать на странице компиляции, конструктор проектов (Visual Basic), есть три параметра, которые соответствуют трем условиям, которые вызывают ошибку во время компиляции. Сведения об использовании этих параметров см. в разделе "Настройка конфигураций предупреждений" в интегрированной среде разработки далее в этом разделе.

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

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

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

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

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

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

Неявные ошибки сужения преобразования

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

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

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

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

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

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

Ошибки последней привязки

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

Ошибки типа неявного объекта

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

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

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

Типы данных и значения по умолчанию

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

Если оператор Option Strict не присутствует

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

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

Установка параметра Strict в интегрированной среде разработки

Примечание.

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

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

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

Настройка конфигураций предупреждений в интегрированной среде разработки

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

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

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

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

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

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

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

При создании проекта параметр "Строгий" на вкладке "Компиляция" задан параметр "Строгий" в диалоговом окне "Параметры".

Чтобы задать Option Strict в этом диалоговом окне, в меню "Сервис " нажмите кнопку " Параметры". В диалоговом окне Параметры разверните узел Проекты и решения и выберите пункт Параметры Visual Basic по умолчанию. Начальным параметром по умолчанию в VB Defaults является Off.

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

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

Пример 1

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

' 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

Пример 2

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

' 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

Пример 3

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

См. также