Option Strict StatementOption Strict Statement

Ограничивают неявные преобразования типов данных только расширяющими преобразованиями, запрещает позднее связывание и запрещает неявную типизацию, которая приводит к Object типу.Restricts implicit data type conversions to only widening conversions, disallows late binding, and disallows implicit typing that results in an Object type.

СинтаксисSyntax

Option Strict { On | Off }  

КомпонентыParts

ТерминTerm ОпределениеDefinition
On Необязательный элемент.Optional. Включает Option Strict проверку.Enables Option Strict checking.
Off Необязательный элемент.Optional. Отключает Option Strict проверку.Disables Option Strict checking.

RemarksRemarks

Когда Option Strict On или Option Strict появляется в файле, следующие условия вызывают ошибку времени компиляции:When Option Strict On or Option Strict appears in a file, the following conditions cause a compile-time error:

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

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

  • неявная типизация, которая приводит к типу Object.Implicit typing that results in an Object type

Примечание

В конфигурациях предупреждений, которые можно установить на странице Компиляция, конструктор проектов (Visual Basic), существует три параметра, которые соответствуют трем условиям, вызывающим ошибку во время компиляции.In the warning configurations that you can set on the Compile Page, Project Designer (Visual Basic), there are three settings that correspond to the three conditions that cause a compile-time error. Сведения об использовании этих параметров см. в разделе Настройка конфигураций предупреждений в интегрированной среде разработки далее в этой статье.For information about how to use these settings, see To set warning configurations in the IDE later in this topic.

Option Strict OffИнструкция отключает проверку ошибок и предупреждений для всех трех условий, даже если связанные параметры интегрированной среды разработки указывают на включение этих ошибок или предупреждений.The Option Strict Off statement turns off error and warning checking for all three conditions, even if the associated IDE settings specify to turn on these errors or warnings. Option Strict OnИнструкция включает проверку ошибок и предупреждений для всех трех условий, даже если связанные параметры интегрированной среды разработки указывают на отключение этих ошибок или предупреждений.The Option Strict On statement turns on error and warning checking for all three conditions, even if the associated IDE settings specify to turn off these errors or warnings.

При использовании Option Strict инструкция должна располагаться перед любыми другими инструкциями кода в файле.If used, the Option Strict statement must appear before any other code statements in a file.

Если задано Option Strict значение On , Visual Basic проверяет, указаны ли типы данных для всех элементов программирования.When you set Option Strict to On, Visual Basic checks that data types are specified for all programming elements. Типы данных могут быть заданы явно или заданы с помощью определения локального типа.Data types can be specified explicitly, or specified by using local type inference. Указание типов данных для всех элементов программирования рекомендуется по следующим причинам.Specifying data types for all your programming elements is recommended, for the following reasons:

  • Он обеспечивает поддержку IntelliSense для переменных и параметров.It enables IntelliSense support for your variables and parameters. Это позволяет видеть их свойства и другие члены при вводе кода.This enables you to see their properties and other members as you type code.

  • Он позволяет компилятору выполнять проверку типов.It enables the compiler to perform type checking. Проверка типов помогает найти инструкции, которые могут завершиться ошибкой во время выполнения из-за ошибок преобразования типов.Type checking helps you find statements that can fail at run time because of type conversion errors. Он также определяет вызовы методов для объектов, которые не поддерживают эти методы.It also identifies calls to methods on objects that do not support those methods.

  • Это ускоряет выполнение кода.It speeds up the execution of code. Одна из причин этого заключается в том, что если не указать тип данных для программного элемента, компилятор Visual Basic присваивает ему Object тип.One reason for this is that if you do not specify a data type for a programming element, the Visual Basic compiler assigns it the Object type. Скомпилированному коду может потребоваться выполнить преобразование между Object и другими типами данных, что снижает производительность.Compiled code might have to convert back and forth between Object and other data types, which reduces performance.

Неявные узкие ошибки преобразованияImplicit Narrowing Conversion Errors

Ошибки неявных сужающих преобразований возникают при наличии неявного преобразования типа данных, которое является сужающим преобразованием.Implicit narrowing conversion errors occur when there is an implicit data type conversion that is a narrowing conversion.

Visual Basic может преобразовывать многие типы данных в другие типы данных.Visual Basic can convert many data types to other data types. Потери данных могут происходить, когда значение одного типа данных преобразуется в тип данных с меньшей точностью или меньшей емкостью.Data loss can occur when the value of one data type is converted to a data type that has less precision or a smaller capacity. Ошибка времени выполнения возникает в случае сбоя такого преобразования с сужением.A run-time error occurs if such a narrowing conversion fails. Option Strict обеспечивает уведомление во время компиляции об этих сужающих преобразованиях, чтобы их можно было избежать.Option Strict ensures compile-time notification of these narrowing conversions so that you can avoid them. Дополнительные сведения см. в разделе явные и неявные преобразования , а расширяющие и сужающие преобразования.For more information, see Implicit and Explicit Conversions and Widening and Narrowing Conversions.

Преобразования, которые могут вызвать ошибки, включают неявные преобразования, происходящие в выражениях.Conversions that can cause errors include implicit conversions that occur in expressions. Дополнительные сведения см. в следующих разделах:For more information, see the following topics:

При сцеплении строк с помощью оператора&все преобразования в строки считаются расширяющими.When you concatenate strings by using the & Operator, all conversions to the strings are considered to be widening. Поэтому эти преобразования не создают неявные сужающие ошибки преобразования, даже если Option Strict включен.So these conversions do not generate an implicit narrowing conversion error, even if Option Strict is on.

При вызове метода с аргументом, который имеет тип данных, отличный от соответствующего параметра, понижающие преобразования вызывают ошибку времени компиляции, если Option Strict она включена.When you call a method that has an argument that has a data type different from the corresponding parameter, a narrowing conversion causes a compile-time error if Option Strict is on. Ошибку времени компиляции можно избежать, используя расширяющее преобразование или явное преобразование.You can avoid the compile-time error by using a widening conversion or an explicit conversion.

Неявные сужающие ошибки преобразования подавляются во время компиляции для преобразования из элементов в For Each…Next коллекции в переменную управления циклом.Implicit narrowing conversion errors are suppressed at compile-time for conversions from the elements in a For Each…Next collection to the loop control variable. Это происходит даже в том случае Option Strict , если включен.This occurs even if Option Strict is on. Дополнительные сведения см. в подразделе «сужающие преобразования» раздела For Each... Следующий оператор.For more information, see the "Narrowing Conversions" section in For Each...Next Statement.

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

Позднее связывание объекта возникает при его присваивании свойству или методу переменной, объявленной с типом Object.An object is late bound when it is assigned to a property or method of a variable that is declared to be of type Object. Дополнительные сведения см. в разделе раннее и позднее связывание.For more information, see Early and Late Binding.

Ошибки неявного типа объектаImplicit Object Type Errors

Ошибки неявных типов объектов возникают, когда для объявленной переменной невозможно вывести соответствующий тип, поэтому выводится тип Object.Implicit object type errors occur when an appropriate type cannot be inferred for a declared variable, so a type of Object is inferred. Это происходит в основном при использовании оператора Dim для объявления переменной без использования предложения As, если параметр Option Infer отключен.This primarily occurs when you use a Dim statement to declare a variable without using an As clause, and Option Infer is off. Дополнительные сведения см. в разделе Option Infer и Спецификация языка Visual Basic.For more information, see Option Infer Statement and the Visual Basic Language Specification.

Для параметров метода As предложение является необязательным, если Option Strict параметр имеет значение OFF.For method parameters, the As clause is optional if Option Strict is off. Однако если какой либо параметр использует As предложение, все они должны использовать его.However, if any one parameter uses an As clause, they all must use it. Если параметр Option Strict имеет значение ON, As предложение требуется для каждого определения параметра.If Option Strict is on, the As clause is required for every parameter definition.

Если объявить переменную без использования As предложения и присвоить ей значение Nothing , переменная имеет тип Object .If you declare a variable without using an As clause and set it to Nothing, the variable has a type of Object. В этом случае ошибка времени компиляции не возникает, если Option Strict включен и Option Infer находится в on.No compile-time error occurs in this case when Option Strict is on and Option Infer is on. Примером этого является Dim something = Nothing .An example of this is Dim something = Nothing.

Типы данных и значения по умолчаниюDefault Data Types and Values

В следующей таблице описаны результаты различных сочетаний с указанием типа данных и инициализатора в операторе Dim.The following table describes the results of various combinations of specifying the data type and initializer in a Dim Statement.

Указан тип данных?Data type specified? Указан инициализатор?Initializer specified? ПримерExample РезультатResult
НетNo НетNo Dim qty Если Option Strict отключен (по умолчанию), для переменной устанавливается значение Nothing.If Option Strict is off (the default), the variable is set to Nothing.

Если параметр Option Strict включен, возникает ошибка времени при компиляции.If Option Strict is on, a compile-time error occurs.
НетNo ДаYes Dim qty = 5 Если параметр Option Infer включен (по умолчанию), переменная получает тип данных инициализатора.If Option Infer is on (the default), the variable takes the data type of the initializer. См. раздел определение локального типа.See Local Type Inference.

Если параметры Option Infer и Option Strict отключены, переменная получает тип данных Object.If Option Infer is off and Option Strict is off, the variable takes the data type of Object.

Если параметр Option Infer отключен, а параметр Option Strict включен, возникает ошибка времени компиляции.If Option Infer is off and Option Strict is on, a compile-time error occurs.
ДаYes НетNo Dim qty As Integer Переменная инициализируется со значением по умолчанию для типа данных.The variable is initialized to the default value for the data type. Дополнительные сведения см. в разделе оператор Dim.For more information, see Dim Statement.
ДаYes ДаYes Dim qty As Integer = 5 Если тип данных инициализатора нельзя преобразовать в указанный тип данных, возникает ошибка времени компиляции.If the data type of the initializer is not convertible to the specified data type, a compile-time error occurs.

Если отсутствует оператор Option CaseWhen an Option Strict Statement Is Not Present

Если исходный код не содержит Option Strict инструкцию, то используется параметр Option ограничивал на странице Компиляция, конструктор проектов (Visual Basic) .If the source code does not contain an Option Strict statement, the Option strict setting on the Compile Page, Project Designer (Visual Basic) is used. На странице Компиляция имеются параметры, обеспечивающие дополнительный контроль над условиями, которые вызывают ошибку.The Compile Page has settings that provide additional control over the conditions that generate an error.

При использовании компилятора командной строки можно использовать параметр компилятора -оптионстрикт , чтобы указать параметр для Option Strict .If you are using the command-line compiler, you can use the -optionstrict compiler option to specify a setting for Option Strict.

Установка Option в интегрированной среде разработкиTo set Option Strict in the IDE

Примечание

Отображаемые на компьютере имена или расположения некоторых элементов пользовательского интерфейса Visual Studio могут отличаться от указанных в следующих инструкциях.Your computer might show different names or locations for some of the Visual Studio user interface elements in the following instructions. Это зависит от имеющегося выпуска Visual Studio и используемых параметров.The Visual Studio edition that you have and the settings that you use determine these elements. Дополнительные сведения см. в разделе Персонализация среды IDE.For more information, see Personalizing the IDE.

  1. В Обозреватель решенийвыберите проект.In Solution Explorer, select a project. В меню Проект выберите Свойства.On the Project menu, click Properties.

  2. На вкладке Компиляция задайте значение в поле optioned (параметр) .On the Compile tab, set the value in the Option Strict box.

Установка конфигураций предупреждений в интегрированной среде разработкиTo set warning configurations in the IDE

При использовании страницы компиляции конструктор проектов (Visual Basic) вместо Option Strict инструкции имеет дополнительный контроль над условиями, которые создают ошибки.When you use the Compile Page, Project Designer (Visual Basic) instead of an Option Strict statement, you have additional control over the conditions that generate errors. Раздел конфигурации предупреждений на странице Компиляция имеет параметры, соответствующие трем условиям, вызывающим ошибку во время компиляции, когда Option Strict имеет значение ON.The Warning configurations section of the Compile Page has settings that correspond to the three conditions that cause a compile-time error when Option Strict is on. Ниже приведены эти параметры.Following are these settings:

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

  • Позднее связывание; возможный сбой вызова во время выполненияLate binding; call could fail at run time

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

При задании для параметра Option Strict значения Вкл для всех трех параметров конфигурации предупреждений задается значение Ошибка.When you set Option Strict to On, all three of these warning configuration settings are set to Error. При задании для параметра Option Strict значения Выкл для всех трех параметров задается значение Нет.When you set Option Strict to Off, all three settings are set to None.

Вы можете задать для каждого отдельного параметра конфигурации предупреждений значение Нет, Предупреждение или Ошибка.You can individually change each warning configuration setting to None, Warning, or Error. Если для всех трех параметров конфигурации предупреждения задано значение Ошибка, On в Option strict поле отображается.If all three warning configuration settings are set to Error, On appears in the Option strict box. Если для всех трех свойств задано значение нет, Off в этом поле отображается.If all three are set to None, Off appears in this box. Для любого другого сочетания этих параметров указывается значение (пользовательский).For any other combination of these settings, (custom) appears.

Задание параметра установки по умолчанию для новых проектовTo set the Option Strict default setting for new projects

При создании проекта на вкладке Компиляция в параметре Option -Setting задано значение, установленное в параметре в диалоговом окне Параметры .When you create a project, the Option Strict setting on the Compile tab is set to the Option Strict setting in the Options dialog box.

Чтобы задать значение Option Strict в этом диалоговом окне, в меню Сервис выберите пункт Параметры.To set Option Strict in this dialog box, on the Tools menu, click Options. В диалоговом окне Параметры разверните узел Проекты и решения и выберите пункт Параметры Visual Basic по умолчанию.In the Options dialog box, expand Projects and Solutions, and then click VB Defaults. Начальным значением по умолчанию в VB по умолчанию является Off .The initial default setting in VB Defaults is Off.

Установка параметра Option в командной строкеTo set Option Strict on the command line

Включите параметр компилятора -оптионстрикт в команду vbc .Include the -optionstrict compiler option in the vbc command.

ПримерExample

В следующих примерах показаны ошибки времени компиляции, вызванные неявными преобразованиями типов, которые являются сужающими преобразованиями.The following examples demonstrate compile-time errors caused by implicit type conversions that are narrowing conversions. Эта категория ошибок соответствует условию неявного преобразования на странице Компиляция.This category of errors corresponds to the Implicit conversion condition on the Compile Page.

' 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

ПримерExample

В следующем примере показана ошибка времени компиляции, вызванная поздним связыванием.The following example demonstrates a compile-time error caused by late binding. Эта категория ошибок соответствует поздней привязке; вызов может завершиться сбоем во время выполнения на странице компиляции.This category of errors corresponds to the Late binding; call could fail at run time condition on the Compile Page.

' 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

ПримерExample

В следующих примерах демонстрируются ошибки, вызванные переменными, объявленными с неявным типом Object .The following examples demonstrate errors caused by variables that are declared with an implicit type of Object. Эта категория ошибок соответствует неявному типу; предполагаемое условие объекта на странице компиляции.This category of errors corresponds to the Implicit type; object assumed condition on the Compile Page.

' 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

См. такжеSee also